/*!
 * DevExtreme (dx.mobile.debug.js)
 * Version: 18.2.3
 * Build date: Wed Nov 07 2018
 *
 * Copyright (c) 2012 - 2018 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 = 814)
}([
    /*!***************************************************!*\
      !*** ./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 (source.hasOwnProperty(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,
                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 clone, targetValue = target[key],
                        sourceValue = source[key],
                        sourceValueIsArray = false;
                    if (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__) {
        var _typeof = "function" === typeof Symbol && "symbol" === typeof Symbol.iterator ? function(obj) {
            return typeof obj
        } : function(obj) {
            return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : 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" === ("undefined" === typeof object ? "undefined" : _typeof(object)) ? types[typeOfObject] || "object" : "undefined" === typeof object ? "undefined" : _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),
                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 */ 232);
        module.exports = rendererBase.get()
    },
    /*!*****************************************************!*\
      !*** ./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/core/utils/common.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _typeof = "function" === typeof Symbol && "symbol" === typeof Symbol.iterator ? function(obj) {
            return typeof obj
        } : function(obj) {
            return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
        };
        var config = __webpack_require__( /*! ../config */ 25),
            deferredUtils = __webpack_require__( /*! ../utils/deferred */ 7),
            when = deferredUtils.when,
            Deferred = deferredUtils.Deferred,
            each = __webpack_require__( /*! ./iterator */ 3).each,
            typeUtils = __webpack_require__( /*! ./type */ 1);
        var ensureDefined = function(value, defaultValue) {
            return typeUtils.isDefined(value) ? value : defaultValue
        };
        var executeAsync = function(action, context) {
            var timerId, deferred = new Deferred,
                normalizedContext = context || this,
                task = {
                    promise: deferred.promise(),
                    abort: function() {
                        clearTimeout(timerId);
                        deferred.rejectWith(normalizedContext)
                    }
                },
                callback = function() {
                    var result = action.call(normalizedContext);
                    if (result && result.done && typeUtils.isFunction(result.done)) {
                        result.done(function() {
                            deferred.resolveWith(normalizedContext)
                        })
                    } else {
                        deferred.resolveWith(normalizedContext)
                    }
                };
            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;
                delayedDeferreds.push(deferred);
                return deferred
            } else {
                var oldExecutingName = executingName,
                    currentDelayedCount = delayedDeferreds.length;
                executingName = name;
                var result = func();
                if (!result) {
                    if (delayedDeferreds.length > currentDelayedCount) {
                        result = 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
            }
        };
        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 = [],
                maxMatchCount = 0;
            each(items, function(index, itemSrc) {
                var matchCount = 0,
                    item = mapFn ? mapFn(itemSrc) : itemSrc;
                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;
                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 ("undefined" === typeof raw ? "undefined" : _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 splitQuad = function(raw) {
            switch ("undefined" === typeof raw ? "undefined" : _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 normalizeKey = function(id) {
            var key = typeUtils.isString(id) ? id : id.toString(),
                arr = key.match(/[^a-zA-Z0-9_]/g);
            arr && 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 isArraysEqualByValue = function(array1, array2, deep) {
            if (array1.length !== array2.length) {
                return false
            }
            for (var i = 0; i < array1.length; i++) {
                if (!equalByValue(array1[i], array2[i], deep + 1)) {
                    return false
                }
            }
            return true
        };
        var isObjectsEqualByValue = function(object1, object2, deep) {
            for (var propertyName in object1) {
                if (object1.hasOwnProperty(propertyName) && !equalByValue(object1[propertyName], object2[propertyName], deep + 1)) {
                    return false
                }
            }
            for (propertyName in object2) {
                if (!(propertyName in object1)) {
                    return false
                }
            }
            return true
        };
        var equalByValue = function(object1, object2, deep) {
            if (object1 === object2) {
                return true
            }
            var maxDeep = 3;
            deep = deep || 0;
            if (deep >= maxDeep) {
                return true
            }
            if (typeUtils.isObject(object1) && typeUtils.isObject(object2)) {
                return isObjectsEqualByValue(object1, object2, deep)
            } else {
                if (Array.isArray(object1) && Array.isArray(object2)) {
                    return isArraysEqualByValue(object1, object2, deep)
                } else {
                    if (typeUtils.isDate(object1) && typeUtils.isDate(object2)) {
                        return object1.getTime() === object2.getTime()
                    }
                }
            }
            return false
        };
        var getKeyHash = function(key) {
            if (typeUtils.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 = config().serverDecimalSeparator;
            if (typeUtils.isDefined(value)) {
                value = value.toString().replace(".", separator)
            }
            return value
        };
        var noop = function() {};
        var grep = function(elements, checkFunction, invert) {
            var check, result = [],
                expectedCheck = !invert;
            for (var i = 0; i < elements.length; i++) {
                check = !!checkFunction(elements[i], i);
                if (check === expectedCheck) {
                    result.push(elements[i])
                }
            }
            return result
        };
        exports.ensureDefined = ensureDefined;
        exports.executeAsync = executeAsync;
        exports.deferRender = deferRender;
        exports.deferRenderer = deferRenderer;
        exports.deferUpdate = deferUpdate;
        exports.deferUpdater = deferUpdater;
        exports.splitPair = splitPair;
        exports.splitQuad = splitQuad;
        exports.findBestMatches = findBestMatches;
        exports.normalizeKey = normalizeKey;
        exports.denormalizeKey = denormalizeKey;
        exports.equalByValue = equalByValue;
        exports.getKeyHash = getKeyHash;
        exports.escapeRegExp = escapeRegExp;
        exports.applyServerDecimalSeparator = applyServerDecimalSeparator;
        exports.noop = noop;
        exports.grep = grep
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/events/core/events_engine.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _typeof = "function" === typeof Symbol && "symbol" === typeof Symbol.iterator ? function(obj) {
            return typeof obj
        } : function(obj) {
            return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
        };
        var registerEventCallbacks = __webpack_require__( /*! ./event_registrator_callbacks */ 119);
        var extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend;
        var domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13);
        var windowUtils = __webpack_require__( /*! ../../core/utils/window */ 6);
        var window = windowUtils.getWindow();
        var injector = __webpack_require__( /*! ../../core/utils/dependency_injector */ 56);
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var Callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 21);
        var isWindow = typeUtils.isWindow;
        var isFunction = typeUtils.isFunction;
        var isString = typeUtils.isString;
        var errors = __webpack_require__( /*! ../../core/errors */ 19);
        var WeakMap = __webpack_require__( /*! ../../core/polyfills/weak_map */ 180);
        var hookTouchProps = __webpack_require__( /*! ../../events/core/hook_touch_props */ 233);
        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", "focusout", "focus", "focusin", "load"];
        var passiveListenerEvents = {
            eventName: "dxpointermove",
            nativeEventName: "touchmove"
        };
        var matchesSafe = function(target, selector) {
            return !isWindow(target) && "#document" !== target.nodeName && domAdapter.elementMatches(target, selector)
        };
        var elementDataMap = new WeakMap;
        var guid = 0;
        var skipEvent;
        var special = function() {
            var specialData = {};
            registerEventCallbacks.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 applyForEach = function applyForEach(args, method) {
            var element = args[0];
            if (!element) {
                return
            }
            if (domAdapter.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 errors.Error("E0025")
                }
            }
        };
        var getHandler = function(method) {
            return function() {
                applyForEach(arguments, method)
            }
        };
        var getHandlersController = function(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 secondaryTargetIsInside, result, handlerArgs = [e],
                            target = e.currentTarget,
                            relatedTarget = e.relatedTarget;
                        if (eventName in NATIVE_EVENTS_TO_SUBSCRIBE) {
                            secondaryTargetIsInside = relatedTarget && target && (relatedTarget === target || target.contains(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 {
                            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 (eventName === passiveListenerEvents.nativeEventName) {
                            nativeListenerOptions = {
                                passive: false
                            }
                        }
                        eventData.removeListener = domAdapter.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)
                    }
                }
            }
        };
        var getNativeHandler = function(subscribeName) {
            return function(event, extraParameters) {
                var handlersController = getHandlersController(this, subscribeName);
                event = eventsEngine.Event(event);
                handlersController.callHandlers(event, extraParameters)
            }
        };
        var isSubset = function(original, checked) {
            for (var i = 0; i < checked.length; i++) {
                if (original.indexOf(checked[i]) < 0) {
                    return false
                }
            }
            return true
        };
        var normalizeOnArguments = function(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)
            }
        };
        var normalizeOffArguments = function(callback) {
            return function(element, eventName, selector, handler) {
                if ("function" === typeof selector) {
                    handler = selector;
                    selector = void 0
                }
                callback(element, eventName, selector, handler)
            }
        };
        var normalizeTriggerArguments = function(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)
            }
        };
        var normalizeEventArguments = function(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)
            }
        };
        var iterate = function(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" === ("undefined" === typeof eventName ? "undefined" : _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)
                }
            }
        };
        var callNativeMethod = function(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
            }
        };
        var calculateWhich = function(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
        };
        var eventsEngine = injector({
            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(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)
            }))
        });
        var initEvent = function(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;
            extend(that, src);
            if (src instanceof eventsEngine.Event || windowUtils.hasWindow() && src instanceof window.Event) {
                that.originalEvent = src;
                that.currentTarget = void 0
            }
            if (!(src instanceof eventsEngine.Event)) {
                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
            }
            extend(that, config);
            that.guid = ++guid
        }));
        var addProperty = function(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
                    })
                }
            })
        };
        hookTouchProps(addProperty);
        var beforeSetStrategy = Callbacks();
        var afterSetStrategy = Callbacks();
        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.passiveListenerEvents = passiveListenerEvents;
        eventsEngine.elementDataMap = elementDataMap;
        module.exports = eventsEngine
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/core/utils/window.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var domAdapter = __webpack_require__( /*! ../dom_adapter */ 13);
        var _hasWindow = "undefined" !== typeof window;
        var windowObject = _hasWindow && window;
        if (!windowObject) {
            windowObject = {};
            windowObject.window = windowObject
        }
        module.exports = {
            hasWindow: function() {
                return _hasWindow
            },
            getWindow: function() {
                return windowObject
            },
            hasProperty: function(prop) {
                return this.hasWindow() && prop in windowObject
            },
            defaultScreenFactorFunc: function(width) {
                if (width < 768) {
                    return "xs"
                } else {
                    if (width < 992) {
                        return "sm"
                    } else {
                        if (width < 1200) {
                            return "md"
                        } else {
                            return "lg"
                        }
                    }
                }
            },
            getCurrentScreenFactor: function(screenFactorCallback) {
                var screenFactorFunc = screenFactorCallback || this.defaultScreenFactorFunc;
                var windowWidth = domAdapter.getDocumentElement().clientWidth;
                return screenFactorFunc(windowWidth)
            },
            openWindow: function() {
                if (this.hasProperty("open")) {
                    return windowObject.open()
                }
                return null
            },
            getNavigator: function() {
                return this.hasWindow() ? windowObject.navigator : {
                    userAgent: ""
                }
            }
        }
    },
    /*!*****************************************************!*\
      !*** ./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 */ 21);
        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, 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),
                contexts = [],
                resolvedCount = 0,
                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/component_registrator.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ./renderer */ 2);
        var callbacks = __webpack_require__( /*! ./component_registrator_callbacks */ 147);
        var errors = __webpack_require__( /*! ./errors */ 19);
        var publicComponentUtils = __webpack_require__( /*! ./utils/public_component */ 107);
        var registerComponent = function(name, namespace, componentClass) {
            if (!componentClass) {
                componentClass = namespace
            } else {
                namespace[name] = componentClass
            }
            publicComponentUtils.name(componentClass, name);
            callbacks.fire(name, componentClass)
        };
        var registerRendererComponent = function(name, componentClass) {
            $.fn[name] = function(options) {
                var result, isMemberInvoke = "string" === typeof options;
                if (isMemberInvoke) {
                    var memberName = options,
                        memberArgs = [].slice.call(arguments).slice(1);
                    this.each(function() {
                        var instance = componentClass.getInstance(this);
                        if (!instance) {
                            throw errors.Error("E0009", name)
                        }
                        var member = instance[memberName],
                            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
            }
        };
        callbacks.add(registerRendererComponent);
        module.exports = registerComponent
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/events/utils.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2);
        var eventsEngine = __webpack_require__( /*! ./core/events_engine */ 5);
        var errors = __webpack_require__( /*! ../core/errors */ 19);
        var focused = __webpack_require__( /*! ../ui/widget/selectors */ 58).focused;
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend;
        var each = __webpack_require__( /*! ../core/utils/iterator */ 3).each;
        var eventSource = function() {
            var EVENT_SOURCES_REGEX = {
                dx: /^dx/i,
                mouse: /(mouse|wheel)/i,
                touch: /^touch/i,
                keyboard: /^key/i,
                pointer: /^(ms)?pointer/i
            };
            return function(e) {
                var result = "other";
                each(EVENT_SOURCES_REGEX, function(key) {
                    if (this.test(e.type)) {
                        result = key;
                        return false
                    }
                });
                return result
            }
        }();
        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 isPointerEvent = function(e) {
            return "pointer" === eventSource(e)
        };
        var isMouseEvent = function(e) {
            return isNativeMouseEvent(e) || (isPointerEvent(e) || isDxEvent(e)) && "mouse" === e.pointerType
        };
        var isTouchEvent = function(e) {
            return isNativeTouchEvent(e) || (isPointerEvent(e) || isDxEvent(e)) && "touch" === e.pointerType
        };
        var isKeyboardEvent = function(e) {
            return "keyboard" === eventSource(e)
        };
        var isFakeClickEvent = function(e) {
            return 0 === e.screenX && !e.offsetX && 0 === e.pageX
        };
        var eventData = function(e) {
            return {
                x: e.pageX,
                y: e.pageY,
                time: e.timeStamp
            }
        };
        var eventDelta = function(from, to) {
            return {
                x: to.x - from.x,
                y: to.y - from.y,
                time: to.time - from.time || 1
            }
        };
        var hasTouches = function(e) {
            if (isNativeTouchEvent(e)) {
                return (e.originalEvent.touches || []).length
            }
            if (isDxEvent(e)) {
                return (e.pointers || []).length
            }
            return 0
        };
        var needSkipEvent = function(e) {
            var $target = $(e.target);
            var touchInInput = $target.is("input, textarea, select");
            if ($target.is(".dx-skip-gesture-event *, .dx-skip-gesture-event")) {
                return true
            }
            if ("dxmousewheel" === e.type) {
                return $target.is("input[type='number'], textarea, select") && $target.is(":focus")
            }
            if (isMouseEvent(e)) {
                return touchInInput || e.which > 1
            }
            if (isTouchEvent(e)) {
                return touchInInput && focused($target)
            }
        };
        var fixMethod = function(e) {
            return e
        };
        var setEventFixMethod = function(func) {
            fixMethod = func
        };
        var copyEvent = function(originalEvent) {
            return fixMethod(eventsEngine.Event(originalEvent, originalEvent), originalEvent)
        };
        var createEvent = function(originalEvent, args) {
            var event = copyEvent(originalEvent);
            if (args) {
                extend(event, args)
            }
            return event
        };
        var fireEvent = function(props) {
            var event = createEvent(props.originalEvent, props);
            eventsEngine.trigger(props.delegateTarget || event.target, event);
            return event
        };
        var addNamespace = function addNamespace(eventNames, namespace) {
            if (!namespace) {
                throw errors.Error("E0017")
            }
            if ("string" === typeof eventNames) {
                if (eventNames.indexOf(" ") === -1) {
                    return eventNames + "." + namespace
                }
                return addNamespace(eventNames.split(/\s+/g), namespace)
            }
            each(eventNames, function(index, eventName) {
                eventNames[index] = eventName + "." + namespace
            });
            return eventNames.join(" ")
        };
        module.exports = {
            eventSource: eventSource,
            isPointerEvent: isPointerEvent,
            isMouseEvent: isMouseEvent,
            isTouchEvent: isTouchEvent,
            isKeyboardEvent: isKeyboardEvent,
            isFakeClickEvent: isFakeClickEvent,
            hasTouches: hasTouches,
            eventData: eventData,
            eventDelta: eventDelta,
            needSkipEvent: needSkipEvent,
            createEvent: createEvent,
            fireEvent: fireEvent,
            addNamespace: addNamespace,
            setEventFixMethod: setEventFixMethod
        }
    },
    /*!********************************************!*\
      !*** ./artifacts/transpiled/core/class.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var errors = __webpack_require__( /*! ./errors */ 19),
            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 overridden, memberName, member, that = this;
            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 argument, name, i, classObj = this;
            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) {
            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 i, instance = this,
                    ctor = instance.ctor,
                    includedCtors = instance.constructor._includedCtors,
                    includedPostCtors = instance.constructor._includedPostCtors;
                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/core/utils/array.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var isDefined = __webpack_require__( /*! ./type */ 1).isDefined,
            each = __webpack_require__( /*! ./iterator */ 3).each,
            objectUtils = __webpack_require__( /*! ./object */ 51),
            config = __webpack_require__( /*! ../config */ 25);
        var isEmpty = function(entity) {
            return Array.isArray(entity) && !entity.length
        };
        var wrapToArray = function(entity) {
            return Array.isArray(entity) ? entity : [entity]
        };
        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 = {},
                parameterIndex = 0,
                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 inArray = function(value, object) {
            if (!object) {
                return -1
            }
            var array = Array.isArray(object) ? object : object.toArray();
            return array.indexOf(value)
        };
        var merge = function(array1, array2) {
            for (var i = 0; i < array2.length; i++) {
                array1[array1.length] = array2[i]
            }
            return array1
        };
        exports.isEmpty = isEmpty;
        exports.wrapToArray = wrapToArray;
        exports.intersection = intersection;
        exports.removeDuplicates = removeDuplicates;
        exports.normalizeIndexes = normalizeIndexes;
        exports.inArray = inArray;
        exports.merge = merge
    },
    /*!************************************************!*\
      !*** ./artifacts/transpiled/core/utils/dom.js ***!
      \************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var elementStrategy, $ = __webpack_require__( /*! ../../core/renderer */ 2),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13),
            windowUtils = __webpack_require__( /*! ./window */ 6),
            window = windowUtils.getWindow(),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            errors = __webpack_require__( /*! ../errors */ 19),
            inArray = __webpack_require__( /*! ./array */ 11).inArray,
            typeUtils = __webpack_require__( /*! ./type */ 1),
            isDefined = typeUtils.isDefined,
            isRenderer = typeUtils.isRenderer,
            htmlParser = __webpack_require__( /*! ../../core/utils/html_parser */ 234);
        var resetActiveElement = function() {
            var activeElement = domAdapter.getActiveElement();
            if (activeElement && activeElement !== domAdapter.getBody() && activeElement.blur) {
                activeElement.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),
                $endTarget = $(endTarget);
            if ($startTarget[0] === $endTarget[0]) {
                return $startTarget[0]
            }
            var $startParents = $startTarget.parents(),
                $endParents = $endTarget.parents(),
                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 result, optionsString = $(element).attr(dataOptionsAttributeName) || "";
            if ("{" !== optionsString.trim().charAt(0)) {
                optionsString = "{" + optionsString + "}"
            }
            try {
                result = new Function("return " + optionsString)()
            } catch (ex) {
                throw errors.Error("E3018", ex, optionsString)
            }
            return result
        };
        var createComponents = function(elements, componentTypes) {
            var result = [],
                selector = "[" + dataOptionsAttributeName + "]";
            var $items = elements.find(selector).add(elements.filter(selector));
            $items.each(function(index, element) {
                var $element = $(element),
                    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 toggleAttr = function($target, attr, value) {
            value ? $target.attr(attr, value) : $target.removeAttr(attr)
        };
        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
            }
            element = domAdapter.isTextNode(element) ? element.parentNode : element;
            return domAdapter.isDocument(container) ? container.documentElement.contains(element) : container.contains(element)
        };
        var getPublicElement = function($element) {
            return elementStrategy($element)
        };
        var setPublicElementWrapper = function(value) {
            elementStrategy = value
        };
        setPublicElementWrapper(function(element) {
            return element && element.get(0)
        });
        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.toggleAttr = toggleAttr;
        exports.contains = contains;
        exports.getPublicElement = getPublicElement
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/core/dom_adapter.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _typeof = "function" === typeof Symbol && "symbol" === typeof Symbol.iterator ? function(obj) {
            return typeof obj
        } : function(obj) {
            return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
        };
        var injector = __webpack_require__( /*! ./utils/dependency_injector */ 56);
        var noop = __webpack_require__( /*! ./utils/common */ 4).noop;
        var nativeDOMAdapterStrategy = {
            querySelectorAll: function(element, selector) {
                return element.querySelectorAll(selector)
            },
            elementMatches: function(element, selector) {
                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
                        }
                    }
                }.bind(this);
                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" === ("undefined" === typeof element ? "undefined" : _typeof(element)) && "nodeType" in element
            },
            isElementNode: function(element) {
                return element && element.nodeType === Node.ELEMENT_NODE
            },
            isTextNode: function(element) {
                return element && element.nodeType === Node.TEXT_NODE
            },
            isDocument: function(element) {
                return element && element.nodeType === Node.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)
                    }
                }
            },
            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 classNames = element.className.split(" ");
                        var classIndex = classNames.indexOf(className);
                        if (isAdd && classIndex < 0) {
                            element.className = element.className ? element.className + " " + className : className
                        }
                        if (!isAdd && classIndex >= 0) {
                            classNames.splice(classIndex, 1);
                            element.className = classNames.join(" ")
                        }
                    }
                }
            },
            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 noop
                }
                element.addEventListener(event, callback, options);
                return function() {
                    element.removeEventListener(event, callback)
                }
            }
        };
        module.exports = injector(nativeDOMAdapterStrategy)
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/localization/message.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            dependencyInjector = __webpack_require__( /*! ../core/utils/dependency_injector */ 56),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            stringFormat = __webpack_require__( /*! ../core/utils/string */ 40).format,
            humanize = __webpack_require__( /*! ../core/utils/inflector */ 34).humanize,
            coreLocalization = __webpack_require__( /*! ./core */ 86);
        __webpack_require__( /*! ./core */ 86);
        var PARENT_LOCALE_SEPARATOR = "-";
        var baseDictionary = extend(true, {}, __webpack_require__( /*! ./default_messages */ 340));
        var parentLocales = __webpack_require__( /*! ./cldr-data/parentLocales */ 341);
        var getParentLocale = function(locale) {
            var parentLocale = parentLocales[locale];
            if (parentLocale) {
                return "root" !== parentLocale && parentLocale
            }
            return locale.substr(0, locale.lastIndexOf(PARENT_LOCALE_SEPARATOR))
        };
        var getDataByLocale = function(localeData, locale) {
            return localeData[locale] || {}
        };
        var getValueByClosestLocale = function(localeData, locale, key) {
            var isRootLocale, value = getDataByLocale(localeData, locale)[key];
            while (!value && !isRootLocale) {
                locale = getParentLocale(locale);
                if (locale) {
                    value = getDataByLocale(localeData, locale)[key]
                } else {
                    isRootLocale = true
                }
            }
            return value
        };
        var newMessages = {};
        var messageLocalization = dependencyInjector({
            _dictionary: baseDictionary,
            load: function(messages) {
                extend(true, this._dictionary, messages)
            },
            _localizablePrefix: "@",
            setup: function(localizablePrefix) {
                this._localizablePrefix = localizablePrefix
            },
            localizeString: function(text) {
                var that = this,
                    regex = new RegExp("(^|[^a-zA-Z_0-9" + that._localizablePrefix + "-]+)(" + that._localizablePrefix + "{1,2})([a-zA-Z_0-9-]+)", "g"),
                    escapeString = that._localizablePrefix + that._localizablePrefix;
                return text.replace(regex, function(str, prefix, escape, localizationKey) {
                    var result, defaultResult = that._localizablePrefix + localizationKey;
                    if (escape !== escapeString) {
                        result = that.format(localizationKey)
                    }
                    if (!result) {
                        newMessages[localizationKey] = humanize(localizationKey)
                    }
                    return prefix + (result || defaultResult)
                })
            },
            _messageLoaded: function(key, locale) {
                return void 0 !== getValueByClosestLocale(this._dictionary, locale || coreLocalization.locale(), key)
            },
            localizeNode: function(node) {
                var that = this;
                $(node).each(function(index, nodeItem) {
                    if (!nodeItem.nodeType) {
                        return
                    }
                    if (3 === nodeItem.nodeType) {
                        nodeItem.nodeValue = that.localizeString(nodeItem.nodeValue)
                    } else {
                        if (!$(nodeItem).is("iframe")) {
                            each(nodeItem.attributes || [], function(index, attr) {
                                if ("string" === typeof attr.value) {
                                    var localizedValue = that.localizeString(attr.value);
                                    if (attr.value !== localizedValue) {
                                        attr.value = localizedValue
                                    }
                                }
                            });
                            $(nodeItem).contents().each(function(index, node) {
                                that.localizeNode(node)
                            })
                        }
                    }
                })
            },
            getMessagesByLocales: function() {
                return this._dictionary
            },
            getDictionary: function(onlyNew) {
                if (onlyNew) {
                    return newMessages
                }
                return extend({}, newMessages, this.getMessagesByLocales()[coreLocalization.locale()])
            },
            getFormatter: function(key) {
                return this._getFormatterBase(key) || this._getFormatterBase(key, "en")
            },
            _getFormatterBase: function(key, locale) {
                var message = getValueByClosestLocale(this._dictionary, locale || coreLocalization.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 stringFormat.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/devices.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            windowUtils = __webpack_require__( /*! ./utils/window */ 6),
            navigator = windowUtils.getNavigator(),
            window = windowUtils.getWindow(),
            extend = __webpack_require__( /*! ./utils/extend */ 0).extend,
            isPlainObject = __webpack_require__( /*! ./utils/type */ 1).isPlainObject,
            each = __webpack_require__( /*! ./utils/iterator */ 3).each,
            Class = __webpack_require__( /*! ./class */ 10),
            errors = __webpack_require__( /*! ./errors */ 19),
            Callbacks = __webpack_require__( /*! ./utils/callbacks */ 21),
            resizeCallbacks = __webpack_require__( /*! ./utils/resize_callbacks */ 133),
            EventsMixin = __webpack_require__( /*! ./events_mixin */ 54),
            SessionStorage = __webpack_require__( /*! ./utils/storage */ 158).sessionStorage,
            viewPort = __webpack_require__( /*! ./utils/view_port */ 66),
            Config = __webpack_require__( /*! ./config */ 25);
        var KNOWN_UA_TABLE = {
            iPhone: "iPhone",
            iPhone5: "iPhone",
            iPhone6: "iPhone",
            iPhone6plus: "iPhone",
            iPad: "iPad",
            iPadMini: "iPad Mini",
            androidPhone: "Android Mobile",
            androidTablet: "Android",
            win8: "MSAppHost",
            win8Phone: "Windows Phone 8.0",
            msSurface: "Windows ARM Tablet PC",
            desktop: "desktop",
            win10Phone: "Windows Phone 10.0",
            win10: "MSAppHost/3.0"
        };
        var DEFAULT_DEVICE = {
            deviceType: "desktop",
            platform: "generic",
            version: [],
            phone: false,
            tablet: false,
            android: false,
            ios: false,
            win: false,
            generic: true,
            grade: "A",
            mac: false
        };
        var uaParsers = {
            win: function(userAgent) {
                var isPhone = /windows phone/i.test(userAgent) || userAgent.match(/WPDesktop/),
                    isTablet = !isPhone && /Windows(.*)arm(.*)Tablet PC/i.test(userAgent),
                    isDesktop = !isPhone && !isTablet && /msapphost/i.test(userAgent);
                if (!(isPhone || isTablet || isDesktop)) {
                    return
                }
                var matches = userAgent.match(/windows phone (\d+).(\d+)/i) || userAgent.match(/windows nt (\d+).(\d+)/i),
                    version = [];
                if (matches) {
                    version.push(parseInt(matches[1], 10), parseInt(matches[2], 10))
                } else {
                    matches = userAgent.match(/msapphost(\/(\d+).(\d+))?/i);
                    matches && version.push(3 === parseInt(matches[2], 10) ? 10 : 8)
                }
                return {
                    deviceType: isPhone ? "phone" : isTablet ? "tablet" : "desktop",
                    platform: "win",
                    version: version,
                    grade: "A"
                }
            },
            ios: function(userAgent) {
                if (!/ip(hone|od|ad)/i.test(userAgent)) {
                    return
                }
                var isPhone = /ip(hone|od)/i.test(userAgent),
                    matches = userAgent.match(/os (\d+)_(\d+)_?(\d+)?/i),
                    version = matches ? [parseInt(matches[1], 10), parseInt(matches[2], 10), parseInt(matches[3] || 0, 10)] : [],
                    isIPhone4 = 480 === window.screen.height,
                    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),
                    matches = userAgent.match(/android (\d+)\.(\d+)\.?(\d+)?/i),
                    version = matches ? [parseInt(matches[1], 10), parseInt(matches[2], 10), parseInt(matches[3] || 0, 10)] : [],
                    worseThan4_4 = version.length > 1 && (version[0] < 4 || 4 === version[0] && version[1] < 4),
                    grade = worseThan4_4 ? "B" : "A";
                return {
                    deviceType: isPhone ? "phone" : "tablet",
                    platform: "android",
                    version: version,
                    grade: grade
                }
            }
        };
        var Devices = Class.inherit({
            ctor: function(options) {
                this._window = options && options.window || window;
                this._realDevice = this._getDevice();
                this._currentDevice = void 0;
                this._currentOrientation = void 0;
                this.changed = Callbacks();
                if (windowUtils.hasWindow()) {
                    this._recalculateOrientation();
                    resizeCallbacks.add(this._recalculateOrientation.bind(this))
                }
            },
            current: 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
            },
            real: function() {
                var forceDevice = arguments[0];
                if (isPlainObject(forceDevice)) {
                    extend(this._realDevice, forceDevice);
                    return
                }
                return extend({}, this._realDevice)
            },
            orientation: function() {
                return this._currentOrientation
            },
            isForced: function() {
                return this._forced
            },
            isRippleEmulator: function() {
                return !!this._window.tinyHippos
            },
            _getCssClasses: function(device) {
                var result = [];
                var realDevice = this._realDevice;
                device = device || this.current();
                if (device.deviceType) {
                    result.push("dx-device-" + device.deviceType);
                    if ("desktop" !== device.deviceType) {
                        result.push("dx-device-mobile")
                    }
                }
                result.push("dx-device-" + realDevice.platform);
                if (realDevice.version && realDevice.version.length) {
                    result.push("dx-device-" + realDevice.platform + "-" + realDevice.version[0])
                }
                if (devices.isSimulator()) {
                    result.push("dx-simulator")
                }
                if (Config().rtlEnabled) {
                    result.push("dx-rtl")
                }
                return result
            },
            attachCssClasses: function(element, device) {
                this._deviceClasses = this._getCssClasses(device).join(" ");
                $(element).addClass(this._deviceClasses)
            },
            detachCssClasses: function(element) {
                $(element).removeClass(this._deviceClasses)
            },
            isSimulator: function() {
                try {
                    return this._isSimulator || windowUtils.hasWindow() && this._window.top !== this._window.self && this._window.top["dx-force-device"] || this.isRippleEmulator()
                } catch (e) {
                    return false
                }
            },
            forceSimulator: function() {
                this._isSimulator = true
            },
            _getDevice: function(deviceName) {
                if ("genericPhone" === deviceName) {
                    deviceName = {
                        deviceType: "phone",
                        platform: "generic",
                        generic: true
                    }
                }
                if (isPlainObject(deviceName)) {
                    return this._fromConfig(deviceName)
                } else {
                    var ua;
                    if (deviceName) {
                        ua = KNOWN_UA_TABLE[deviceName];
                        if (!ua) {
                            throw errors.Error("E0005")
                        }
                    } else {
                        ua = navigator.userAgent
                    }
                    return this._fromUA(ua)
                }
            },
            _getDeviceOrNameFromWindowScope: function() {
                var result;
                if (windowUtils.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
            },
            _getDeviceNameFromSessionStorage: function() {
                var sessionStorage = SessionStorage();
                if (!sessionStorage) {
                    return
                }
                var deviceOrName = sessionStorage.getItem("dx-force-device");
                try {
                    return JSON.parse(deviceOrName)
                } catch (ex) {
                    return deviceOrName
                }
            },
            _fromConfig: function(config) {
                var result = extend({}, DEFAULT_DEVICE, this._currentDevice, config),
                    shortcuts = {
                        phone: "phone" === result.deviceType,
                        tablet: "tablet" === result.deviceType,
                        android: "android" === result.platform,
                        ios: "ios" === result.platform,
                        win: "win" === result.platform,
                        generic: "generic" === result.platform
                    };
                return extend(result, shortcuts)
            },
            _fromUA: function(ua) {
                var config;
                each(uaParsers, function(platform, parser) {
                    config = parser(ua);
                    return !config
                });
                if (config) {
                    return this._fromConfig(config)
                }
                var isMac = /(mac os)/.test(ua.toLowerCase()),
                    deviceWithOS = DEFAULT_DEVICE;
                deviceWithOS.mac = isMac;
                return deviceWithOS
            },
            _changeOrientation: function() {
                var $window = $(this._window),
                    orientation = $window.height() > $window.width() ? "portrait" : "landscape";
                if (this._currentOrientation === orientation) {
                    return
                }
                this._currentOrientation = orientation;
                this.fireEvent("orientationChanged", [{
                    orientation: orientation
                }])
            },
            _recalculateOrientation: function() {
                var windowWidth = $(this._window).width();
                if (this._currentWidth === windowWidth) {
                    return
                }
                this._currentWidth = windowWidth;
                this._changeOrientation()
            }
        }).include(EventsMixin);
        var devices = new Devices;
        viewPort.changeCallback.add(function(viewPort, prevViewport) {
            devices.detachCssClasses(prevViewport);
            devices.attachCssClasses(viewPort)
        });
        if (!devices.isForced() && "win" === devices.current().platform) {
            devices.current({
                version: [10]
            })
        }
        module.exports = devices
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/events/click.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            devices = __webpack_require__( /*! ../core/devices */ 16),
            domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 13),
            domUtils = __webpack_require__( /*! ../core/utils/dom */ 12),
            animationFrame = __webpack_require__( /*! ../animation/frame */ 115),
            eventUtils = __webpack_require__( /*! ./utils */ 9),
            pointerEvents = __webpack_require__( /*! ./pointer */ 27),
            Emitter = __webpack_require__( /*! ./core/emitter */ 120),
            registerEmitter = __webpack_require__( /*! ./core/emitter_registrator */ 92),
            compareVersions = __webpack_require__( /*! ../core/utils/version */ 62).compare;
        var CLICK_EVENT_NAME = "dxclick",
            TOUCH_BOUNDARY = 10,
            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,
                    targetChanged = !domUtils.contains(element, target) && element !== target,
                    gestureDelta = eventUtils.eventDelta(eventUtils.eventData(e), this._startEventData),
                    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(),
                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,
                lastFiredEvent = null;
            var clickHandler = function(e) {
                var originalEvent = e.originalEvent,
                    eventAlreadyFired = lastFiredEvent !== originalEvent,
                    leftButton = !e.which || 1 === e.which;
                if (leftButton && !prevented && isNativeClickEvent(e.target) && eventAlreadyFired) {
                    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,
                    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",
                    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/ui/widget/ui.errors.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var errorUtils = __webpack_require__( /*! ../../core/utils/error */ 111),
            errors = __webpack_require__( /*! ../../core/errors */ 19);
        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}",
            E1036: "Validation rules are not defined for any form item",
            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: 'Deferred selection cannot be performed. Set the "key" field for the data store',
            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: 'The "{0}" converter is not found in the ConverterController',
            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 '{0}' error",
            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"
        })
    },
    /*!*********************************************!*\
      !*** ./artifacts/transpiled/core/errors.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var errorUtils = __webpack_require__( /*! ./utils/error */ 111);
        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",
            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/ui/themes.js ***!
      \*******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 13),
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6),
            window = windowUtils.getWindow(),
            Deferred = __webpack_require__( /*! ../core/utils/deferred */ 7).Deferred,
            errors = __webpack_require__( /*! ./widget/ui.errors */ 18),
            domUtils = __webpack_require__( /*! ../core/utils/dom */ 12),
            readyCallbacks = __webpack_require__( /*! ../core/utils/ready_callbacks */ 52),
            ready = readyCallbacks.add,
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            devices = __webpack_require__( /*! ../core/devices */ 16),
            viewPortUtils = __webpack_require__( /*! ../core/utils/view_port */ 66),
            themeReadyCallback = __webpack_require__( /*! ./themes_callback */ 250),
            viewPort = viewPortUtils.value,
            viewPortChanged = viewPortUtils.changeCallback;
        var DX_LINK_SELECTOR = "link[rel=dx-theme]",
            THEME_ATTR = "data-theme",
            ACTIVE_ATTR = "data-active",
            DX_HAIRLINES_CLASS = "dx-hairlines";
        var context, $activeThemeLink, knownThemes, currentThemeName, pendingThemeName;
        var timerId;
        var THEME_MARKER_PREFIX = "dx.";

        function readThemeMarker() {
            if (!windowUtils.hasWindow()) {
                return null
            }
            var result, element = $("<div>", context).addClass("dx-theme-marker").appendTo(context.documentElement);
            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(),
                        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),
                    fullThemeName = link.attr(THEME_ATTR),
                    url = link.attr("href"),
                    isActive = "true" === link.attr(ACTIVE_ATTR);
                knownThemes[fullThemeName] = {
                    url: url,
                    isActive: isActive
                }
            });
            $allThemeLinks.last().after($activeThemeLink);
            $allThemeLinks.remove()
        }

        function resolveFullThemeName(desiredThemeName) {
            var desiredThemeParts = desiredThemeName.split("."),
                result = null;
            if (knownThemes) {
                if (desiredThemeName in knownThemes) {
                    return desiredThemeName
                }
                each(knownThemes, function(knownThemeName, themeData) {
                    var knownThemeParts = knownThemeName.split(".");
                    if (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 currentThemeData, isAutoInit = options._autoInit,
                loadCallback = options.loadCallback;
            currentThemeName = options.theme || currentThemeName;
            if (isAutoInit && !currentThemeName) {
                currentThemeName = themeNameFromDevice(devices.current())
            }
            currentThemeName = resolveFullThemeName(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 themeNameFromDevice(device) {
            var themeName = device.platform;
            var majorVersion = device.version && device.version[0];
            switch (themeName) {
                case "ios":
                    themeName += "7";
                    break;
                case "android":
                    themeName += "5";
                    break;
                case "win":
                    themeName += majorVersion && 8 === majorVersion ? "8" : "10"
            }
            return themeName
        }

        function getCssClasses(themeName) {
            themeName = themeName || current();
            var result = [],
                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 isAndroid5(themeName) {
            return isTheme("android5", themeName)
        }

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

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

        function isWin8(themeName) {
            return isTheme("win8", themeName)
        }

        function isWin10(themeName) {
            return isTheme("win10", themeName)
        }

        function checkThemeDeprecation() {
            if (isWin8()) {
                errors.log("W0010", "The 'win8' theme", "16.1", "Use the 'generic' theme instead.")
            }
            if (isWin10()) {
                errors.log("W0010", "The 'win10' theme", "17.2", "Use the 'generic' theme instead.")
            }
            if (isAndroid5()) {
                errors.log("W0010", "The 'android5' theme", "18.1", "Use the 'material' theme instead.")
            }
        }
        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.themeNameFromDevice = themeNameFromDevice;
        exports.waitForThemeLoad = waitForThemeLoad;
        exports.isMaterial = isMaterial;
        exports.isAndroid5 = isAndroid5;
        exports.isIos7 = isIos7;
        exports.isGeneric = isGeneric;
        exports.isWin8 = isWin8;
        exports.isWin10 = isWin10;
        exports.resetTheme = function() {
            $activeThemeLink && $activeThemeLink.attr("href", "about:blank");
            currentThemeName = null;
            pendingThemeName = null
        }
    },
    /*!******************************************************!*\
      !*** ./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,
                list = this._list,
                stopOnFalse = this._options.stopOnFalse,
                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,
                firingIndexes = this._firingIndexes,
                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/core/utils/date.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var typeUtils = __webpack_require__( /*! ./type */ 1),
            adjust = __webpack_require__( /*! ./math */ 30).adjust,
            each = __webpack_require__( /*! ./iterator */ 3).each,
            camelize = __webpack_require__( /*! ./inflector */ 34).camelize,
            isObject = typeUtils.isObject,
            isString = typeUtils.isString,
            isDate = typeUtils.isDate,
            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(),
                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, dateUnitCount, dateUnitInterval, dateUnitIntervals = ["millisecond", "second", "minute", "hour", "day", "month", "year"],
                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
        };
        var convertDateUnitToMilliseconds = function(dateUnit, count) {
            return toMilliseconds(dateUnit) * count
        };
        var getDateUnitInterval = function(tickInterval) {
            var i, maxInterval = -1;
            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)
        };
        var correctDateWithUnitBeginning = function(date, dateInterval, withCorrection, firstDayOfWeek) {
            date = new Date(date.getTime());
            var firstQuarterMonth, month, oldDate = new Date(date.getTime()),
                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
        };
        var trimTime = function(date) {
            return dateUtils.correctDateWithUnitBeginning(date, "day")
        };
        var getDatesDifferences = function(date1, date2) {
            var differences, counter = 0;
            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()),
                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 cur, intervals = [];
            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
        };
        var getLastMonthDay = function(date) {
            var resultDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);
            return resultDate.getDate()
        };
        var sameView = function(view, date1, date2) {
            return dateUtils[camelize("same " + view)](date1, date2)
        };
        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
        };
        var getDateIntervalByString = function(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
        };
        var sameDate = function(date1, date2) {
            return sameMonthAndYear(date1, date2) && date1.getDate() === date2.getDate()
        };
        var sameMonthAndYear = function(date1, date2) {
            return sameYear(date1, date2) && date1.getMonth() === date2.getMonth()
        };
        var sameYear = function(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,
                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,
                startCenturyDate2 = date2.getFullYear() - date2.getFullYear() % 100;
            return date1 && date2 && startCenturyDate1 === startCenturyDate2
        };
        var getFirstDecadeInCentury = function(date) {
            return date && date.getFullYear() - date.getFullYear() % 100
        };
        var getFirstYearInDecade = function(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
        };
        var getFirstWeekDate = function(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"),
                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),
                minutes = number % 1 * 60;
            return {
                hours: hours,
                minutes: minutes
            }
        };
        var normalizeDate = function(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
        };
        var fixTimezoneGap = function(oldDate, newDate) {
            if (!isDefined(oldDate)) {
                return
            }
            var sign, trial, diff = newDate.getHours() - oldDate.getHours();
            if (0 === diff) {
                return
            }
            sign = 1 === diff || diff === -23 ? -1 : 1;
            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
        };
        var getTimezonesDifference = function(min, max) {
            return 60 * (max.getTimezoneOffset() - min.getTimezoneOffset()) * 1e3
        };
        var makeDate = function(date) {
            return new Date(date)
        };
        var getDatesOfInterval = function(startDate, endDate, step) {
            var currentDate = new Date(startDate.getTime()),
                result = [];
            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,
            dateTimeFromDecimal: dateTimeFromDecimal,
            addDateInterval: addDateInterval,
            addInterval: addInterval,
            getSequenceByInterval: getSequenceByInterval,
            getDateIntervalByString: getDateIntervalByString,
            sameDate: sameDate,
            sameMonthAndYear: sameMonthAndYear,
            sameMonth: sameMonthAndYear,
            sameYear: sameYear,
            sameDecade: sameDecade,
            sameCentury: sameCentury,
            sameView: sameView,
            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
        };
        module.exports = dateUtils
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/core/utils/data.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var errors = __webpack_require__( /*! ../errors */ 19),
            Class = __webpack_require__( /*! ../class */ 10),
            objectUtils = __webpack_require__( /*! ./object */ 51),
            typeUtils = __webpack_require__( /*! ./type */ 1),
            each = __webpack_require__( /*! ./iterator */ 3).each,
            variableWrapper = __webpack_require__( /*! ./variable_wrapper */ 74),
            unwrapVariable = variableWrapper.unwrap,
            isWrapped = variableWrapper.isWrapped,
            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
        };
        var unwrap = function(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,
                        hasDefaultValue = "defaultValue" in options,
                        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
            }
        };
        var combineGetters = function(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 current, path, last, i, value = this(obj, options);
                    if (void 0 === value) {
                        return
                    }
                    current = result || (result = {});
                    path = name.split(".");
                    last = path.length - 1;
                    for (i = 0; i < last; i++) {
                        current = current[path[i]] = {}
                    }
                    current[path[i]] = 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),
                        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/animation/translator.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var dataUtils = __webpack_require__( /*! ../core/element_data */ 37),
            type = __webpack_require__( /*! ../core/utils/type */ 1).type;
        var TRANSLATOR_DATA_KEY = "dxTranslator",
            TRANSFORM_MATRIX_REGEX = /matrix(3d)?\((.+?)\)/,
            TRANSLATE_REGEX = /translate(?:3d)?\((.+?)\)/;
        var locate = function($element) {
            var translate = getTranslate($element);
            return {
                left: translate.x,
                top: translate.y
            }
        };
        var move = function($element, position) {
            var translate, left = position.left,
                top = position.top;
            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 isPercentValue = function(value) {
            return "string" === type(value) && "%" === value[value.length - 1]
        };
        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
                    }),
                    matrix = transformValue.match(TRANSFORM_MATRIX_REGEX),
                    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 cacheTranslate = function($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 resetPosition = function($element, finishTransition) {
            var originalTransition, 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
        };
        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 + ")"
        };
        exports.move = move;
        exports.locate = locate;
        exports.clearCache = clearCache;
        exports.parseTranslate = parseTranslate;
        exports.getTranslate = getTranslate;
        exports.getTranslateCss = getTranslateCss;
        exports.resetPosition = resetPosition
    },
    /*!*********************************************!*\
      !*** ./artifacts/transpiled/core/config.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var extendUtils = __webpack_require__( /*! ./utils/extend */ 0);
        var config = {
            rtlEnabled: false,
            defaultCurrency: "USD",
            designMode: false,
            serverDecimalSeparator: ".",
            decimalSeparator: ".",
            thousandsSeparator: ",",
            forceIsoDateParsing: true,
            wrapActionsBeforeExecute: true,
            useLegacyStoreResult: false,
            useJQuery: void 0,
            editorStylingMode: void 0,
            useLegacyVisibleIndex: false
        };
        var configMethod = function() {
            if (!arguments.length) {
                return config
            }
            extendUtils.extend(config, arguments[0])
        };
        if ("undefined" !== typeof DevExpress && DevExpress.config) {
            configMethod(DevExpress.config)
        }
        module.exports = configMethod
    }, ,
    /*!************************************************!*\
      !*** ./artifacts/transpiled/events/pointer.js ***!
      \************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var support = __webpack_require__( /*! ../core/utils/support */ 44),
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            devices = __webpack_require__( /*! ../core/devices */ 16),
            registerEvent = __webpack_require__( /*! ./core/event_registrator */ 67),
            TouchStrategy = __webpack_require__( /*! ./pointer/touch */ 245),
            MsPointerStrategy = __webpack_require__( /*! ./pointer/mspointer */ 337),
            MouseStrategy = __webpack_require__( /*! ./pointer/mouse */ 247),
            MouseAndTouchStrategy = __webpack_require__( /*! ./pointer/mouse_and_touch */ 338);
        var EventStrategy = function() {
            if (support.pointerEvents) {
                return MsPointerStrategy
            }
            var device = devices.real();
            if (support.touch && !(device.tablet || device.phone)) {
                return MouseAndTouchStrategy
            }
            if (support.touch) {
                return TouchStrategy
            }
            return MouseStrategy
        }();
        each(EventStrategy.map, function(pointerEvent, originalEvents) {
            registerEvent(pointerEvent, new EventStrategy(pointerEvent, originalEvents))
        });
        module.exports = {
            down: "dxpointerdown",
            up: "dxpointerup",
            move: "dxpointermove",
            cancel: "dxpointercancel",
            enter: "dxpointerenter",
            leave: "dxpointerleave",
            over: "dxpointerover",
            out: "dxpointerout"
        }
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/ui/widget/ui.widget.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            errors = __webpack_require__( /*! ./ui.errors */ 18),
            Action = __webpack_require__( /*! ../../core/action */ 81),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            inArray = __webpack_require__( /*! ../../core/utils/array */ 11).inArray,
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            domUtils = __webpack_require__( /*! ../../core/utils/dom */ 12),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13),
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            DOMComponent = __webpack_require__( /*! ../../core/dom_component */ 59),
            Template = __webpack_require__( /*! ./jquery.template */ 269),
            TemplateBase = __webpack_require__( /*! ./ui.template_base */ 71),
            FunctionTemplate = __webpack_require__( /*! ./function_template */ 99),
            EmptyTemplate = __webpack_require__( /*! ./empty_template */ 93),
            ChildDefaultTemplate = __webpack_require__( /*! ./child_default_template */ 102),
            KeyboardProcessor = __webpack_require__( /*! ./ui.keyboard_processor */ 168),
            selectors = __webpack_require__( /*! ./selectors */ 58),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            hoverEvents = __webpack_require__( /*! ../../events/hover */ 172),
            feedbackEvents = __webpack_require__( /*! ../../events/core/emitter.feedback */ 103),
            clickEvent = __webpack_require__( /*! ../../events/click */ 17),
            inflector = __webpack_require__( /*! ../../core/utils/inflector */ 34);
        var UI_FEEDBACK = "UIFeedback",
            WIDGET_CLASS = "dx-widget",
            ACTIVE_STATE_CLASS = "dx-state-active",
            DISABLED_STATE_CLASS = "dx-state-disabled",
            INVISIBLE_STATE_CLASS = "dx-state-invisible",
            HOVER_STATE_CLASS = "dx-state-hover",
            FOCUSED_STATE_CLASS = "dx-state-focused",
            FEEDBACK_SHOW_TIMEOUT = 30,
            FEEDBACK_HIDE_TIMEOUT = 400,
            FOCUS_NAMESPACE = "Focus",
            ANONYMOUS_TEMPLATE_NAME = "template",
            TEXT_NODE = 3,
            TEMPLATE_SELECTOR = "[data-options*='dxTemplate']",
            TEMPLATE_WRAPPER_CLASS = "dx-template-wrapper";
        var DX_POLYMORPH_WIDGET_TEMPLATE = new FunctionTemplate(function(options) {
            var widgetName = options.model.widget;
            if (widgetName) {
                var widgetElement = $("<div>"),
                    widgetOptions = options.model.options || {};
                if ("button" === widgetName || "tabs" === widgetName || "dropDownMenu" === widgetName) {
                    var deprecatedName = widgetName;
                    widgetName = inflector.camelize("dx-" + widgetName);
                    errors.log("W0001", "dxToolbar - 'widget' item field", deprecatedName, "16.1", "Use: '" + widgetName + "' instead")
                }
                widgetElement[widgetName](widgetOptions);
                return widgetElement
            }
            return $()
        });
        var Widget = DOMComponent.inherit({
            _supportedKeys: function() {
                return {}
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    disabled: false,
                    visible: true,
                    hint: void 0,
                    activeStateEnabled: false,
                    onContentReady: null,
                    hoverStateEnabled: false,
                    focusStateEnabled: false,
                    tabIndex: 0,
                    accessKey: null,
                    onFocusIn: null,
                    onFocusOut: null,
                    integrationOptions: {
                        watchMethod: function(fn, callback, options) {
                            options = options || {};
                            if (!options.skipImmediate) {
                                callback(fn())
                            }
                            return commonUtils.noop
                        },
                        templates: {
                            "dx-polymorph-widget": DX_POLYMORPH_WIDGET_TEMPLATE
                        },
                        createTemplate: function(element) {
                            return new Template(element)
                        }
                    },
                    _keyboardProcessor: void 0
                })
            },
            _feedbackShowTimeout: FEEDBACK_SHOW_TIMEOUT,
            _feedbackHideTimeout: FEEDBACK_HIDE_TIMEOUT,
            _init: function() {
                this.callBase();
                this._tempTemplates = [];
                this._defaultTemplates = {};
                this._initTemplates();
                this._initContentReadyAction()
            },
            _initTemplates: function() {
                this._extractTemplates();
                this._extractAnonymousTemplate()
            },
            _extractTemplates: function() {
                var templates = this.option("integrationOptions.templates"),
                    templateElements = this.$element().contents().filter(TEMPLATE_SELECTOR);
                var templatesMap = {};
                templateElements.each(function(_, template) {
                    var templateOptions = domUtils.getElementOptions(template).dxTemplate;
                    if (!templateOptions) {
                        return
                    }
                    if (!templateOptions.name) {
                        throw errors.Error("E0023")
                    }
                    $(template).addClass(TEMPLATE_WRAPPER_CLASS).detach();
                    templatesMap[templateOptions.name] = templatesMap[templateOptions.name] || [];
                    templatesMap[templateOptions.name].push(template)
                });
                each(templatesMap, function(templateName, value) {
                    var deviceTemplate = this._findTemplateByDevice(value);
                    if (deviceTemplate) {
                        templates[templateName] = this._createTemplate(deviceTemplate)
                    }
                }.bind(this))
            },
            _findTemplateByDevice: function(templates) {
                var suitableTemplate = commonUtils.findBestMatches(devices.current(), templates, function(template) {
                    return domUtils.getElementOptions(template).dxTemplate
                })[0];
                each(templates, function(index, template) {
                    if (template !== suitableTemplate) {
                        $(template).remove()
                    }
                });
                return suitableTemplate
            },
            _extractAnonymousTemplate: function() {
                var templates = this.option("integrationOptions.templates"),
                    anonymousTemplateName = this._getAnonymousTemplateName(),
                    $anonymousTemplate = this.$element().contents().detach();
                var $notJunkTemplateContent = $anonymousTemplate.filter(function(_, element) {
                        var isTextNode = element.nodeType === TEXT_NODE,
                            isEmptyText = $(element).text().trim().length < 1;
                        return !(isTextNode && isEmptyText)
                    }),
                    onlyJunkTemplateContent = $notJunkTemplateContent.length < 1;
                if (!templates[anonymousTemplateName] && !onlyJunkTemplateContent) {
                    templates[anonymousTemplateName] = this._createTemplate($anonymousTemplate)
                }
            },
            _getAriaTarget: function() {
                return this._focusTarget()
            },
            _getAnonymousTemplateName: function() {
                return ANONYMOUS_TEMPLATE_NAME
            },
            _getTemplateByOption: function(optionName) {
                return this._getTemplate(this.option(optionName))
            },
            _getTemplate: function(templateSource) {
                if (typeUtils.isFunction(templateSource)) {
                    return new FunctionTemplate(function(options) {
                        var templateSourceResult = templateSource.apply(this, this._getNormalizedTemplateArgs(options));
                        if (!typeUtils.isDefined(templateSourceResult)) {
                            return new EmptyTemplate
                        }
                        var dispose = false;
                        var template = this._acquireTemplate(templateSourceResult, function(templateSource) {
                            if (templateSource.nodeType || typeUtils.isRenderer(templateSource) && !$(templateSource).is("script")) {
                                return new FunctionTemplate(function() {
                                    return templateSource
                                })
                            }
                            dispose = true;
                            return this._createTemplate(templateSource)
                        }.bind(this));
                        var result = template.render(options);
                        dispose && template.dispose && template.dispose();
                        return result
                    }.bind(this))
                }
                return this._acquireTemplate(templateSource, this._createTemplateIfNeeded.bind(this))
            },
            _acquireTemplate: function(templateSource, createTemplate) {
                if (null == templateSource) {
                    return new EmptyTemplate
                }
                if (templateSource instanceof ChildDefaultTemplate) {
                    return this._defaultTemplates[templateSource.name]
                }
                if (templateSource instanceof TemplateBase) {
                    return templateSource
                }
                if (typeUtils.isFunction(templateSource.render) && !typeUtils.isRenderer(templateSource)) {
                    return this._addOneRenderedCall(templateSource)
                }
                if (templateSource.nodeType || typeUtils.isRenderer(templateSource)) {
                    return createTemplate($(templateSource))
                }
                if ("string" === typeof templateSource) {
                    return this._renderIntegrationTemplate(templateSource) || this._defaultTemplates[templateSource] || createTemplate(templateSource)
                }
                return this._acquireTemplate(templateSource.toString(), createTemplate)
            },
            _addOneRenderedCall: function(template) {
                var _render = template.render.bind(template);
                return extend({}, template, {
                    render: function(options) {
                        var templateResult = _render(options);
                        options && options.onRendered && options.onRendered();
                        return templateResult
                    }
                })
            },
            _renderIntegrationTemplate: function(templateSource) {
                var integrationTemplate = this.option("integrationOptions.templates")[templateSource];
                if (integrationTemplate && !(integrationTemplate instanceof TemplateBase)) {
                    var isAsyncTemplate = this.option("templatesRenderAsynchronously");
                    if (!isAsyncTemplate) {
                        return this._addOneRenderedCall(integrationTemplate)
                    }
                }
                return integrationTemplate
            },
            _createTemplateIfNeeded: function(templateSource) {
                var templateKey = function(templateSource) {
                    return typeUtils.isRenderer(templateSource) && templateSource[0] || templateSource
                };
                var cachedTemplate = this._tempTemplates.filter(function(t) {
                    templateSource = templateKey(templateSource);
                    return t.source === templateSource
                })[0];
                if (cachedTemplate) {
                    return cachedTemplate.template
                }
                var template = this._createTemplate(templateSource);
                this._tempTemplates.push({
                    template: template,
                    source: templateKey(templateSource)
                });
                return template
            },
            _createTemplate: function(templateSource) {
                templateSource = "string" === typeof templateSource ? domUtils.normalizeTemplateElement(templateSource) : templateSource;
                return this.option("integrationOptions.createTemplate")(templateSource)
            },
            _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
            },
            _cleanTemplates: function() {
                this._tempTemplates.forEach(function(t) {
                    t.template.dispose && t.template.dispose()
                });
                this._tempTemplates = []
            },
            _initContentReadyAction: function() {
                this._contentReadyAction = this._createActionByOption("onContentReady", {
                    excludeValidators: ["designMode", "disabled", "readOnly"]
                })
            },
            _initMarkup: function() {
                this.$element().addClass(WIDGET_CLASS);
                this._toggleDisabledState(this.option("disabled"));
                this._toggleVisibility(this.option("visible"));
                this._renderHint();
                if (this._isFocusable()) {
                    this._renderFocusTarget()
                }
                this.callBase()
            },
            _render: function() {
                this.callBase();
                this._renderContent();
                this._renderFocusState();
                this._attachFeedbackEvents();
                this._attachHoverEvents()
            },
            _renderHint: function() {
                domUtils.toggleAttr(this.$element(), "title", this.option("hint"))
            },
            _renderContent: function() {
                var that = this;
                commonUtils.deferRender(function() {
                    that._renderContentImpl()
                });
                that._fireContentReadyAction()
            },
            _renderContentImpl: commonUtils.noop,
            _fireContentReadyAction: commonUtils.deferRenderer(function() {
                this._contentReadyAction()
            }),
            _dispose: function() {
                this._cleanTemplates();
                this._contentReadyAction = null;
                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(INVISIBLE_STATE_CLASS, !visible);
                this.setAria("hidden", !visible || void 0)
            },
            _renderFocusState: function() {
                this._attachKeyboardEvents();
                if (!this._isFocusable()) {
                    return
                }
                this._renderFocusTarget();
                this._attachFocusEvents();
                this._renderAccessKey()
            },
            _renderAccessKey: function() {
                var focusTarget = this._focusTarget();
                focusTarget.attr("accesskey", this.option("accessKey"));
                var clickNamespace = eventUtils.addNamespace(clickEvent.name, UI_FEEDBACK);
                eventsEngine.off(focusTarget, clickNamespace);
                this.option("accessKey") && eventsEngine.on(focusTarget, clickNamespace, function(e) {
                    if (eventUtils.isFakeClickEvent(e)) {
                        e.stopImmediatePropagation();
                        this.focus()
                    }
                }.bind(this))
            },
            _isFocusable: function() {
                return this.option("focusStateEnabled") && !this.option("disabled")
            },
            _eventBindingTarget: function() {
                return this.$element()
            },
            _focusTarget: function() {
                return this._getActiveElement()
            },
            _getActiveElement: function() {
                var activeElement = this._eventBindingTarget();
                if (this._activeStateUnit) {
                    activeElement = activeElement.find(this._activeStateUnit).not("." + DISABLED_STATE_CLASS)
                }
                return activeElement
            },
            _renderFocusTarget: function() {
                this._focusTarget().attr("tabIndex", this.option("tabIndex"))
            },
            _keyboardEventBindingTarget: function() {
                return this._eventBindingTarget()
            },
            _detachFocusEvents: function() {
                var $element = this._focusTarget(),
                    namespace = this.NAME + FOCUS_NAMESPACE,
                    focusEvents = eventUtils.addNamespace("focusin", namespace);
                focusEvents = focusEvents + " " + eventUtils.addNamespace("focusout", namespace);
                if (domAdapter.hasDocumentProperty("onbeforeactivate")) {
                    focusEvents = focusEvents + " " + eventUtils.addNamespace("beforeactivate", namespace)
                }
                eventsEngine.off($element, focusEvents)
            },
            _attachFocusEvents: function() {
                var namespace = this.NAME + FOCUS_NAMESPACE,
                    focusInEvent = eventUtils.addNamespace("focusin", namespace),
                    focusOutEvent = eventUtils.addNamespace("focusout", namespace);
                var $focusTarget = this._focusTarget();
                eventsEngine.on($focusTarget, focusInEvent, this._focusInHandler.bind(this));
                eventsEngine.on($focusTarget, focusOutEvent, this._focusOutHandler.bind(this));
                if (domAdapter.hasDocumentProperty("onbeforeactivate")) {
                    var beforeActivateEvent = eventUtils.addNamespace("beforeactivate", namespace);
                    eventsEngine.on(this._focusTarget(), beforeActivateEvent, function(e) {
                        if (!$(e.target).is(selectors.focusable)) {
                            e.preventDefault()
                        }
                    })
                }
            },
            _refreshFocusEvent: function() {
                this._detachFocusEvents();
                this._attachFocusEvents()
            },
            _focusInHandler: function(e) {
                var that = this;
                that._createActionByOption("onFocusIn", {
                    beforeExecute: function() {
                        that._updateFocusState(e, true)
                    },
                    excludeValidators: ["readOnly"]
                })({
                    event: e
                })
            },
            _focusOutHandler: function(e) {
                var that = this;
                that._createActionByOption("onFocusOut", {
                    beforeExecute: function() {
                        that._updateFocusState(e, false)
                    },
                    excludeValidators: ["readOnly", "disabled"]
                })({
                    event: e
                })
            },
            _updateFocusState: function(e, isFocused) {
                var target = e.target;
                if (inArray(target, this._focusTarget()) !== -1) {
                    this._toggleFocusClass(isFocused, $(target))
                }
            },
            _toggleFocusClass: function(isFocused, $element) {
                var $focusTarget = $element && $element.length ? $element : this._focusTarget();
                $focusTarget.toggleClass(FOCUSED_STATE_CLASS, isFocused)
            },
            _hasFocusClass: function(element) {
                var $focusTarget = $(element || this._focusTarget());
                return $focusTarget.hasClass(FOCUSED_STATE_CLASS)
            },
            _attachKeyboardEvents: function() {
                var processor = this.option("_keyboardProcessor");
                if (processor) {
                    this._keyboardProcessor = processor.reinitialize(this._keyboardHandler, this)
                } else {
                    if (this.option("focusStateEnabled")) {
                        this._keyboardProcessor = new KeyboardProcessor({
                            element: this._keyboardEventBindingTarget(),
                            handler: this._keyboardHandler,
                            focusTarget: this._focusTarget(),
                            context: this
                        })
                    }
                }
            },
            _keyboardHandler: function(options) {
                var e = options.originalEvent,
                    key = options.key;
                var keys = this._supportedKeys(e),
                    func = keys[key];
                if (void 0 !== func) {
                    var handler = func.bind(this);
                    return handler(e) || false
                } else {
                    return true
                }
            },
            _refreshFocusState: function() {
                this._cleanFocusState();
                this._renderFocusState()
            },
            _cleanFocusState: function() {
                var $element = this._focusTarget();
                this._detachFocusEvents();
                this._toggleFocusClass(false);
                $element.removeAttr("tabIndex");
                if (this._keyboardProcessor) {
                    this._keyboardProcessor.dispose();
                    delete this._keyboardProcessor
                }
            },
            _attachHoverEvents: function() {
                var that = this,
                    hoverableSelector = that._activeStateUnit,
                    nameStart = eventUtils.addNamespace(hoverEvents.start, UI_FEEDBACK),
                    nameEnd = eventUtils.addNamespace(hoverEvents.end, UI_FEEDBACK);
                eventsEngine.off(that._eventBindingTarget(), nameStart, hoverableSelector);
                eventsEngine.off(that._eventBindingTarget(), nameEnd, hoverableSelector);
                if (that.option("hoverStateEnabled")) {
                    var startAction = new Action(function(args) {
                        that._hoverStartHandler(args.event);
                        that._refreshHoveredElement($(args.element))
                    }, {
                        excludeValidators: ["readOnly"]
                    });
                    var $eventBindingTarget = that._eventBindingTarget();
                    eventsEngine.on($eventBindingTarget, nameStart, hoverableSelector, function(e) {
                        startAction.execute({
                            element: $(e.target),
                            event: e
                        })
                    });
                    eventsEngine.on($eventBindingTarget, nameEnd, hoverableSelector, function(e) {
                        that._hoverEndHandler(e);
                        that._forgetHoveredElement()
                    })
                } else {
                    that._toggleHoverClass(false)
                }
            },
            _hoverStartHandler: commonUtils.noop,
            _hoverEndHandler: commonUtils.noop,
            _attachFeedbackEvents: function() {
                var feedbackAction, feedbackActionDisabled, that = this,
                    feedbackSelector = that._activeStateUnit,
                    activeEventName = eventUtils.addNamespace(feedbackEvents.active, UI_FEEDBACK),
                    inactiveEventName = eventUtils.addNamespace(feedbackEvents.inactive, UI_FEEDBACK);
                eventsEngine.off(that._eventBindingTarget(), activeEventName, feedbackSelector);
                eventsEngine.off(that._eventBindingTarget(), inactiveEventName, feedbackSelector);
                if (that.option("activeStateEnabled")) {
                    var feedbackActionHandler = function(args) {
                        var $element = $(args.element),
                            value = args.value,
                            dxEvent = args.event;
                        that._toggleActiveState($element, value, dxEvent)
                    };
                    eventsEngine.on(that._eventBindingTarget(), activeEventName, feedbackSelector, {
                        timeout: that._feedbackShowTimeout
                    }, function(e) {
                        feedbackAction = feedbackAction || new Action(feedbackActionHandler);
                        feedbackAction.execute({
                            element: $(e.currentTarget),
                            value: true,
                            event: e
                        })
                    });
                    eventsEngine.on(that._eventBindingTarget(), inactiveEventName, feedbackSelector, {
                        timeout: that._feedbackHideTimeout
                    }, function(e) {
                        feedbackActionDisabled = feedbackActionDisabled || new Action(feedbackActionHandler, {
                            excludeValidators: ["disabled", "readOnly"]
                        });
                        feedbackActionDisabled.execute({
                            element: $(e.currentTarget),
                            value: false,
                            event: e
                        })
                    })
                }
            },
            _toggleActiveState: function($element, value) {
                this._toggleHoverClass(!value);
                $element.toggleClass(ACTIVE_STATE_CLASS, value)
            },
            _refreshHoveredElement: function(hoveredElement) {
                var selector = this._activeStateUnit || this._eventBindingTarget();
                this._forgetHoveredElement();
                this._hoveredElement = hoveredElement.closest(selector);
                this._toggleHoverClass(true)
            },
            _forgetHoveredElement: function() {
                this._toggleHoverClass(false);
                delete this._hoveredElement
            },
            _toggleHoverClass: function(value) {
                if (this._hoveredElement) {
                    this._hoveredElement.toggleClass(HOVER_STATE_CLASS, value && this.option("hoverStateEnabled"))
                }
            },
            _toggleDisabledState: function(value) {
                this.$element().toggleClass(DISABLED_STATE_CLASS, Boolean(value));
                this._toggleHoverClass(!value);
                this.setAria("disabled", value || void 0)
            },
            _setWidgetOption: function(widgetName, args) {
                if (!this[widgetName]) {
                    return
                }
                if (typeUtils.isPlainObject(args[0])) {
                    each(args[0], function(option, value) {
                        this._setWidgetOption(widgetName, [option, value])
                    }.bind(this));
                    return
                }
                var optionName = args[0];
                var value = args[1];
                if (1 === args.length) {
                    value = this.option(optionName)
                }
                var widgetOptionMap = this[widgetName + "OptionMap"];
                this[widgetName].option(widgetOptionMap ? widgetOptionMap(optionName) : optionName, value)
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "disabled":
                        this._toggleDisabledState(args.value);
                        this._refreshFocusState();
                        break;
                    case "hint":
                        this._renderHint();
                        break;
                    case "activeStateEnabled":
                        this._attachFeedbackEvents();
                        break;
                    case "hoverStateEnabled":
                        this._attachHoverEvents();
                        break;
                    case "tabIndex":
                    case "_keyboardProcessor":
                    case "focusStateEnabled":
                        this._refreshFocusState();
                        break;
                    case "onFocusIn":
                    case "onFocusOut":
                        break;
                    case "accessKey":
                        this._renderAccessKey();
                        break;
                    case "visible":
                        var visible = args.value;
                        this._toggleVisibility(visible);
                        if (this._isVisibilityChangeSupported()) {
                            this._checkVisibilityChanged(args.value ? "shown" : "hiding")
                        }
                        break;
                    case "onContentReady":
                        this._initContentReadyAction();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _isVisible: function() {
                return this.callBase() && this.option("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() {
                var setAttribute = function(option) {
                    var attrName = "role" === option.name || "id" === option.name ? option.name : "aria-" + option.name,
                        attrValue = option.value;
                    if (null === attrValue || void 0 === attrValue) {
                        attrValue = void 0
                    } else {
                        attrValue = attrValue.toString()
                    }
                    domUtils.toggleAttr(option.target, attrName, attrValue)
                };
                if (!typeUtils.isPlainObject(arguments[0])) {
                    setAttribute({
                        name: arguments[0],
                        value: arguments[1],
                        target: arguments[2] || this._getAriaTarget()
                    })
                } else {
                    var $target = arguments[1] || this._getAriaTarget();
                    each(arguments[0], function(key, value) {
                        setAttribute({
                            name: key,
                            value: value,
                            target: $target
                        })
                    })
                }
            },
            isReady: function() {
                return this._ready()
            },
            repaint: function() {
                this._refresh()
            },
            focus: function() {
                eventsEngine.trigger(this._focusTarget(), "focus")
            },
            registerKeyHandler: function(key, handler) {
                var currentKeys = this._supportedKeys(),
                    addingKeys = {};
                addingKeys[key] = handler;
                this._supportedKeys = function() {
                    return extend(currentKeys, addingKeys)
                }
            }
        });
        module.exports = Widget
    },
    /*!********************************!*\
      !*** external "window.jQuery" ***!
      \********************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports) {
        module.exports = window.jQuery
    },
    /*!*************************************************!*\
      !*** ./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,
                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,
                correctValue = "0.000300",
                precisionValue = 3;
            return correctValue !== value.toPrecision(precisionValue)
        }

        function adjust(value, interval) {
            var separatedAdjustedValue, precision = getPrecision(interval || 0) + 2,
                separatedValue = value.toString().split("."),
                sourceValue = value,
                absValue = Math.abs(value),
                isExponentValue = isExponential(value),
                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 mantissa, positionOfDelimiter, str = value.toString();
            if (str.indexOf(".") < 0) {
                return 0
            }
            mantissa = str.split(".");
            positionOfDelimiter = mantissa[1].indexOf("e");
            return positionOfDelimiter >= 0 ? positionOfDelimiter : mantissa[1].length
        }
        exports.sign = sign;
        exports.fitIntoRange = fitIntoRange;
        exports.inRange = inRange;
        exports.adjust = adjust;
        exports.getPrecision = getPrecision;
        exports.getExponent = getExponent
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/animation/fx.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _typeof = "function" === typeof Symbol && "symbol" === typeof Symbol.iterator ? function(obj) {
            return typeof obj
        } : function(obj) {
            return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
        };
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            window = __webpack_require__( /*! ../core/utils/window */ 6).getWindow(),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            errors = __webpack_require__( /*! ../core/errors */ 19),
            getPublicElement = __webpack_require__( /*! ../core/utils/dom */ 12).getPublicElement,
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            typeUtils = __webpack_require__( /*! ../core/utils/type */ 1),
            iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 3),
            translator = __webpack_require__( /*! ./translator */ 24),
            easing = __webpack_require__( /*! ./easing */ 244),
            animationFrame = __webpack_require__( /*! ./frame */ 115),
            support = __webpack_require__( /*! ../core/utils/support */ 44),
            positionUtils = __webpack_require__( /*! ./position */ 78),
            removeEvent = __webpack_require__( /*! ../core/remove_event */ 135),
            eventUtils = __webpack_require__( /*! ../events/utils */ 9),
            deferredUtils = __webpack_require__( /*! ../core/utils/deferred */ 7),
            when = deferredUtils.when,
            Deferred = deferredUtils.Deferred,
            removeEventName = eventUtils.addNamespace(removeEvent, "dxFX"),
            isFunction = typeUtils.isFunction,
            isPlainObject = typeUtils.isPlainObject,
            noop = __webpack_require__( /*! ../core/utils/common */ 4).noop;
        var RELATIVE_VALUE_REGEX = /^([+-])=(.*)/i,
            ANIM_DATA_KEY = "dxAnimData",
            ANIM_QUEUE_KEY = "dxAnimQueue",
            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,
                    deferred = new Deferred,
                    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 simulatedEndEventTimer, waitForJSCompleteTimer, that = this,
                    startTime = Date.now() + config.delay,
                    deferred = new Deferred,
                    transitionEndFired = new Deferred,
                    simulatedTransitionEndFired = new Deferred,
                    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()
                });
                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,
                    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),
                        scaleData = part.match(/scale\((.+?)\)/),
                        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,
                            t = currentDuration,
                            b = 1 * from[propName],
                            c = to[propName] - from[propName],
                            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" === ("undefined" === typeof endPropValue ? "undefined" : _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 toOpacity, from = config.from,
                    fromOpacity = isPlainObject(from) ? config.skipElementInitialStyles ? 0 : $element.css("opacity") : String(from);
                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,
                    to = config.to,
                    fromOpacity = "opacity" in from ? from.opacity : $element.css("opacity"),
                    toOpacity = "opacity" in to ? to.opacity : 1,
                    fromScale = "scale" in from ? from.scale : 0,
                    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
            },
            defaultCssConfig = {
                duration: 400,
                easing: "ease",
                delay: 0
            };
        var setupAnimationOnElement = function() {
            var animation = this,
                $element = animation.element,
                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,
                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,
                $element = animation.element,
                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,
                $element = animation.element,
                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,
                config = extend(true, {}, defaultConfig, initialConfig),
                configurator = getAnimationConfigurator(config),
                strategy = getAnimationStrategy(config),
                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()
        };
        var pushInAnimationQueue = function($element, animation) {
            var queueData = getAnimQueueData($element);
            writeAnimQueueData($element, queueData);
            queueData.push(animation);
            if (!isAnimating($element)) {
                shiftFromAnimationQueue($element, queueData)
            }
        };
        var getAnimQueueData = function($element) {
            return $element.data(ANIM_QUEUE_KEY) || []
        };
        var writeAnimQueueData = function($element, queueData) {
            $element.data(ANIM_QUEUE_KEY, queueData)
        };
        var destroyAnimQueueData = function($element) {
            $element.removeData(ANIM_QUEUE_KEY)
        };
        var isAnimating = function($element) {
            return !!$element.data(ANIM_DATA_KEY)
        };
        var shiftFromAnimationQueue = 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)
                }
            })
        };
        var executeAnimation = function(animation) {
            animation.setup();
            if (fx.off || animation.isSynchronous) {
                animation.start()
            } else {
                animation.startTimeout = setTimeout(function() {
                    animation.start()
                })
            }
            return animation.deferred.promise()
        };
        var setupPosition = function($element, config) {
            if (!config || !config.position) {
                return
            }
            var win = $(window),
                left = 0,
                top = 0,
                position = positionUtils.calculate($element, config.position),
                offset = $element.offset(),
                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
        };
        var setProps = function($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),
                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/localization/date.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var dependencyInjector = __webpack_require__( /*! ../core/utils/dependency_injector */ 56),
            isString = __webpack_require__( /*! ../core/utils/type */ 1).isString,
            iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 3),
            inArray = __webpack_require__( /*! ../core/utils/array */ 11).inArray,
            getLDMLDateFormatter = __webpack_require__( /*! ./ldml/date.formatter */ 236).getFormatter,
            getLDMLDateFormat = __webpack_require__( /*! ./ldml/date.format */ 201).getFormat,
            getLDMLDateParser = __webpack_require__( /*! ./ldml/date.parser */ 268).getParser,
            defaultDateNames = __webpack_require__( /*! ./default_date_names */ 237),
            numberLocalization = __webpack_require__( /*! ./number */ 49),
            errors = __webpack_require__( /*! ../core/errors */ 19);
        __webpack_require__( /*! ./core */ 86);
        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",
            mediumdatemediumtime: "MMMM d, 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 = dependencyInjector({
            _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,
                    result = [];
                iteratorUtils.each(pattern.split(/\W+/), function(_, formatPart) {
                    iteratorUtils.each(possiblePartPatterns, function(partName, possiblePatterns) {
                        if (inArray(formatPart, possiblePatterns) > -1) {
                            result.push(partName)
                        }
                    })
                });
                return result
            },
            getMonthNames: function(format) {
                return defaultDateNames.getMonthNames(format)
            },
            getDayNames: function(format) {
                return defaultDateNames.getDayNames(format)
            },
            getQuarterNames: function(format) {
                return defaultDateNames.getQuarterNames(format)
            },
            getPeriodNames: function(format) {
                return defaultDateNames.getPeriodNames(format)
            },
            getTimeSeparator: function() {
                return ":"
            },
            is24HourFormat: function(format) {
                var amTime = new Date(2017, 0, 20, 11, 0, 0, 0),
                    pmTime = new Date(2017, 0, 20, 23, 0, 0, 0),
                    amTimeFormatted = this.format(amTime, format),
                    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 (isString(_format)) {
                            _format = FORMATS_TO_PATTERN_MAP[_format.toLowerCase()] || _format;
                            return numberLocalization.convertDigits(getLDMLDateFormatter(_format, this)(date))
                        }
                    }
                }
                if (!formatter) {
                    return
                }
                return formatter(date)
            },
            parse: function(text, format) {
                var result, ldmlFormat, formatter, that = this;
                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 numberLocalization.convertDigits(text, true)
                    };
                    try {
                        ldmlFormat = getLDMLDateFormat(formatter)
                    } catch (e) {}
                }
                if (ldmlFormat) {
                    text = numberLocalization.convertDigits(text, true);
                    return getLDMLDateParser(ldmlFormat, this)(text)
                }
                errors.log("W0012");
                result = new Date(text);
                if (!result || isNaN(result.getTime())) {
                    return
                }
                return result
            },
            firstDayOfWeekIndex: function() {
                return 0
            }
        });
        module.exports = dateLocalization
    }, ,
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/core/utils/inflector.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var map = __webpack_require__( /*! ./iterator */ 3).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 i, char, captionList = [],
                isPrevCharNewWord = false,
                isNewWord = false;
            for (i = 0; i < name.length; i++) {
                char = name.charAt(i);
                isNewWord = char === char.toUpperCase() && "-" !== 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/data/errors.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var errorUtils = __webpack_require__( /*! ../core/utils/error */ 111),
            coreErrors = __webpack_require__( /*! ../core/errors */ 19),
            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}",
            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/button.js ***!
      \*******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            iconUtils = __webpack_require__( /*! ../core/utils/icon */ 87),
            domUtils = __webpack_require__( /*! ../core/utils/dom */ 12),
            devices = __webpack_require__( /*! ../core/devices */ 16),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            ValidationMixin = __webpack_require__( /*! ./validation/validation_mixin */ 169),
            ValidationEngine = __webpack_require__( /*! ./validation_engine */ 94),
            Widget = __webpack_require__( /*! ./widget/ui.widget */ 28),
            inkRipple = __webpack_require__( /*! ./widget/utils.ink_ripple */ 72),
            eventUtils = __webpack_require__( /*! ../events/utils */ 9),
            themes = __webpack_require__( /*! ./themes */ 20),
            clickEvent = __webpack_require__( /*! ../events/click */ 17),
            FunctionTemplate = __webpack_require__( /*! ./widget/function_template */ 99);
        var BUTTON_CLASS = "dx-button",
            BUTTON_CONTENT_CLASS = "dx-button-content",
            BUTTON_HAS_TEXT_CLASS = "dx-button-has-text",
            BUTTON_HAS_ICON_CLASS = "dx-button-has-icon",
            BUTTON_STYLING_MODE_CLASS_PREFIX = "dx-button-mode-",
            ALLOWED_STYLE_CLASSES = [BUTTON_STYLING_MODE_CLASS_PREFIX + "contained", BUTTON_STYLING_MODE_CLASS_PREFIX + "text", BUTTON_STYLING_MODE_CLASS_PREFIX + "outlined"],
            TEMPLATE_WRAPPER_CLASS = "dx-template-wrapper",
            BUTTON_TEXT_CLASS = "dx-button-text",
            ANONYMOUS_TEMPLATE_NAME = "content",
            BUTTON_FEEDBACK_HIDE_TIMEOUT = 100;
        var Button = Widget.inherit({
            _supportedKeys: function() {
                var that = this,
                    click = function(e) {
                        e.preventDefault();
                        that._executeClickAction(e)
                    };
                return extend(this.callBase(), {
                    space: click,
                    enter: click
                })
            },
            _setDeprecatedOptions: function() {
                this.callBase()
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    hoverStateEnabled: true,
                    onClick: null,
                    type: "normal",
                    text: "",
                    icon: "",
                    validationGroup: void 0,
                    activeStateEnabled: true,
                    template: "content",
                    useSubmitBehavior: false,
                    useInkRipple: false,
                    stylingMode: "contained"
                })
            },
            _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) || themes.isAndroid5(themeName)
                    },
                    options: {
                        useInkRipple: true
                    }
                }])
            },
            _getAnonymousTemplateName: function() {
                return ANONYMOUS_TEMPLATE_NAME
            },
            _feedbackHideTimeout: BUTTON_FEEDBACK_HIDE_TIMEOUT,
            _initTemplates: function() {
                this.callBase();
                this._defaultTemplates.content = new FunctionTemplate(function(options) {
                    var data = options.model,
                        $iconElement = iconUtils.getImageContainer(data && data.icon),
                        $textContainer = data && data.text ? $("<span>").text(data.text).addClass(BUTTON_TEXT_CLASS) : void 0;
                    $(options.container).append($iconElement).append($textContainer)
                }, this)
            },
            _initMarkup: function() {
                this.$element().addClass(BUTTON_CLASS);
                this._renderType();
                this._renderStylingMode();
                this.option("useInkRipple") && this._renderInkRipple();
                this._renderClick();
                this.setAria("role", "button");
                this._updateAriaLabel();
                this.callBase();
                this._updateContent()
            },
            _renderInkRipple: function() {
                var isOnlyIconButton = !this.option("text") && this.option("icon") || "back" === this.option("type"),
                    config = {};
                if (isOnlyIconButton) {
                    extend(config, {
                        waveSizeCoefficient: 1,
                        useHoldAnimation: false,
                        isCentered: true
                    })
                }
                this._inkRipple = inkRipple.render(config)
            },
            _toggleActiveState: function($element, value, e) {
                this.callBase.apply(this, arguments);
                if (!this._inkRipple) {
                    return
                }
                var config = {
                    element: this._$content,
                    event: e
                };
                if (value) {
                    this._inkRipple.showWave(config)
                } else {
                    this._inkRipple.hideWave(config)
                }
            },
            _updateContent: function() {
                var $element = this.$element(),
                    data = this._getContentData();
                if (this._$content) {
                    this._$content.empty()
                } else {
                    this._$content = $("<div>").addClass(BUTTON_CONTENT_CLASS).appendTo($element)
                }
                $element.toggleClass(BUTTON_HAS_ICON_CLASS, !!data.icon).toggleClass(BUTTON_HAS_TEXT_CLASS, !!data.text);
                var transclude = this._getAnonymousTemplateName() === this.option("template"),
                    template = this._getTemplateByOption("template"),
                    $result = $(template.render({
                        model: data,
                        container: domUtils.getPublicElement(this._$content),
                        transclude: transclude
                    }));
                if ($result.hasClass(TEMPLATE_WRAPPER_CLASS)) {
                    this._$content.replaceWith($result);
                    this._$content = $result;
                    this._$content.addClass(BUTTON_CONTENT_CLASS)
                }
                if (this.option("useSubmitBehavior")) {
                    this._renderSubmitInput()
                }
            },
            _renderSubmitInput: function() {
                var submitAction = this._createAction(function(args) {
                    var e = args.event,
                        validationGroup = ValidationEngine.getGroupConfig(args.component._findGroup());
                    if (validationGroup && !validationGroup.validate().isValid) {
                        e.preventDefault()
                    }
                    e.stopPropagation()
                });
                this._$submitInput = $("<input>").attr("type", "submit").attr("tabindex", -1).addClass("dx-button-submit-input").appendTo(this._$content);
                eventsEngine.on(this._$submitInput, "click", function(e) {
                    submitAction({
                        event: e
                    })
                })
            },
            _getContentData: function() {
                var icon = this.option("icon"),
                    text = this.option("text"),
                    back = "back" === this.option("type");
                if (back && !icon) {
                    icon = "back"
                }
                return {
                    icon: icon,
                    text: text
                }
            },
            _renderClick: function() {
                var that = this,
                    eventName = eventUtils.addNamespace(clickEvent.name, this.NAME),
                    actionConfig = {};
                if (this.option("useSubmitBehavior")) {
                    actionConfig.afterExecute = function(e) {
                        setTimeout(function() {
                            e.component._$submitInput.get(0).click()
                        })
                    }
                }
                this._clickAction = this._createActionByOption("onClick", actionConfig);
                eventsEngine.off(this.$element(), eventName);
                eventsEngine.on(this.$element(), eventName, function(e) {
                    that._executeClickAction(e)
                })
            },
            _executeClickAction: function(e) {
                this._clickAction({
                    event: e,
                    validationGroup: ValidationEngine.getGroupConfig(this._findGroup())
                })
            },
            _updateAriaLabel: function() {
                var icon = this.option("icon"),
                    text = this.option("text");
                if ("image" === iconUtils.getImageSourceType(icon)) {
                    if (icon.indexOf("base64") === -1) {
                        icon = icon.replace(/.+\/([^\.]+)\..+$/, "$1")
                    } else {
                        icon = "Base64"
                    }
                }
                var ariaLabel = text || icon || "";
                ariaLabel = ariaLabel.toString().trim();
                this.setAria("label", ariaLabel)
            },
            _renderType: function() {
                var type = this.option("type");
                if (type) {
                    this.$element().addClass("dx-button-" + type)
                }
            },
            _renderStylingMode: function() {
                var _this = this;
                var optionName = "stylingMode";
                ALLOWED_STYLE_CLASSES.forEach(function(className) {
                    return _this.$element().removeClass(className)
                });
                var stylingModeClass = BUTTON_STYLING_MODE_CLASS_PREFIX + this.option(optionName);
                if (ALLOWED_STYLE_CLASSES.indexOf(stylingModeClass) === -1) {
                    var defaultOptionValue = this._getDefaultOptions()[optionName];
                    stylingModeClass = BUTTON_STYLING_MODE_CLASS_PREFIX + defaultOptionValue
                }
                this.$element().addClass(stylingModeClass)
            },
            _refreshType: function(prevType) {
                var type = this.option("type");
                prevType && this.$element().removeClass("dx-button-" + prevType).addClass("dx-button-" + type);
                if (!this.$element().hasClass(BUTTON_HAS_ICON_CLASS) && "back" === type) {
                    this._updateContent()
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "onClick":
                        this._renderClick();
                        break;
                    case "icon":
                    case "text":
                        this._updateContent();
                        this._updateAriaLabel();
                        break;
                    case "type":
                        this._refreshType(args.previousValue);
                        this._updateContent();
                        this._updateAriaLabel();
                        break;
                    case "template":
                        this._updateContent();
                        break;
                    case "stylingMode":
                        this._renderStylingMode();
                        break;
                    case "useInkRipple":
                    case "useSubmitBehavior":
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _clean: function() {
                delete this._inkRipple;
                this.callBase();
                delete this._$content
            }
        }).include(ValidationMixin);
        registerComponent("dxButton", Button);
        module.exports = Button
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/core/element_data.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var WeakMap = __webpack_require__( /*! ./polyfills/weak_map */ 180);
        var domAdapter = __webpack_require__( /*! ./dom_adapter */ 13);
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var MemorizedCallbacks = __webpack_require__( /*! ./memorized_callbacks */ 181);
        var dataMap = new WeakMap;
        var strategy;
        var strategyChanging = new MemorizedCallbacks;
        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++) {
                    eventsEngine.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 (!domAdapter.isElementNode(element)) {
                return
            }
            var childElements = element.getElementsByTagName("*");
            strategy.cleanData(childElements);
            if (cleanSelf) {
                strategy.cleanData([element])
            }
        }
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/core/utils/browser.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var extend = __webpack_require__( /*! ./extend */ 0).extend,
            windowUtils = __webpack_require__( /*! ./window */ 6),
            navigator = windowUtils.getNavigator();
        var webkitRegExp = /(webkit)[ \/]([\w.]+)/,
            ieRegExp = /(msie) (\d{1,2}\.\d)/,
            ie11RegExp = /(trident).*rv:(\d{1,2}\.\d)/,
            msEdge = /(edge)\/((\d+)?[\w\.]+)/,
            safari = /(safari)/i,
            mozillaRegExp = /(mozilla)(?:.*? rv:([\w.]+))/;
        var browserFromUA = function(ua) {
            ua = ua.toLowerCase();
            var result = {},
                matches = ieRegExp.exec(ua) || ie11RegExp.exec(ua) || msEdge.exec(ua) || ua.indexOf("compatible") < 0 && mozillaRegExp.exec(ua) || webkitRegExp.exec(ua) || [],
                browserName = matches[1],
                browserVersion = matches[2];
            if ("webkit" === browserName && ua.indexOf("chrome") < 0 && safari.exec(ua)) {
                browserName = "safari";
                result.webkit = true;
                browserVersion = /Version\/([0-9.]+)/i.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/data/utils.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _dom_adapter = __webpack_require__( /*! ../core/dom_adapter */ 13);
        var _dom_adapter2 = _interopRequireDefault(_dom_adapter);
        var _ready_callbacks = __webpack_require__( /*! ../core/utils/ready_callbacks */ 52);
        var _window = __webpack_require__( /*! ../core/utils/window */ 6);
        var _window2 = _interopRequireDefault(_window);
        var _iterator = __webpack_require__( /*! ../core/utils/iterator */ 3);
        var _data = __webpack_require__( /*! ../core/utils/data */ 23);
        var _deferred = __webpack_require__( /*! ../core/utils/deferred */ 7);

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

        function _toConsumableArray(arr) {
            if (Array.isArray(arr)) {
                for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {
                    arr2[i] = arr[i]
                }
                return arr2
            } else {
                return Array.from(arr)
            }
        }
        var window = _window2.default.getWindow();
        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() {
                _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 lockDeferred, lockCount = 0;
            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 name, names = (0, _iterator.map)(key1, function(v, k) {
                    return k
                });
                for (var i = 0; i < names.length; i++) {
                    name = names[i];
                    if ((0, _data.toComparable)(key1[name], true) != (0, _data.toComparable)(key2[name], true)) {
                        return false
                    }
                }
                return true
            }
            return (0, _data.toComparable)(key1, true) == (0, _data.toComparable)(key2, true)
        };
        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],
                    octet2 = input[i + 1],
                    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
        };
        var stringToByteArray = function(str) {
            var code, i, bytes = [];
            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 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, 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 = [],
                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,
            base64_encode: base64_encode
        };
        module.exports = utils
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/core/utils/string.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var typeUtils = __webpack_require__( /*! ./type */ 1),
            commonUtils = __webpack_require__( /*! ./common */ 4);
        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 pairToObject = function(raw) {
            var pair = commonUtils.splitPair(raw),
                h = parseInt(pair && pair[0], 10),
                v = parseInt(pair && pair[1], 10);
            if (!isFinite(h)) {
                h = 0
            }
            if (!isFinite(v)) {
                v = h
            }
            return {
                h: h,
                v: v
            }
        };
        var quadToObject = function(raw) {
            var quad = commonUtils.splitQuad(raw),
                left = parseInt(quad && quad[0], 10),
                top = parseInt(quad && quad[1], 10),
                right = parseInt(quad && quad[2], 10),
                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 replaceDollarCount, reg, value, s = arguments[0],
                values = [].slice.call(arguments).slice(1);
            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.pairToObject = pairToObject;
        exports.quadToObject = quadToObject;
        exports.format = stringFormat;
        exports.replaceAll = replaceAll;
        exports.isEmpty = isEmpty
    }, , ,
    /*!********************************************!*\
      !*** ./artifacts/transpiled/data/query.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var arrayQueryImpl = __webpack_require__( /*! ./array_query */ 153),
            remoteQueryImpl = __webpack_require__( /*! ./remote_query */ 364);
        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 inArray = __webpack_require__( /*! ./array */ 11).inArray,
            domAdapter = __webpack_require__( /*! ../dom_adapter */ 13),
            callOnce = __webpack_require__( /*! ./call_once */ 73),
            windowUtils = __webpack_require__( /*! ./window */ 6),
            navigator = windowUtils.getNavigator(),
            devices = __webpack_require__( /*! ../devices */ 16),
            styleUtils = __webpack_require__( /*! ./style */ 85);
        var transitionEndEventNames = {
            webkitTransition: "webkitTransitionEnd",
            MozTransition: "transitionend",
            OTransition: "oTransitionEnd",
            msTransition: "MsTransitionEnd",
            transition: "transitionend"
        };
        var supportProp = function(prop) {
            return !!styleUtils.styleProp(prop)
        };
        var isNativeScrollingSupported = function() {
            var realDevice = devices.real(),
                realPlatform = realDevice.platform,
                realVersion = realDevice.version,
                isObsoleteAndroid = realVersion && realVersion[0] < 4 && "android" === realPlatform,
                isNativeScrollDevice = !isObsoleteAndroid && inArray(realPlatform, ["ios", "android", "win"]) > -1 || realDevice.mac;
            return isNativeScrollDevice
        };
        var inputType = function(type) {
            if ("text" === type) {
                return true
            }
            var input = domAdapter.createElement("input");
            try {
                input.setAttribute("type", type);
                input.value = "wrongValue";
                return !input.value
            } catch (e) {
                return false
            }
        };
        var touchEvents = windowUtils.hasProperty("ontouchstart") && !windowUtils.hasProperty("callPhantom"),
            pointerEvents = !!navigator.pointerEnabled || !!navigator.msPointerEnabled,
            touchPointersPresent = !!navigator.maxTouchPoints || !!navigator.msMaxTouchPoints;
        exports.touchEvents = touchEvents;
        exports.pointerEvents = pointerEvents;
        exports.touch = touchEvents || pointerEvents && touchPointersPresent;
        exports.transition = callOnce(function() {
            return supportProp("transition")
        });
        exports.transitionEndEventName = callOnce(function() {
            return transitionEndEventNames[styleUtils.styleProp("transition")]
        });
        exports.animation = callOnce(function() {
            return supportProp("animation")
        });
        exports.nativeScrolling = isNativeScrollingSupported();
        exports.styleProp = styleUtils.styleProp;
        exports.stylePropPrefix = styleUtils.stylePropPrefix;
        exports.supportProp = supportProp;
        exports.inputType = inputType
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/ui/editor/editor.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            dataUtils = __webpack_require__( /*! ../../core/element_data */ 37),
            Callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 21),
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            windowUtils = __webpack_require__( /*! ../../core/utils/window */ 6),
            getDefaultAlignment = __webpack_require__( /*! ../../core/utils/position */ 108).getDefaultAlignment,
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            Widget = __webpack_require__( /*! ../widget/ui.widget */ 28),
            ValidationMixin = __webpack_require__( /*! ../validation/validation_mixin */ 169),
            Overlay = __webpack_require__( /*! ../overlay */ 64);
        var READONLY_STATE_CLASS = "dx-state-readonly",
            INVALID_CLASS = "dx-invalid",
            INVALID_MESSAGE = "dx-invalid-message",
            INVALID_MESSAGE_AUTO = "dx-invalid-message-auto",
            INVALID_MESSAGE_ALWAYS = "dx-invalid-message-always",
            VALIDATION_TARGET = "dx-validation-target",
            VALIDATION_MESSAGE_MIN_WIDTH = 100;
        var Editor = Widget.inherit({
            _init: function() {
                this.callBase();
                this.validationRequest = Callbacks();
                var $element = this.$element();
                if ($element) {
                    dataUtils.data($element[0], VALIDATION_TARGET, this)
                }
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    value: null,
                    name: "",
                    onValueChanged: null,
                    readOnly: false,
                    isValid: true,
                    validationError: null,
                    validationMessageMode: "auto",
                    validationBoundary: void 0,
                    validationMessageOffset: {
                        h: 0,
                        v: 0
                    }
                })
            },
            _attachKeyboardEvents: function() {
                if (this.option("readOnly")) {
                    return
                }
                this.callBase();
                if (this._keyboardProcessor) {
                    this._attachChildKeyboardEvents()
                }
            },
            _attachChildKeyboardEvents: commonUtils.noop,
            _setOptionsByReference: function() {
                this.callBase();
                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
            },
            _renderValidationState: function() {
                var isValid = this.option("isValid"),
                    validationError = this.option("validationError"),
                    validationMessageMode = this.option("validationMessageMode"),
                    $element = this.$element();
                $element.toggleClass(INVALID_CLASS, !isValid);
                this.setAria("invalid", !isValid || void 0);
                if (!windowUtils.hasWindow()) {
                    return
                }
                if (this._$validationMessage) {
                    this._$validationMessage.remove();
                    this._$validationMessage = null
                }
                if (!isValid && validationError && validationError.message) {
                    this._$validationMessage = $("<div>").addClass(INVALID_MESSAGE).html(validationError.message).appendTo($element);
                    this._validationMessage = this._createComponent(this._$validationMessage, Overlay, {
                        integrationOptions: {},
                        templatesRenderAsynchronously: false,
                        target: this._getValidationMessageTarget(),
                        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._$validationMessage.toggleClass(INVALID_MESSAGE_AUTO, "auto" === validationMessageMode).toggleClass(INVALID_MESSAGE_ALWAYS, "always" === validationMessageMode);
                    this._setValidationMessageMaxWidth()
                }
            },
            _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"),
                    messagePositionSide = getDefaultAlignment(rtlEnabled),
                    messageOriginalOffset = this.option("validationMessageOffset"),
                    messageOffset = {
                        h: messageOriginalOffset.h,
                        v: messageOriginalOffset.v
                    },
                    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() {
                this.$element().toggleClass(READONLY_STATE_CLASS, !!this.option("readOnly"));
                this.setAria("readonly", this.option("readOnly") || void 0)
            },
            _dispose: function() {
                var element = this.$element()[0];
                dataUtils.data(element, VALIDATION_TARGET, null);
                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":
                    case "validationBoundary":
                    case "validationMessageMode":
                        this._renderValidationState();
                        break;
                    case "readOnly":
                        this._toggleReadOnlyState();
                        this._refreshFocusState();
                        break;
                    case "value":
                        if (!this._valueChangeActionSuppressed) {
                            this._raiseValueChangeAction(args.value, args.previousValue);
                            this._saveValueChangeEvent(void 0)
                        }
                        if (args.value != args.previousValue) {
                            this.validationRequest.fire({
                                value: args.value,
                                editor: this
                            })
                        }
                        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)
            }
        }).include(ValidationMixin);
        module.exports = Editor
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/integration/jquery.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var jQuery = __webpack_require__( /*! jquery */ 29);
        var compareVersions = __webpack_require__( /*! ../core/utils/version */ 62).compare;
        var errors = __webpack_require__( /*! ../core/utils/error */ 111);
        var useJQuery = __webpack_require__( /*! ./jquery/use_jquery */ 79)();
        if (useJQuery && compareVersions(jQuery.fn.jquery, [1, 10]) < 0) {
            throw errors.Error("E0012")
        }
        __webpack_require__( /*! ./jquery/renderer */ 350);
        __webpack_require__( /*! ./jquery/hooks */ 351);
        __webpack_require__( /*! ./jquery/deferred */ 352);
        __webpack_require__( /*! ./jquery/hold_ready */ 353);
        __webpack_require__( /*! ./jquery/events */ 354);
        __webpack_require__( /*! ./jquery/easing */ 355);
        __webpack_require__( /*! ./jquery/element_data */ 356);
        __webpack_require__( /*! ./jquery/element */ 357);
        __webpack_require__( /*! ./jquery/component_registrator */ 358);
        __webpack_require__( /*! ./jquery/ajax */ 359)
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/collection/ui.collection_widget.edit.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            BaseCollectionWidget = __webpack_require__( /*! ./ui.collection_widget.base */ 363),
            errors = __webpack_require__( /*! ../widget/ui.errors */ 18),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            isDefined = __webpack_require__( /*! ../../core/utils/type */ 1).isDefined,
            PlainEditStrategy = __webpack_require__( /*! ./ui.collection_widget.edit.strategy.plain */ 191),
            compileGetter = __webpack_require__( /*! ../../core/utils/data */ 23).compileGetter,
            DataSource = __webpack_require__( /*! ../../data/data_source/data_source */ 50).DataSource,
            Selection = __webpack_require__( /*! ../selection/selection */ 273),
            deferredUtils = __webpack_require__( /*! ../../core/utils/deferred */ 7),
            when = deferredUtils.when,
            Deferred = deferredUtils.Deferred;
        var ITEM_DELETING_DATA_KEY = "dxItemDeleting",
            NOT_EXISTING_INDEX = -1;
        var indexExists = function(index) {
            return index !== NOT_EXISTING_INDEX
        };
        var CollectionWidget = BaseCollectionWidget.inherit({
            _setOptionsByReference: function() {
                this.callBase();
                extend(this._optionsByReference, {
                    selectedItem: true
                })
            },
            _getDefaultOptions: function() {
                return 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 = 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,
                    store = this._dataSource && this._dataSource.store();
                if (this.option("keyExpr")) {
                    key = this._keyGetter(item)
                } else {
                    if (store) {
                        key = store.keyOf(item)
                    }
                }
                return key
            },
            _initSelectionModule: function() {
                var that = this,
                    itemsGetter = that._editStrategy.itemsGetter;
                this._selection = new Selection({
                    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();
                        return store ? store.load(options).done(function(items) {
                            that._dataSource._applyMapFunction(items)
                        }) : (new Deferred).resolve([])
                    },
                    dataFields: function() {
                        return that._dataSource && that._dataSource.select()
                    },
                    plainItems: itemsGetter.bind(that._editStrategy)
                })
            },
            _initEditStrategy: function() {
                var Strategy = PlainEditStrategy;
                this._editStrategy = new Strategy(this)
            },
            _getSelectedItemIndices: function(keys) {
                var that = this,
                    indices = [];
                keys = keys || this._selection.getSelectedItemKeys();
                that._editStrategy.beginCache();
                each(keys, function(_, key) {
                    var selectedIndex = that._getIndexByKey(key);
                    if (indexExists(selectedIndex)) {
                        indices.push(selectedIndex)
                    }
                });
                that._editStrategy.endCache();
                return indices
            },
            _initMarkup: function() {
                this._rendering = true;
                if (!this._dataSource || !this._dataSource.isLoading()) {
                    this._syncSelectionOptions();
                    this._normalizeSelectedItems()
                }
                this.callBase();
                var selectedItemIndices = this._getSelectedItemIndices();
                this._renderSelection(selectedItemIndices, [])
            },
            _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, selectedItems, selectedIndex;
                switch (byOption) {
                    case "selectedIndex":
                        selectedItem = this._editStrategy.getItemDataByIndex(this.option("selectedIndex"));
                        if (isDefined(selectedItem)) {
                            this._setOptionSilent("selectedItems", [selectedItem]);
                            this._setOptionSilent("selectedItem", selectedItem);
                            this._setOptionSilent("selectedItemKeys", this._editStrategy.getKeysByItems([selectedItem]))
                        } else {
                            this._setOptionSilent("selectedItems", []);
                            this._setOptionSilent("selectedItemKeys", []);
                            this._setOptionSilent("selectedItem", null)
                        }
                        break;
                    case "selectedItems":
                        selectedItems = this.option("selectedItems") || [];
                        selectedIndex = this._editStrategy.getIndexByItemData(selectedItems[0]);
                        if (this.option("selectionRequired") && !indexExists(selectedIndex)) {
                            this._syncSelectionOptions("selectedIndex");
                            return
                        }
                        this._setOptionSilent("selectedItem", selectedItems[0]);
                        this._setOptionSilent("selectedIndex", selectedIndex);
                        this._setOptionSilent("selectedItemKeys", this._editStrategy.getKeysByItems(selectedItems));
                        break;
                    case "selectedItem":
                        selectedItem = this.option("selectedItem");
                        selectedIndex = this._editStrategy.getIndexByItemData(selectedItem);
                        if (this.option("selectionRequired") && !indexExists(selectedIndex)) {
                            this._syncSelectionOptions("selectedIndex");
                            return
                        }
                        if (isDefined(selectedItem)) {
                            this._setOptionSilent("selectedItems", [selectedItem]);
                            this._setOptionSilent("selectedIndex", selectedIndex);
                            this._setOptionSilent("selectedItemKeys", this._editStrategy.getKeysByItems([selectedItem]))
                        } else {
                            this._setOptionSilent("selectedItems", []);
                            this._setOptionSilent("selectedItemKeys", []);
                            this._setOptionSilent("selectedIndex", NOT_EXISTING_INDEX)
                        }
                        break;
                    case "selectedItemKeys":
                        var selectedItemKeys = this.option("selectedItemKeys");
                        if (this.option("selectionRequired") && !indexExists(this._getIndexByKey(selectedItemKeys[0]))) {
                            this._syncSelectionOptions("selectedIndex");
                            return
                        }
                        this._selection.setSelection(selectedItemKeys)
                }
            },
            _chooseSelectOption: function() {
                var optionName = "selectedIndex";
                var isOptionDefined = function(optionName) {
                    var optionValue = this.option(optionName),
                        length = 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._setOptionSilent("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._setOptionSilent("selectedItems", [normalizedSelection]);
                            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)
                        }
                    }
                }
            },
            _renderSelection: noop,
            _itemClickHandler: function(e) {
                this._createAction(function(e) {
                    this._itemSelectHandler(e.event)
                }.bind(this), {
                    validatingTargetName: "itemElement"
                })({
                    itemElement: $(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")) {
                    return
                }
                var $itemElement = $(args.itemElement);
                if (this._isItemSelected(this._editStrategy.getNormalizedIndex($itemElement))) {
                    $itemElement.addClass(this._selectedItemClass());
                    this._setAriaSelected($itemElement, "true")
                } else {
                    this._setAriaSelected($itemElement, "false")
                }
            },
            _updateSelectedItems: function(args) {
                var that = this,
                    addedItemKeys = args.addedItemKeys,
                    removedItemKeys = args.removedItemKeys;
                if (that._rendered && (addedItemKeys.length || removedItemKeys.length)) {
                    var selectionChangePromise = that._selectionChangePromise;
                    if (!that._rendering) {
                        var normalizedIndex, i, addedSelection = [],
                            removedSelection = [];
                        that._editStrategy.beginCache();
                        for (i = 0; i < addedItemKeys.length; i++) {
                            normalizedIndex = that._getIndexByKey(addedItemKeys[i]);
                            addedSelection.push(normalizedIndex);
                            that._addSelection(normalizedIndex)
                        }
                        for (i = 0; i < removedItemKeys.length; i++) {
                            normalizedIndex = that._getIndexByKey(removedItemKeys[i]);
                            removedSelection.push(normalizedIndex);
                            that._removeSelection(normalizedIndex)
                        }
                        that._editStrategy.endCache();
                        that._updateSelection(addedSelection, removedSelection)
                    }
                    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: function() {
                this._renderSelection.apply(this, arguments)
            },
            _setAriaSelected: function($target, value) {
                this.setAria("selected", value, $target)
            },
            _removeSelection: function(normalizedIndex) {
                var $itemElement = this._editStrategy.getItemElement(normalizedIndex);
                if (indexExists(normalizedIndex)) {
                    $itemElement.removeClass(this._selectedItemClass());
                    this._setAriaSelected($itemElement, "false");
                    eventsEngine.triggerHandler($itemElement, "stateChanged", false)
                }
            },
            _showDeprecatedSelectionMode: function() {
                errors.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)) {
                    $itemElement.addClass(this._selectedItemClass());
                    this._setAriaSelected($itemElement, "true");
                    eventsEngine.triggerHandler($itemElement, "stateChanged", true)
                }
            },
            _isItemSelected: function(index) {
                var key = this._getKeyByIndex(index);
                return this._selection.isItemSelected(key)
            },
            _optionChanged: function(args) {
                if (this._cancelOptionChange === args.name) {
                    return
                }
                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);
                        this._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._setOptionSilent("selectedItems", []);
                this._syncSelectionOptions("selectedItems")
            },
            _setOptionSilent: function(name, value) {
                this._cancelOptionChange = name;
                this.option(name, value);
                this._cancelOptionChange = false
            },
            _waitDeletingPrepare: function($itemElement) {
                if ($itemElement.data(ITEM_DELETING_DATA_KEY)) {
                    return (new Deferred).resolve().promise()
                }
                $itemElement.data(ITEM_DELETING_DATA_KEY, true);
                var deferred = new Deferred,
                    deletingActionArgs = {
                        cancel: false
                    },
                    deletePromise = this._itemEventHandler($itemElement, "onItemDeleting", deletingActionArgs, {
                        excludeValidators: ["disabled", "readOnly"]
                    });
                when(deletePromise).always(function(value) {
                    var deletePromiseExists = !deletePromise,
                        deletePromiseResolved = !deletePromiseExists && "resolved" === deletePromise.state(),
                        argumentsSpecified = !!arguments.length,
                        shouldDelete = deletePromiseExists || deletePromiseResolved && !argumentsSpecified || deletePromiseResolved && value;
                    when(deferredUtils.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).resolve().promise()
                }
                var deferred = new Deferred,
                    disabledState = this.option("disabled"),
                    dataStore = this._dataSource.store();
                this.option("disabled", true);
                if (!dataStore.remove) {
                    throw errors.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;
                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++) {
                    $(itemElements[i]).data(this._itemIndexKey(), i - 1)
                }
            },
            _simulateOptionChange: function(optionName) {
                var optionValue = this.option(optionName);
                if (optionValue instanceof 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");
                    selectedItemKeys.push(key);
                    this._selection.setSelection(selectedItemKeys)
                }
            },
            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.detach()
                    },
                    excludeValidators: ["disabled", "readOnly"]
                });
                this._renderEmptyMessage()
            },
            deleteItem: function(itemElement) {
                var that = this,
                    deferred = new Deferred,
                    $item = this._editStrategy.getItemElement(itemElement),
                    index = this._editStrategy.getNormalizedIndex(itemElement),
                    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,
                    that = this,
                    strategy = this._editStrategy,
                    $movingItem = strategy.getItemElement(itemElement),
                    $destinationItem = strategy.getItemElement(toItemElement),
                    movingIndex = strategy.getNormalizedIndex(itemElement),
                    destinationIndex = strategy.getNormalizedIndex(toItemElement),
                    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/guid.js ***!
      \*******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ./class */ 10);
        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/localization/number.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var dependencyInjector = __webpack_require__( /*! ../core/utils/dependency_injector */ 56),
            inArray = __webpack_require__( /*! ../core/utils/array */ 11).inArray,
            escapeRegExp = __webpack_require__( /*! ../core/utils/common */ 4).escapeRegExp,
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            isPlainObject = __webpack_require__( /*! ../core/utils/type */ 1).isPlainObject,
            ldmlNumber = __webpack_require__( /*! ./ldml/number */ 267),
            config = __webpack_require__( /*! ../core/config */ 25),
            errors = __webpack_require__( /*! ../core/errors */ 19);
        var MAX_LARGE_NUMBER_POWER = 4,
            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 = dependencyInjector({
            numericFormats: NUMERIC_FORMATS,
            defaultLargeNumberFormatPostfixes: LargeNumberFormatPostfixes,
            _parseNumberFormatString: function(formatType) {
                var formatList, formatObject = {};
                if (!formatType || "string" !== typeof formatType) {
                    return
                }
                formatList = formatType.toLowerCase().split(" ");
                each(formatList, function(index, value) {
                    if (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),
                    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) {
                var powerPostfix;
                var result;
                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)
                }
                powerPostfix = this.defaultLargeNumberFormatPostfixes[formatObject.power] || "";
                result = this._formatNumberCore(value, formatObject.formatType, formatConfig);
                result = result.replace(/(\d|.$)(\D*)$/, "$1" + powerPostfix + "$2");
                return result
            },
            _formatNumberExponential: function(value, formatConfig) {
                var powString, power = this._calculateNumberPower(value, DECIMAL_BASE),
                    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
                }
                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, config().thousandsSeparator) + (parts[1] ? config().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() : value.toFixed(formatConfig.precision)
                    }
                }
                if ("decimal" !== format) {
                    value = this._addGroupSeparators(value)
                } else {
                    value = value.toString().replace(".", config().decimalSeparator)
                }
                if ("percent" === format) {
                    value += "%"
                }
                return value
            },
            _normalizeFormat: function(format) {
                if (!format) {
                    return {}
                }
                if ("function" === typeof format) {
                    return format
                }
                if (!isPlainObject(format)) {
                    format = {
                        type: format
                    }
                }
                return format
            },
            _getSeparators: function() {
                return {
                    decimalSeparator: this.getDecimalSeparator(),
                    thousandsSeparator: this.getThousandsSeparator()
                }
            },
            getThousandsSeparator: function() {
                return this.format(1e3, "fixedPoint")[1]
            },
            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",
                    toFirstDigit = toStandard ? "0" : digits[1],
                    fromLastDigit = toStandard ? digits[0] : "9",
                    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(),
                    regExp = new RegExp("[0-9" + escapeRegExp(separators.decimalSeparator + separators.thousandsSeparator) + "]+", "g"),
                    negativeEtalon = this.format(-1, format).replace(regExp, "1"),
                    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) {
                    return this.convertDigits(ldmlNumber.getFormatter(_format.type, this._getSeparators())(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) {
                    errors.log("W0011")
                }
                var decimalSeparator = this.getDecimalSeparator(),
                    regExp = new RegExp("[^0-9" + escapeRegExp(decimalSeparator) + "]", "g"),
                    cleanedText = text.replace(regExp, "").replace(decimalSeparator, ".").replace(/\.$/g, ""),
                    parsed = +cleanedText;
                cleanedText = cleanedText.replace(/^\./g, "");
                if (cleanedText.length > 15) {
                    return NaN
                }
                if ("" === cleanedText) {
                    return null
                }
                return parsed * this.getSign(text, format)
            }
        });
        module.exports = numberLocalization
    },
    /*!**************************************************************!*\
      !*** ./artifacts/transpiled/data/data_source/data_source.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ../../core/class */ 10),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            iteratorUtils = __webpack_require__( /*! ../../core/utils/iterator */ 3),
            ajax = __webpack_require__( /*! ../../core/utils/ajax */ 76),
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            dataUtils = __webpack_require__( /*! ../utils */ 39),
            arrayUtils = __webpack_require__( /*! ../array_utils */ 136),
            Store = __webpack_require__( /*! ../abstract_store */ 100),
            ArrayStore = __webpack_require__( /*! ../array_store */ 80),
            CustomStore = __webpack_require__( /*! ../custom_store */ 173),
            EventsMixin = __webpack_require__( /*! ../../core/events_mixin */ 54),
            errors = __webpack_require__( /*! ../errors */ 35).errors,
            array = __webpack_require__( /*! ../../core/utils/array */ 11),
            queue = __webpack_require__( /*! ../../core/utils/queue */ 182),
            deferredUtils = __webpack_require__( /*! ../../core/utils/deferred */ 7),
            when = deferredUtils.when,
            Deferred = deferredUtils.Deferred,
            __isString = typeUtils.isString,
            __isNumber = typeUtils.isNumeric,
            __isBoolean = typeUtils.isBoolean,
            __isDefined = typeUtils.isDefined;
        var CANCELED_TOKEN = "canceled";

        function OperationManager() {
            this._counter = -1;
            this._deferreds = {}
        }
        OperationManager.prototype.constructor = OperationManager;
        OperationManager.prototype.add = function(deferred) {
            this._counter += 1;
            this._deferreds[this._counter] = deferred;
            return this._counter
        };
        OperationManager.prototype.remove = function(operationId) {
            return delete this._deferreds[operationId]
        };
        OperationManager.prototype.cancel = function(operationId) {
            if (operationId in this._deferreds) {
                this._deferreds[operationId].reject(CANCELED_TOKEN);
                return true
            }
            return false
        };
        OperationManager.prototype.cancelAll = function() {
            while (this._counter > -1) {
                this.cancel(this._counter);
                this._counter--
            }
        };

        function isPending(deferred) {
            return "pending" === deferred.state()
        }

        function normalizeDataSourceOptions(options, normalizationOptions) {
            var store;

            function createCustomStoreFromLoadFunc() {
                var storeConfig = {};
                iteratorUtils.each(["useDefaultSearch", "key", "load", "loadMode", "cacheRawData", "byKey", "lookup", "totalCount", "insert", "update", "remove"], function() {
                    storeConfig[this] = options[this];
                    delete options[this]
                });
                return new CustomStore(storeConfig)
            }

            function createStoreFromConfig(storeConfig) {
                var alias = storeConfig.type;
                delete storeConfig.type;
                return Store.create(alias, storeConfig)
            }

            function createCustomStoreFromUrl(url) {
                return new CustomStore({
                    load: function() {
                        return ajax.sendRequest({
                            url: url,
                            dataType: "json"
                        })
                    },
                    loadMode: normalizationOptions && normalizationOptions.fromUrlLoadMode
                })
            }
            if ("string" === typeof options) {
                options = {
                    paginate: false,
                    store: createCustomStoreFromUrl(options)
                }
            }
            if (void 0 === options) {
                options = []
            }
            if (Array.isArray(options) || options instanceof Store) {
                options = {
                    store: options
                }
            } else {
                options = extend({}, options)
            }
            if (void 0 === options.store) {
                options.store = []
            }
            store = options.store;
            if ("load" in options) {
                store = createCustomStoreFromLoadFunc()
            } else {
                if (Array.isArray(store)) {
                    store = new ArrayStore(store)
                } else {
                    if (typeUtils.isPlainObject(store)) {
                        store = createStoreFromConfig(extend({}, store))
                    }
                }
            }
            options.store = store;
            return options
        }

        function normalizeStoreLoadOptionAccessorArguments(originalArguments) {
            switch (originalArguments.length) {
                case 0:
                    return;
                case 1:
                    return originalArguments[0]
            }
            return [].slice.call(originalArguments)
        }

        function generateStoreLoadOptionAccessor(optionName) {
            return function() {
                var args = normalizeStoreLoadOptionAccessorArguments(arguments);
                if (void 0 === args) {
                    return this._storeLoadOptions[optionName]
                }
                this._storeLoadOptions[optionName] = args
            }
        }

        function mapDataRespectingGrouping(items, mapper, groupInfo) {
            function mapRecursive(items, level) {
                if (!Array.isArray(items)) {
                    return items
                }
                return level ? mapGroup(items, level) : iteratorUtils.map(items, mapper)
            }

            function mapGroup(group, level) {
                return iteratorUtils.map(group, function(item) {
                    var result = {
                        key: item.key,
                        items: mapRecursive(item.items, level - 1)
                    };
                    if ("aggregates" in item) {
                        result.aggregates = item.aggregates
                    }
                    return result
                })
            }
            return mapRecursive(items, groupInfo ? dataUtils.normalizeSortingInfo(groupInfo).length : 0)
        }
        var DataSource = Class.inherit({
            ctor: function(options) {
                var _this = this;
                var that = this;
                options = normalizeDataSourceOptions(options);
                var onPushHandler = 0 !== options.pushAggregationTimeout ? dataUtils.throttleChanges(this._onPush, function() {
                    if (void 0 === options.pushAggregationTimeout) {
                        return 5 * that._changedTime
                    }
                    return 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 = __isDefined(options.reshapeOnPush) ? options.reshapeOnPush : false;
                iteratorUtils.each(["onChanged", "onLoadError", "onLoadingChanged", "onCustomizeLoadResult", "onCustomizeStoreLoadOptions"], function(_, optionName) {
                    if (optionName in options) {
                        that.on(optionName.substr(2, 1).toLowerCase() + optionName.substr(3), options[optionName])
                    }
                });
                this._operationManager = new OperationManager;
                this._init()
            },
            _init: function() {
                this._items = [];
                this._userData = {};
                this._totalCount = -1;
                this._isLoaded = false;
                if (!__isDefined(this._paginate)) {
                    this._paginate = !this.group()
                }
                this._isLastPage = !this._paginate
            },
            dispose: function() {
                this._store.off("push", this._onPushHandler);
                this._disposeEvents();
                clearTimeout(this._aggregationTimeoutId);
                delete this._store;
                if (this._delayedLoadTask) {
                    this._delayedLoadTask.abort()
                }
                this._operationManager.cancelAll();
                this._disposed = true
            },
            _extractLoadOptions: function(options) {
                var result = {},
                    names = ["sort", "filter", "select", "group", "requireTotalCount"],
                    customNames = this._store._customLoadOptions();
                if (customNames) {
                    names = names.concat(customNames)
                }
                iteratorUtils.each(names, function() {
                    result[this] = options[this]
                });
                return result
            },
            loadOptions: function() {
                return this._storeLoadOptions
            },
            items: function() {
                return this._items
            },
            pageIndex: function(newIndex) {
                if (!__isNumber(newIndex)) {
                    return this._pageIndex
                }
                this._pageIndex = newIndex;
                this._isLastPage = !this._paginate
            },
            paginate: function(value) {
                if (!__isBoolean(value)) {
                    return this._paginate
                }
                if (this._paginate !== value) {
                    this._paginate = value;
                    this.pageIndex(0)
                }
            },
            pageSize: function(value) {
                if (!__isNumber(value)) {
                    return this._pageSize
                }
                this._pageSize = value
            },
            isLastPage: function() {
                return this._isLastPage
            },
            sort: generateStoreLoadOptionAccessor("sort"),
            filter: function() {
                var newFilter = normalizeStoreLoadOptionAccessorArguments(arguments);
                if (void 0 === newFilter) {
                    return this._storeLoadOptions.filter
                }
                this._storeLoadOptions.filter = newFilter;
                this.pageIndex(0)
            },
            group: generateStoreLoadOptionAccessor("group"),
            select: generateStoreLoadOptionAccessor("select"),
            requireTotalCount: function(value) {
                if (!__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 (!__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() {
                return this._store && 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 queue.create()
            },
            _changeLoadingCount: function(increment) {
                var newLoading, oldLoading = this.isLoading();
                this._loadingCount += increment;
                newLoading = this.isLoading();
                if (oldLoading ^ newLoading) {
                    this.fireEvent("loadingChanged", [newLoading])
                }
            },
            _scheduleLoadCallbacks: function(deferred) {
                var that = this;
                that.beginLoading();
                deferred.always(function() {
                    that.endLoading()
                })
            },
            _scheduleFailCallbacks: function(deferred) {
                var that = this;
                deferred.fail(function() {
                    if (arguments[0] === CANCELED_TOKEN) {
                        return
                    }
                    that.fireEvent("loadError", arguments)
                })
            },
            _fireChanged: function(args) {
                var date = new Date;
                this.fireEvent("changed", args);
                this._changedTime = new Date - date
            },
            _scheduleChangedCallbacks: function(deferred) {
                var _this2 = this;
                deferred.done(function() {
                    _this2._fireChanged()
                })
            },
            loadSingle: function(propName, propValue) {
                var that = this;
                var d = new Deferred,
                    key = this.key(),
                    store = this._store,
                    options = this._createStoreLoadOptions(),
                    handleDone = function(data) {
                        if (!__isDefined(data) || array.isEmpty(data)) {
                            d.reject(new errors.Error("E4009"))
                        } else {
                            if (!Array.isArray(data)) {
                                data = [data]
                            }
                            d.resolve(that._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;

                function shouldForceByKey() {
                    return store instanceof CustomStore && !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 loadOperation, that = this,
                    d = new Deferred;

                function loadTask() {
                    if (that._disposed) {
                        return
                    }
                    if (!isPending(d)) {
                        return
                    }
                    return that._loadFromStore(loadOperation, d)
                }
                this._scheduleLoadCallbacks(d);
                this._scheduleFailCallbacks(d);
                this._scheduleChangedCallbacks(d);
                loadOperation = this._createLoadOperation(d);
                this.fireEvent("customizeStoreLoadOptions", [loadOperation]);
                this._loadQueue.add(function() {
                    if ("number" === typeof loadOperation.delay) {
                        that._delayedLoadTask = commonUtils.executeAsync(loadTask, loadOperation.delay)
                    } else {
                        loadTask()
                    }
                    return d.promise()
                });
                return d.promise({
                    operationId: loadOperation.operationId
                })
            },
            _onPush: function(changes) {
                if (this._reshapeOnPush) {
                    this.load()
                } else {
                    this.fireEvent("changing", [{
                        changes: changes
                    }]);
                    var group = this.group(),
                        items = this.items(),
                        groupLevel = 0,
                        dataSourceChanges = this.paginate() || group ? changes.filter(function(item) {
                            return "update" === item.type
                        }) : changes;
                    if (group) {
                        groupLevel = Array.isArray(group) ? group.length : 1
                    }
                    arrayUtils.applyBatch(this.store(), items, dataSourceChanges, groupLevel, true);
                    this._fireChanged([{
                        changes: changes
                    }])
                }
            },
            _createLoadOperation: function(deferred) {
                var id = this._operationManager.add(deferred),
                    options = this._createStoreLoadOptions();
                deferred.always(function() {
                    this._operationManager.remove(id)
                }.bind(this));
                return {
                    operationId: id,
                    storeLoadOptions: options
                }
            },
            reload: function() {
                var store = this.store();
                if (store instanceof CustomStore) {
                    store.clearRawDataCache()
                }
                this._init();
                return this.load()
            },
            cancel: function(operationId) {
                return this._operationManager.cancel(operationId)
            },
            _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 = 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,
                    op = this._searchOperation,
                    selector = this._searchExpr,
                    searchFilter = [];
                if (!value) {
                    return
                }
                if (!selector) {
                    selector = "this"
                }
                if (!Array.isArray(selector)) {
                    selector = [selector]
                }
                iteratorUtils.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 that = this;

                function handleSuccess(data, extra) {
                    function processResult() {
                        var loadResult;
                        if (data && !Array.isArray(data) && data.data) {
                            extra = data;
                            data = data.data
                        }
                        if (!Array.isArray(data)) {
                            data = [data]
                        }
                        loadResult = extend({
                            data: data,
                            extra: extra
                        }, loadOptions);
                        that.fireEvent("customizeLoadResult", [loadResult]);
                        when(loadResult.data).done(function(data) {
                            loadResult.data = data;
                            that._processStoreLoadResult(loadResult, pendingDeferred)
                        }).fail(pendingDeferred.reject)
                    }
                    if (that._disposed) {
                        return
                    }
                    if (!isPending(pendingDeferred)) {
                        return
                    }
                    processResult()
                }
                if (loadOptions.data) {
                    return (new Deferred).resolve(loadOptions.data).done(handleSuccess)
                }
                return this.store().load(loadOptions.storeLoadOptions).done(handleSuccess).fail(pendingDeferred.reject)
            },
            _processStoreLoadResult: function(loadResult, pendingDeferred) {
                var that = this,
                    data = loadResult.data,
                    extra = loadResult.extra,
                    storeLoadOptions = loadResult.storeLoadOptions;

                function resolvePendingDeferred() {
                    that._isLoaded = true;
                    that._totalCount = isFinite(extra.totalCount) ? extra.totalCount : -1;
                    return pendingDeferred.resolve(data, extra)
                }

                function proceedLoadingTotalCount() {
                    that.store().totalCount(storeLoadOptions).done(function(count) {
                        extra.totalCount = count;
                        resolvePendingDeferred()
                    }).fail(pendingDeferred.reject)
                }
                if (that._disposed) {
                    return
                }
                data = that._applyPostProcessFunction(that._applyMapFunction(data));
                if (!typeUtils.isPlainObject(extra)) {
                    extra = {}
                }
                that._items = data;
                if (!data.length || !that._paginate || that._pageSize && data.length < that._pageSize) {
                    that._isLastPage = true
                }
                if (storeLoadOptions.requireTotalCount && !isFinite(extra.totalCount)) {
                    proceedLoadingTotalCount()
                } else {
                    resolvePendingDeferred()
                }
            },
            _applyMapFunction: function(data) {
                if (this._mapFunc) {
                    return mapDataRespectingGrouping(data, this._mapFunc, this.group())
                }
                return data
            },
            _applyPostProcessFunction: function(data) {
                if (this._postProcessFunc) {
                    return this._postProcessFunc(data)
                }
                return data
            }
        }).include(EventsMixin);
        exports.DataSource = DataSource;
        exports.normalizeDataSourceOptions = normalizeDataSourceOptions
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/core/utils/object.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var typeUtils = __webpack_require__( /*! ./type */ 1),
            variableWrapper = __webpack_require__( /*! ./variable_wrapper */ 74);
        var clone = function() {
            function Clone() {}
            return function(obj) {
                Clone.prototype = obj;
                return new Clone
            }
        }();
        var orderEach = function(map, func) {
            var key, i, keys = [];
            for (key in map) {
                if (map.hasOwnProperty(key)) {
                    keys.push(key)
                }
            }
            keys.sort(function(x, y) {
                var isNumberX = typeUtils.isNumeric(x),
                    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, newValue;
            for (var name in changes) {
                prevValue = target[name];
                newValue = changes[name];
                if (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/core/utils/ready_callbacks.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var domAdapter = __webpack_require__( /*! ../dom_adapter */ 13);
        var injector = __webpack_require__( /*! ./dependency_injector */ 56);
        var windowUtils = __webpack_require__( /*! ./window */ 6);
        var callOnce = __webpack_require__( /*! ./call_once */ 73);
        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/core/events_mixin.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var DefaultEventsStrategy = __webpack_require__( /*! ./events_strategy */ 335),
            each = __webpack_require__( /*! ./utils/iterator */ 3).each,
            isPlainObject = __webpack_require__( /*! ./utils/type */ 1).isPlainObject;
        module.exports = {
            ctor: function() {
                this._events = {};
                this.setEventsStrategy(new DefaultEventsStrategy(this))
            },
            setEventsStrategy: function(strategy) {
                if ("function" === typeof strategy) {
                    strategy = strategy(this)
                }
                this._eventsStrategy = strategy
            },
            hasEvent: function(eventName) {
                return this._eventsStrategy.hasEvent(eventName)
            },
            fireEvent: function(eventName, eventArgs) {
                this._eventsStrategy.fireEvent(eventName, eventArgs);
                return this
            },
            on: function(eventName, eventHandler) {
                if (isPlainObject(eventName)) {
                    each(eventName, function(e, h) {
                        this.on(e, h)
                    }.bind(this))
                } else {
                    this._eventsStrategy.on(eventName, eventHandler)
                }
                return this
            },
            off: function(eventName, eventHandler) {
                this._eventsStrategy.off(eventName, eventHandler);
                return this
            },
            _disposeEvents: function() {
                this._eventsStrategy.dispose()
            }
        }
    },
    /*!******************************************!*\
      !*** ./artifacts/transpiled/ui/popup.js ***!
      \******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            window = __webpack_require__( /*! ../core/utils/window */ 6).getWindow(),
            translator = __webpack_require__( /*! ../animation/translator */ 24),
            camelize = __webpack_require__( /*! ../core/utils/inflector */ 34).camelize,
            noop = __webpack_require__( /*! ../core/utils/common */ 4).noop,
            getPublicElement = __webpack_require__( /*! ../core/utils/dom */ 12).getPublicElement,
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            isDefined = __webpack_require__( /*! ../core/utils/type */ 1).isDefined,
            inArray = __webpack_require__( /*! ../core/utils/array */ 11).inArray,
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            messageLocalization = __webpack_require__( /*! ../localization/message */ 14),
            devices = __webpack_require__( /*! ../core/devices */ 16),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            Button = __webpack_require__( /*! ./button */ 36),
            themes = __webpack_require__( /*! ./themes */ 20),
            Overlay = __webpack_require__( /*! ./overlay */ 64),
            EmptyTemplate = __webpack_require__( /*! ./widget/empty_template */ 93),
            domUtils = __webpack_require__( /*! ../core/utils/dom */ 12),
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6);
        __webpack_require__( /*! ./toolbar/ui.toolbar.base */ 294);
        var POPUP_CLASS = "dx-popup",
            POPUP_WRAPPER_CLASS = "dx-popup-wrapper",
            POPUP_FULL_SCREEN_CLASS = "dx-popup-fullscreen",
            POPUP_FULL_SCREEN_WIDTH_CLASS = "dx-popup-fullscreen-width",
            POPUP_NORMAL_CLASS = "dx-popup-normal",
            POPUP_CONTENT_CLASS = "dx-popup-content",
            POPUP_DRAGGABLE_CLASS = "dx-popup-draggable",
            POPUP_TITLE_CLASS = "dx-popup-title",
            POPUP_TITLE_CLOSEBUTTON_CLASS = "dx-closebutton",
            POPUP_BOTTOM_CLASS = "dx-popup-bottom",
            TEMPLATE_WRAPPER_CLASS = "dx-template-wrapper",
            ALLOWED_TOOLBAR_ITEM_ALIASES = ["cancel", "clear", "done"],
            BUTTON_DEFAULT_TYPE = "default",
            BUTTON_NORMAL_TYPE = "normal",
            BUTTON_TEXT_MODE = "text",
            BUTTON_CONTAINED_MODE = "contained";
        var getButtonPlace = function(name) {
            var device = devices.current(),
                platform = device.platform,
                toolbar = "bottom",
                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 ("win" === platform) {
                    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 = Overlay.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    fullScreen: false,
                    title: "",
                    showTitle: true,
                    titleTemplate: "title",
                    onTitleRendered: null,
                    dragEnabled: false,
                    toolbarItems: [],
                    showCloseButton: false,
                    bottomTemplate: "bottom",
                    useDefaultToolbarButtons: false,
                    useFlatToolbarButtons: false
                })
            },
            _defaultOptionsRules: function() {
                var themeName = themes.current();
                return this.callBase().concat([{
                    device: function(_device) {
                        return _device.phone && themes.isWin8(themeName)
                    },
                    options: {
                        position: {
                            my: "top center",
                            at: "top center",
                            offset: "0 0"
                        }
                    }
                }, {
                    device: {
                        platform: "ios"
                    },
                    options: {
                        animation: this._iosAnimation
                    }
                }, {
                    device: {
                        platform: "android"
                    },
                    options: {
                        animation: this._androidAnimation
                    }
                }, {
                    device: {
                        platform: "generic"
                    },
                    options: {
                        showCloseButton: true
                    }
                }, {
                    device: function(_device2) {
                        return "generic" === devices.real().platform && "generic" === _device2.platform
                    },
                    options: {
                        dragEnabled: true
                    }
                }, {
                    device: function() {
                        return "desktop" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }, {
                    device: function() {
                        return themes.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
                            }
                        }
                    },
                    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($("<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._defaultTemplates.title = new EmptyTemplate(this);
                this._defaultTemplates.bottom = new EmptyTemplate(this)
            },
            _renderContentImpl: function() {
                this.callBase();
                this._renderTitle();
                this._renderBottom()
            },
            _renderTitle: function() {
                var items = this._getToolbarItems("top"),
                    titleText = this.option("title"),
                    showTitle = this.option("showTitle");
                if (showTitle && !!titleText) {
                    items.unshift({
                        location: devices.current().ios ? "center" : "before",
                        text: titleText
                    })
                }
                if (showTitle || items.length > 0) {
                    this._$title && this._$title.remove();
                    var $title = $("<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),
                    toolbarTemplate = template instanceof EmptyTemplate;
                if (toolbarTemplate) {
                    var toolbarOptions = extend(additionalToolbarOptions, {
                        items: data,
                        rtlEnabled: this.option("rtlEnabled"),
                        useDefaultButtons: this.option("useDefaultToolbarButtons"),
                        useFlatButtons: this.option("useFlatToolbarButtons")
                    });
                    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 = $(template.render({
                        container: getPublicElement($container)
                    }));
                    if ($result.hasClass(TEMPLATE_WRAPPER_CLASS)) {
                        $container.replaceWith($result);
                        $container = $result
                    }
                    return $container
                }
            },
            _executeTitleRenderAction: function($titleElement) {
                this._getTitleRenderAction()({
                    titleElement: getPublicElement($titleElement)
                })
            },
            _getTitleRenderAction: function() {
                return this._titleRenderAction || this._createTitleRenderAction()
            },
            _createTitleRenderAction: function() {
                return this._titleRenderAction = this._createActionByOption("onTitleRendered", {
                    element: this.element(),
                    excludeValidators: ["designMode", "disabled", "readOnly"]
                })
            },
            _getCloseButton: function() {
                return {
                    toolbar: "top",
                    location: "after",
                    template: this._getCloseButtonRenderer()
                }
            },
            _getCloseButtonRenderer: function() {
                return function(_, __, container) {
                    var $button = $("<div>").addClass(POPUP_TITLE_CLOSEBUTTON_CLASS);
                    this._createComponent($button, Button, {
                        icon: "close",
                        onClick: this._createToolbarItemAction(void 0),
                        integrationOptions: {}
                    });
                    $(container).append($button)
                }.bind(this)
            },
            _getToolbarItems: function(toolbar) {
                var toolbarItems = this.option("toolbarItems");
                var toolbarsItems = [];
                this._toolbarItemClasses = [];
                var currentPlatform = devices.current().platform,
                    index = 0;
                each(toolbarItems, function(_, data) {
                    var isShortcut = isDefined(data.shortcut),
                        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) {
                            extend(item, {
                                location: data.location
                            }, this._getToolbarItemByAlias(data))
                        }
                        var isLTROrder = "win" === currentPlatform || "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
            },
            _getToolbarItemByAlias: function(data) {
                var that = this,
                    itemType = data.shortcut;
                if (inArray(itemType, ALLOWED_TOOLBAR_ITEM_ALIASES) < 0) {
                    return false
                }
                var itemConfig = extend({
                    text: messageLocalization.format(camelize(itemType, true)),
                    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 = $("<div>").addClass(itemClass).appendTo(container);
                        that._createComponent($toolbarItem, Button, 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 = $("<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;
                each(aliases, function(_, alias) {
                    var className = POPUP_CLASS + "-" + alias;
                    if (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))
            },
            _getDragTarget: function() {
                return this._$title
            },
            _renderGeometryImpl: function() {
                this._resetContentHeight();
                this.callBase.apply(this, arguments);
                this._setContentHeight()
            },
            _resetContentHeight: function() {
                this._$popupContent.css({
                    height: "auto"
                })
            },
            _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") || noop)();
                if (this._disallowUpdateContentHeight()) {
                    return
                }
                var contentPaddings = this._$content.outerHeight() - this._$content.height(),
                    contentHeight = this._$content.get(0).getBoundingClientRect().height - contentPaddings;
                if (this._$title && this._$title.is(":visible")) {
                    contentHeight -= this._$title.get(0).getBoundingClientRect().height || 0
                }
                if (this._$bottom && this._$bottom.is(":visible")) {
                    contentHeight -= this._$bottom.get(0).getBoundingClientRect().height || 0
                }
                this._$popupContent.css("height", contentHeight < 0 ? 0 : contentHeight)
            },
            _disallowUpdateContentHeight: function() {
                var isHeightAuto = "auto" === this._$content.get(0).style.height,
                    maxHeightSpecified = "none" !== this._$content.css("maxHeight"),
                    minHeightSpecified = parseInt(this._$content.css("minHeight")) > 0;
                return isHeightAuto && !(maxHeightSpecified || minHeightSpecified)
            },
            _renderDimensions: function() {
                if (this.option("fullScreen")) {
                    this._$content.css({
                        width: "100%",
                        height: "100%"
                    })
                } else {
                    this.callBase.apply(this, arguments)
                }
                if (windowUtils.hasWindow()) {
                    this._renderFullscreenWidthClass()
                }
            },
            _renderFullscreenWidthClass: function() {
                this.overlayContent().toggleClass(POPUP_FULL_SCREEN_WIDTH_CLASS, this.overlayContent().outerWidth() === $(window).width())
            },
            _renderShadingDimensions: function() {
                if (this.option("fullScreen")) {
                    this._wrapper().css({
                        width: "100%",
                        height: "100%"
                    })
                } else {
                    this.callBase.apply(this, arguments)
                }
            },
            refreshPosition: function() {
                this._renderPosition()
            },
            _renderPosition: function() {
                if (this.option("fullScreen")) {
                    translator.move(this._$content, {
                        top: 0,
                        left: 0
                    })
                } else {
                    (this.option("forceApplyBindings") || 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 isPartialUpdate = args.fullName.search(".options") !== -1;
                        this._renderTitle();
                        this._renderBottom();
                        if (!isPartialUpdate) {
                            this._renderGeometry()
                        }
                        break;
                    case "dragEnabled":
                        this._renderDrag();
                        break;
                    case "fullScreen":
                        this._toggleFullScreenClass(args.value);
                        this._renderGeometry();
                        domUtils.triggerResizeEvent(this._$content);
                        break;
                    case "showCloseButton":
                        this._renderTitle();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            bottomToolbar: function() {
                return this._$bottom
            },
            $content: function() {
                return this._$popupContent
            },
            content: function() {
                return getPublicElement(this._$popupContent)
            },
            overlayContent: function() {
                return this._$content
            }
        });
        registerComponent("dxPopup", Popup);
        module.exports = Popup
    },
    /*!****************************************************************!*\
      !*** ./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,
                isFunction = __webpack_require__( /*! ./type */ 1).isFunction,
                each = __webpack_require__( /*! ./iterator */ 3).each,
                Class = __webpack_require__( /*! ../class */ 10);
            var BaseClass = Class.inherit(object),
                InjectedClass = BaseClass,
                instance = new InjectedClass(object),
                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
        }
    },
    /*!***************************************************************!*\
      !*** ./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 _quill = __webpack_require__( /*! quill */ 533);
        var _quill2 = _interopRequireDefault(_quill);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 6);

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

        function getQuill() {
            var window = (0, _window.getWindow)();
            var quill = window && window.Quill || _quill2.default;
            if (!quill) {
                throw _ui2.default.Error("E1041", "Quill")
            }
            return quill
        }
        exports.getQuill = getQuill
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/ui/widget/selectors.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13);
        var _focusable = function(element, tabIndex) {
            if (!visible(element)) {
                return false
            }
            var nodeName = element.nodeName.toLowerCase(),
                isTabIndexNotNaN = !isNaN(tabIndex),
                isDisabled = element.disabled,
                isDefaultFocus = /^(input|select|textarea|button|object|iframe)$/.test(nodeName),
                isHyperlink = "a" === nodeName,
                isFocusable = true,
                isContentEditable = element.isContentEditable;
            if (isDefaultFocus || isContentEditable) {
                isFocusable = !isDisabled
            } else {
                if (isHyperlink) {
                    isFocusable = element.href || isTabIndexNotNaN
                } else {
                    isFocusable = isTabIndexNotNaN
                }
            }
            return isFocusable
        };
        var visible = function(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/dom_component.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6),
            extend = __webpack_require__( /*! ./utils/extend */ 0).extend,
            config = __webpack_require__( /*! ./config */ 25),
            errors = __webpack_require__( /*! ./errors */ 19),
            getPublicElement = __webpack_require__( /*! ../core/utils/dom */ 12).getPublicElement,
            windowResizeCallbacks = __webpack_require__( /*! ../core/utils/resize_callbacks */ 133),
            commonUtils = __webpack_require__( /*! ./utils/common */ 4),
            each = __webpack_require__( /*! ./utils/iterator */ 3).each,
            typeUtils = __webpack_require__( /*! ./utils/type */ 1),
            inArray = __webpack_require__( /*! ./utils/array */ 11).inArray,
            publicComponentUtils = __webpack_require__( /*! ./utils/public_component */ 107),
            dataUtils = __webpack_require__( /*! ./element_data */ 37),
            Component = __webpack_require__( /*! ./component */ 128),
            abstract = Component.abstract;
        var RTL_DIRECTION_CLASS = "dx-rtl",
            VISIBILITY_CHANGE_CLASS = "dx-visibility-change-handler",
            VISIBILITY_CHANGE_EVENTNAMESPACE = "VisibilityChange";
        var DOMComponent = Component.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    width: void 0,
                    height: void 0,
                    rtlEnabled: config().rtlEnabled,
                    elementAttr: {},
                    disabled: false,
                    integrationOptions: {}
                })
            },
            ctor: function(element, options) {
                this._$element = $(element);
                publicComponentUtils.attachInstanceToElement(this._$element, this, this._dispose);
                this.callBase(options)
            },
            _visibilityChanged: abstract,
            _dimensionChanged: abstract,
            _init: function() {
                this.callBase();
                this._attachWindowResizeCallback()
            },
            _setOptionsByDevice: function(instanceCustomRules) {
                this.callBase([].concat(this.constructor._classCustomRules || [], instanceCustomRules || []))
            },
            _isInitialOptionValue: function(name) {
                var isCustomOption = this.constructor._classCustomRules && this._convertRulesToOptions(this.constructor._classCustomRules).hasOwnProperty(name);
                return !isCustomOption && this.callBase(name)
            },
            _attachWindowResizeCallback: function() {
                if (this._isDimensionChangeSupported()) {
                    var windowResizeCallBack = this._windowResizeCallBack = this._dimensionChanged.bind(this);
                    windowResizeCallbacks.add(windowResizeCallBack)
                }
            },
            _isDimensionChangeSupported: function() {
                return this._dimensionChanged !== abstract
            },
            _renderComponent: function() {
                this._initMarkup();
                if (windowUtils.hasWindow()) {
                    this._render()
                }
            },
            _initMarkup: function() {
                this._renderElementAttributes();
                this._toggleRTLDirection(this.option("rtlEnabled"));
                this._renderVisibilityChange();
                this._renderDimensions()
            },
            _render: function() {
                this._attachVisibilityChangeHandlers()
            },
            _renderElementAttributes: function() {
                var attributes = extend({}, this.option("elementAttr")),
                    classNames = attributes.class;
                delete attributes.class;
                this.$element().attr(attributes).addClass(classNames)
            },
            _renderVisibilityChange: function() {
                if (this._isDimensionChangeSupported()) {
                    this._attachDimensionChangeHandlers()
                }
                if (!this._isVisibilityChangeSupported()) {
                    return
                }
                this.$element().addClass(VISIBILITY_CHANGE_CLASS)
            },
            _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: width,
                        height: height
                    })
                }
            },
            _isCssUpdateRequired: function(element, height, width) {
                return !!(width || height || element.style.width || element.style.height)
            },
            _attachDimensionChangeHandlers: function() {
                var that = this;
                var resizeEventName = "dxresize." + this.NAME + VISIBILITY_CHANGE_EVENTNAMESPACE;
                eventsEngine.off(that.$element(), resizeEventName);
                eventsEngine.on(that.$element(), resizeEventName, function() {
                    that._dimensionChanged()
                })
            },
            _attachVisibilityChangeHandlers: function() {
                if (!this._isVisibilityChangeSupported()) {
                    return
                }
                var that = this;
                var hidingEventName = "dxhiding." + this.NAME + VISIBILITY_CHANGE_EVENTNAMESPACE;
                var shownEventName = "dxshown." + this.NAME + VISIBILITY_CHANGE_EVENTNAMESPACE;
                that._isHidden = !that._isVisible();
                eventsEngine.off(that.$element(), hidingEventName);
                eventsEngine.on(that.$element(), hidingEventName, function() {
                    that._checkVisibilityChanged("hiding")
                });
                eventsEngine.off(that.$element(), shownEventName);
                eventsEngine.on(that.$element(), shownEventName, function() {
                    that._checkVisibilityChanged("shown")
                })
            },
            _isVisible: function() {
                return this.$element().is(":visible")
            },
            _checkVisibilityChanged: function(event) {
                if ("hiding" === event && this._isVisible() && !this._isHidden) {
                    this._visibilityChanged(false);
                    this._isHidden = true
                } else {
                    if ("shown" === event && this._isVisible() && this._isHidden) {
                        this._isHidden = false;
                        this._visibilityChanged(true)
                    }
                }
            },
            _isVisibilityChangeSupported: function() {
                return this._visibilityChanged !== abstract && windowUtils.hasWindow()
            },
            _clean: commonUtils.noop,
            _modelByElement: function() {
                var modelByElement = this.option("modelByElement") || commonUtils.noop;
                return modelByElement(this.$element())
            },
            _invalidate: function() {
                if (!this._updateLockCount) {
                    throw errors.Error("E0007")
                }
                this._requireRefresh = true
            },
            _refresh: function() {
                this._clean();
                this._renderComponent()
            },
            _dispose: function() {
                this.callBase();
                this._clean();
                this._detachWindowResizeCallback()
            },
            _detachWindowResizeCallback: function() {
                if (this._isDimensionChangeSupported()) {
                    windowResizeCallbacks.remove(this._windowResizeCallBack)
                }
            },
            _toggleRTLDirection: function(rtl) {
                this.$element().toggleClass(RTL_DIRECTION_CLASS, rtl)
            },
            _createComponent: function(element, component, config) {
                var that = this;
                config = config || {};
                var synchronizableOptions = commonUtils.grep(["rtlEnabled", "disabled"], function(value) {
                    return !(value in config)
                });
                var nestedComponentOptions = that.option("nestedComponentOptions") || commonUtils.noop;
                that._extendConfig(config, extend({
                    integrationOptions: this.option("integrationOptions"),
                    rtlEnabled: this.option("rtlEnabled"),
                    disabled: this.option("disabled")
                }, nestedComponentOptions(this)));
                var instance;
                if (typeUtils.isString(component)) {
                    var $element = $(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(args) {
                        if (inArray(args.name, synchronizableOptions) >= 0) {
                            instance.option(args.name, args.value)
                        }
                    };
                    that.on("optionChanged", optionChangedHandler);
                    instance.on("disposing", function() {
                        that.off("optionChanged", optionChangedHandler)
                    })
                }
                return instance
            },
            _extendConfig: function(config, extendConfig) {
                each(extendConfig, function(key, value) {
                    config[key] = config.hasOwnProperty(key) ? config[key] : value
                })
            },
            _defaultActionConfig: function() {
                return extend(this.callBase(), {
                    context: this._modelByElement(this.$element())
                })
            },
            _defaultActionArgs: function() {
                var model = this._modelByElement(this.$element());
                return extend(this.callBase(), {
                    element: this.element(),
                    model: model
                })
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "width":
                    case "height":
                        this._renderDimensions();
                        break;
                    case "rtlEnabled":
                    case "elementAttr":
                        this._invalidate();
                        break;
                    case "disabled":
                    case "integrationOptions":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _removeAttributes: function(element) {
                var i = element.attributes.length - 1;
                for (; i >= 0; i--) {
                    var attribute = element.attributes[i];
                    if (!attribute) {
                        return
                    }
                    var attributeName = attribute.name;
                    if (0 === attributeName.indexOf("aria-") || attributeName.indexOf("dx-") !== -1 || "role" === attributeName || "style" === attributeName || "tabindex" === attributeName) {
                        element.removeAttribute(attributeName)
                    }
                }
            },
            _removeClasses: function(element) {
                var classes = element.className.split(" ").filter(function(cssClass) {
                    return 0 !== cssClass.lastIndexOf("dx-", 0)
                });
                element.className = classes.join(" ")
            },
            endUpdate: function() {
                var requireRender = !this._initializing && !this._initialized;
                this.callBase.apply(this, arguments);
                if (!this._updateLockCount) {
                    if (requireRender) {
                        this._renderComponent()
                    } else {
                        if (this._requireRefresh) {
                            this._requireRefresh = false;
                            this._refresh()
                        }
                    }
                }
            },
            $element: function() {
                return this._$element
            },
            element: function() {
                return getPublicElement(this.$element())
            },
            dispose: function() {
                var element = this.$element().get(0);
                dataUtils.cleanDataRecursive(element, true);
                element.textContent = "";
                this._removeAttributes(element);
                this._removeClasses(element)
            }
        });
        DOMComponent.getInstance = function(element) {
            return publicComponentUtils.getInstanceByElement($(element), this)
        };
        DOMComponent.defaultOptions = function(rule) {
            this._classCustomRules = this._classCustomRules || [];
            this._classCustomRules.push(rule)
        };
        module.exports = DOMComponent
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/ui/widget/bindable_template.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            TemplateBase = __webpack_require__( /*! ./ui.template_base */ 71),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            removeEvent = __webpack_require__( /*! ../../core/remove_event */ 135),
            iteratorUtils = __webpack_require__( /*! ../../core/utils/iterator */ 3),
            isPrimitive = __webpack_require__( /*! ../../core/utils/type */ 1).isPrimitive;
        var watchChanges = function() {
            var start = function(rawData, watchMethod, fields, fieldsMap, callback) {
                var globalDispose, fieldsDispose;
                globalDispose = globalWatch(rawData, watchMethod, function(dataWithRawFields) {
                    fieldsDispose && fieldsDispose();
                    if (isPrimitive(dataWithRawFields)) {
                        callback(dataWithRawFields);
                        return
                    }
                    fieldsDispose = fieldsWatch(dataWithRawFields, watchMethod, fields, fieldsMap, function(data) {
                        callback(data)
                    })
                });
                return function() {
                    fieldsDispose && fieldsDispose();
                    globalDispose && globalDispose()
                }
            };
            var globalWatch = function(data, watchMethod, callback) {
                return watchMethod(function() {
                    return data
                }, callback)
            };
            var fieldsWatch = function(data, watchMethod, fields, fieldsMap, callback) {
                var resolvedData = {},
                    missedFields = fields.slice();
                var watchHandlers = iteratorUtils.map(fields, 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() {
                    iteratorUtils.each(watchHandlers, function(_, dispose) {
                        dispose()
                    })
                }
            };
            return start
        }();
        module.exports = TemplateBase.inherit({
            ctor: function(render, fields, watchMethod, fieldsMap) {
                this._render = render;
                this._fields = fields;
                this._fieldsMap = fieldsMap || {};
                this._watchMethod = watchMethod
            },
            _renderCore: function(options) {
                var $container = $(options.container);
                var dispose = watchChanges(options.model, this._watchMethod, this._fields, this._fieldsMap, function(data) {
                    $container.empty();
                    this._render($container, data, options.model)
                }.bind(this));
                eventsEngine.on($container, removeEvent, dispose);
                return $container.contents()
            }
        })
    },
    /*!****************************!*\
      !*** external "window.ko" ***!
      \****************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports) {
        module.exports = window.ko
    },
    /*!****************************************************!*\
      !*** ./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),
                    yItem = parseInt(y[i] || 0, 10);
                if (xItem < yItem) {
                    return -1
                }
                if (xItem > yItem) {
                    return 1
                }
            }
            return 0
        }
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/core/utils/date_serialization.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var config = __webpack_require__( /*! ../config */ 25),
            getLDMLFormatter = __webpack_require__( /*! ../../localization/ldml/date.formatter */ 236).getFormatter,
            defaultDateNames = __webpack_require__( /*! ../../localization/default_date_names */ 237),
            typeUtils = __webpack_require__( /*! ./type */ 1),
            isString = typeUtils.isString,
            isDate = typeUtils.isDate,
            isNumber = typeUtils.isNumeric;
        var NUMBER_SERIALIZATION_FORMAT = "number",
            DATE_SERIALIZATION_FORMAT = "yyyy/MM/dd",
            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
        };
        var parseISO8601String = function(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],
                month = --parts[3],
                day = parts[5],
                timeZoneHour = 0,
                timeZoneMinute = 0;
            timeZoneHour = timePart(parts[14]);
            timeZoneMinute = timePart(parts[16]);
            if ("-" === parts[13]) {
                timeZoneHour = -timeZoneHour;
                timeZoneMinute = -timeZoneMinute
            }
            var hour = timePart(parts[6]) - timeZoneHour,
                minute = timePart(parts[8]) - timeZoneMinute,
                second = timePart(parts[10]),
                parseMilliseconds = function(part) {
                    part = part || "";
                    return timePart(part) * Math.pow(10, MILLISECOND_LENGHT - part.length)
                },
                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),
                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
        }
    },
    /*!********************************************!*\
      !*** ./artifacts/transpiled/ui/overlay.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _typeof = "function" === typeof Symbol && "symbol" === typeof Symbol.iterator ? function(obj) {
            return typeof obj
        } : function(obj) {
            return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
        };
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 13),
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6),
            ready = __webpack_require__( /*! ../core/utils/ready_callbacks */ 52).add,
            window = windowUtils.getWindow(),
            navigator = windowUtils.getNavigator(),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            fx = __webpack_require__( /*! ../animation/fx */ 31),
            translator = __webpack_require__( /*! ../animation/translator */ 24),
            compareVersions = __webpack_require__( /*! ../core/utils/version */ 62).compare,
            viewPortUtils = __webpack_require__( /*! ../core/utils/view_port */ 66),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            inArray = __webpack_require__( /*! ../core/utils/array */ 11).inArray,
            getPublicElement = __webpack_require__( /*! ../core/utils/dom */ 12).getPublicElement,
            viewPortChanged = viewPortUtils.changeCallback,
            hideTopOverlayCallback = __webpack_require__( /*! ../mobile/hide_top_overlay */ 137).hideCallback,
            positionUtils = __webpack_require__( /*! ../animation/position */ 78),
            fitIntoRange = __webpack_require__( /*! ../core/utils/math */ 30).fitIntoRange,
            domUtils = __webpack_require__( /*! ../core/utils/dom */ 12),
            noop = __webpack_require__( /*! ../core/utils/common */ 4).noop,
            typeUtils = __webpack_require__( /*! ../core/utils/type */ 1),
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            devices = __webpack_require__( /*! ../core/devices */ 16),
            browser = __webpack_require__( /*! ../core/utils/browser */ 38),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            Widget = __webpack_require__( /*! ./widget/ui.widget */ 28),
            KeyboardProcessor = __webpack_require__( /*! ./widget/ui.keyboard_processor */ 168),
            selectors = __webpack_require__( /*! ./widget/selectors */ 58),
            dragEvents = __webpack_require__( /*! ../events/drag */ 65),
            eventUtils = __webpack_require__( /*! ../events/utils */ 9),
            pointerEvents = __webpack_require__( /*! ../events/pointer */ 27),
            Resizable = __webpack_require__( /*! ./resizable */ 208),
            EmptyTemplate = __webpack_require__( /*! ./widget/empty_template */ 93),
            Deferred = __webpack_require__( /*! ../core/utils/deferred */ 7).Deferred,
            getSwatchContainer = __webpack_require__( /*! ./widget/swatch_container */ 210);
        var OVERLAY_CLASS = "dx-overlay",
            OVERLAY_WRAPPER_CLASS = "dx-overlay-wrapper",
            OVERLAY_CONTENT_CLASS = "dx-overlay-content",
            OVERLAY_SHADER_CLASS = "dx-overlay-shader",
            OVERLAY_MODAL_CLASS = "dx-overlay-modal",
            INVISIBLE_STATE_CLASS = "dx-state-invisible",
            ANONYMOUS_TEMPLATE_NAME = "content",
            RTL_DIRECTION_CLASS = "dx-rtl",
            ACTIONS = ["onShowing", "onShown", "onHiding", "onHidden", "onPositioning", "onPositioned", "onResizeStart", "onResize", "onResizeEnd"],
            FIRST_Z_INDEX = 1500,
            OVERLAY_STACK = [],
            DISABLED_STATE_CLASS = "dx-state-disabled",
            TAB_KEY = 9,
            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(),
            realVersion = realDevice.version,
            firefoxDesktop = browser.mozilla && "desktop" === realDevice.deviceType,
            iOS = "ios" === realDevice.platform,
            iOS7_0andBelow = iOS && compareVersions(realVersion, [7, 1]) < 0,
            android4_0nativeBrowser = "android" === realDevice.platform && 0 === compareVersions(realVersion, [4, 0], 2) && navigator.userAgent.indexOf("Chrome") === -1;
        var forceRepaint = function($element) {
            if (iOS7_0andBelow || firefoxDesktop) {
                $element.width()
            }
            if (android4_0nativeBrowser) {
                var $parents = $element.parents(),
                    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,
                    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,
                    closeOnBackButton: true,
                    onShowing: null,
                    onShown: null,
                    onHiding: null,
                    onHidden: null,
                    contentTemplate: "content",
                    dragEnabled: false,
                    resizeEnabled: false,
                    onResizeStart: null,
                    onResize: null,
                    onResizeEnd: null,
                    target: void 0,
                    container: void 0,
                    hideTopOverlayHandler: void 0,
                    closeOnTargetScroll: false,
                    onPositioned: null,
                    boundaryOffset: {
                        h: 0,
                        v: 0
                    },
                    propagateOutsideClick: false,
                    _checkParentVisibility: true
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        var realDevice = devices.real(),
                            realPlatform = realDevice.platform,
                            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
                })
            },
            _getAnonymousTemplateName: function() {
                return ANONYMOUS_TEMPLATE_NAME
            },
            _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);
                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)
            },
            _initOptions: function(options) {
                this._initTarget(options.target);
                this._initContainer(options.container);
                this._initHideTopOverlayHandler(options.hideTopOverlayHandler);
                this.callBase(options)
            },
            _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 = void 0 !== handler ? handler : this._defaultHideTopOverlayHandler.bind(this)
            },
            _defaultHideTopOverlayHandler: function() {
                this.hide()
            },
            _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,
                    isAttachedTarget = $(window.document).is(e.target) || domUtils.contains(window.document, e.target),
                    outsideClick = isAttachedTarget && !($container.is(e.target) || domUtils.contains($container.get(0), e.target));
                if (outsideClick && closeOnOutsideClick) {
                    if (this.option("shading")) {
                        e.preventDefault()
                    }
                    this.hide()
                }
                return this.option("propagateOutsideClick")
            },
            _initTemplates: function() {
                this.callBase();
                this._defaultTemplates.content = new EmptyTemplate(this)
            },
            _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 FIRST_Z_INDEX
            },
            _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,
                    deferred = new Deferred;
                this._parentHidden = this._isParentHidden();
                deferred.done(function() {
                    delete that._parentHidden
                });
                if (this._parentHidden) {
                    return deferred.resolve()
                }
                if (this._currentVisible) {
                    return (new Deferred).resolve().promise()
                }
                this._currentVisible = true;
                this._normalizePosition();
                var animation = that._getAnimationConfig() || {},
                    showAnimation = this._normalizeAnimation(animation.show, "to"),
                    startShowAnimation = showAnimation && showAnimation.start || noop,
                    completeShowAnimation = showAnimation && showAnimation.complete || noop;
                if (this._isHidingActionCanceled) {
                    delete this._isHidingActionCanceled;
                    deferred.resolve()
                } else {
                    var show = function() {
                        this._renderVisibility(true);
                        this._animate(showAnimation, function() {
                            if (that.option("focusStateEnabled")) {
                                eventsEngine.trigger(that._focusTarget(), "focus")
                            }
                            completeShowAnimation.apply(this, arguments);
                            that._showAnimationProcessing = false;
                            that._actions.onShown();
                            deferred.resolve()
                        }, function() {
                            startShowAnimation.apply(this, arguments);
                            that._showAnimationProcessing = true
                        })
                    }.bind(this);
                    if (this.option("templatesRenderAsynchronously")) {
                        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,
                    deferred = new Deferred,
                    animation = that._getAnimationConfig() || {},
                    hideAnimation = this._normalizeAnimation(animation.hide, "from"),
                    startHideAnimation = hideAnimation && hideAnimation.start || noop,
                    completeHideAnimation = hideAnimation && hideAnimation.complete || noop,
                    hidingArgs = {
                        cancel: false
                    };
                this._actions.onHiding(hidingArgs);
                if (hidingArgs.cancel) {
                    this._isHidingActionCanceled = true;
                    this.option("visible", true);
                    deferred.resolve()
                } else {
                    this._forceFocusLost();
                    this._toggleShading(false);
                    this._toggleSubscriptions(false);
                    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();
                activeElement && this._$content.find(activeElement).length && activeElement.blur()
            },
            _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();
                clearTimeout(this._asyncShowTimeout);
                if (!visible) {
                    domUtils.triggerHidingEvent(this._$content)
                }
                this._toggleVisibility(visible);
                this._$content.toggleClass(INVISIBLE_STATE_CLASS, !visible);
                this._updateZIndexStackPosition(visible);
                if (visible) {
                    this._renderContent();
                    this._actions.onShowing();
                    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(),
                    index = inArray(this, overlayStack);
                if (pushToStack) {
                    if (index === -1) {
                        var length = overlayStack.length;
                        this._zIndex = (length ? overlayStack[length - 1]._zIndex : this._zIndexInitValue()) + 1;
                        overlayStack.push(this)
                    }
                    this._$wrapper.css("zIndex", this._zIndex);
                    this._$content.css("zIndex", this._zIndex)
                } else {
                    if (index !== -1) {
                        overlayStack.splice(index, 1)
                    }
                }
            },
            _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 (e.keyCode !== TAB_KEY || !this._isTopOverlay()) {
                    return
                }
                var tabbableElements = this._findTabbableBounds(),
                    $firstTabbable = tabbableElements.first,
                    $lastTabbable = tabbableElements.last,
                    isTabOnLast = !e.shiftKey && e.target === $lastTabbable.get(0),
                    isShiftTabOnFirst = e.shiftKey && e.target === $firstTabbable.get(0),
                    isEmptyTabList = 0 === tabbableElements.length,
                    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 && this.option("closeOnBackButton")) {
                    hideTopOverlayCallback.add(this._hideTopOverlayHandler)
                } else {
                    hideTopOverlayCallback.remove(this._hideTopOverlayHandler)
                }
            },
            _toggleParentsScrollSubscription: function(subscribe) {
                if (!this._position) {
                    return
                }
                var target = this._position.of || $(),
                    closeOnScroll = this.option("closeOnTargetScroll"),
                    $parents = getElement(target).parents(),
                    scrollEvent = eventUtils.addNamespace("scroll", this.NAME);
                if ("generic" === devices.real().platform) {
                    $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,
                    closeOnScroll = this.option("closeOnTargetScroll");
                if (typeUtils.isFunction(closeOnScroll)) {
                    closeHandled = closeOnScroll(e)
                }
                if (!closeHandled && !this._showAnimationProcessing) {
                    this.hide()
                }
            },
            _render: function() {
                this.callBase();
                this._$content.appendTo(this.$element());
                this._renderVisibilityAnimate(this.option("visible"))
            },
            _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.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 $element = this.$element();
                this._$content.appendTo($element);
                var contentTemplateOption = this.option("contentTemplate"),
                    contentTemplate = this._getTemplate(contentTemplateOption),
                    transclude = this._getAnonymousTemplateName() === contentTemplateOption;
                contentTemplate && contentTemplate.render({
                    container: getPublicElement(this.$content()),
                    noModel: true,
                    transclude: transclude
                });
                this._renderDrag();
                this._renderResize();
                this._renderScrollTerminator()
            },
            _renderDrag: function() {
                var $dragTarget = this._getDragTarget();
                if (!$dragTarget) {
                    return
                }
                var startEventName = eventUtils.addNamespace(dragEvents.start, this.NAME),
                    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"),
                    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: noop,
                    _clearSelection: noop,
                    isNative: true
                }, function(e) {
                    var originalEvent = e.originalEvent.originalEvent;
                    e._cancelPreventDefault = true;
                    if (originalEvent && "mousemove" !== originalEvent.type) {
                        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"),
                    $container = !isContainerDefined ? $(window) : this._$container;
                return $container
            },
            _deltaSize: function() {
                var $content = this._$content,
                    $container = this._getDragResizeContainer();
                var contentWidth = $content.outerWidth(),
                    contentHeight = $content.outerHeight(),
                    containerWidth = $container.outerWidth(),
                    containerHeight = $container.outerHeight();
                if (this._isWindow($container)) {
                    var document = domAdapter.getDocument(),
                        fullPageHeight = Math.max($(document).outerHeight(), containerHeight),
                        fullPageWidth = Math.max($(document).outerWidth(), containerWidth);
                    containerHeight = fullPageHeight;
                    containerWidth = fullPageWidth
                }
                return {
                    width: containerWidth - contentWidth,
                    height: containerHeight - contentHeight
                }
            },
            _dragUpdateHandler: function(e) {
                var offset = e.offset,
                    prevOffset = this._prevOffset,
                    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),
                    deltaSize = this._deltaSize(),
                    isAllowedDrag = deltaSize.height >= 0 && deltaSize.width >= 0,
                    shaderOffset = this.option("shading") && !this.option("container") && !this._isWindow(this._getContainer()) ? translator.locate(this._$wrapper) : {
                        top: 0,
                        left: 0
                    },
                    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
                }
            },
            _fireContentReadyAction: function() {
                if (this.option("visible")) {
                    this._moveToContainer()
                }
                this.callBase.apply(this, arguments)
            },
            _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 : getSwatchContainer($element);
                if (renderContainer[0] === $element.parent()[0]) {
                    renderContainer = $element
                }
                this._$wrapper.appendTo(renderContainer)
            },
            _renderGeometry: function() {
                if (this.option("visible") && windowUtils.hasWindow()) {
                    this._renderGeometryImpl()
                }
            },
            _renderGeometryImpl: function() {
                this._stopAnimation();
                this._normalizePosition();
                this._renderShading();
                this._renderDimensions();
                var resultPosition = this._renderPosition();
                this._actions.onPositioned({
                    position: resultPosition
                })
            },
            _renderShading: function() {
                var $wrapper = this._$wrapper,
                    $container = this._getContainer();
                $wrapper.css("position", this._isWindow($container) && !iOS ? "fixed" : "absolute");
                this._renderShadingDimensions();
                this._renderShadingPosition()
            },
            _renderShadingPosition: function() {
                if (this.option("shading")) {
                    var $container = this._getContainer();
                    positionUtils.setup(this._$wrapper, {
                        my: "top left",
                        at: "top left",
                        of: $container
                    })
                }
            },
            _renderShadingDimensions: function() {
                var wrapperWidth, wrapperHeight;
                if (this.option("shading")) {
                    var $container = this._getContainer();
                    wrapperWidth = this._isWindow($container) ? "100%" : $container.outerWidth(), wrapperHeight = this._isWindow($container) ? "100%" : $container.outerHeight()
                } else {
                    wrapperWidth = "";
                    wrapperHeight = ""
                }
                this._$wrapper.css({
                    width: wrapperWidth,
                    height: wrapperHeight
                })
            },
            _isWindow: function($element) {
                return !!$element && typeUtils.isWindow($element.get(0))
            },
            _getContainer: function() {
                var position = this._position,
                    container = this.option("container"),
                    positionOf = position ? position.of || window : null;
                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),
                        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() {
                this._keyboardProcessor = new KeyboardProcessor({
                    element: this._$content,
                    handler: this._keyboardHandler,
                    context: this
                })
            },
            _keyboardHandler: function(options) {
                var e = options.originalEvent,
                    $target = $(e.target);
                if ($target.is(this._$content)) {
                    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()
            },
            _clean: function() {
                if (!this._contentAlreadyRendered) {
                    this.$content().empty()
                }
                this._renderVisibility(false);
                this._cleanFocusState()
            },
            _dispose: function() {
                fx.stop(this._$content, false);
                clearTimeout(this._deferShowTimer);
                this._toggleViewPortSubscription(false);
                this._toggleSubscriptions(false);
                this._updateZIndexStackPosition(false);
                this._toggleTabTerminator(false);
                this._actions = null;
                this.callBase();
                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 "position":
                    case "boundaryOffset":
                        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 "deferRendering":
                    case "contentTemplate":
                        this._contentAlreadyRendered = false;
                        this._clean();
                        this._invalidate();
                        break;
                    case "closeOnBackButton":
                        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.option("visible", false);
                        this.callBase(args);
                        break;
                    default:
                        this.callBase(args)
                }
            },
            toggle: function(showing) {
                showing = void 0 === showing ? !this.option("visible") : showing;
                if (showing === this.option("visible")) {
                    return (new Deferred).resolve().promise()
                }
                var animateDeferred = new Deferred;
                this._animateDeferred = animateDeferred;
                this.option("visible", showing);
                return animateDeferred.promise().done(function() {
                    delete this._animateDeferred
                }.bind(this))
            },
            $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() {
                this._renderGeometry()
            }
        });
        Overlay.baseZIndex = function(zIndex) {
            FIRST_Z_INDEX = zIndex
        };
        registerComponent("dxOverlay", Overlay);
        module.exports = Overlay
    },
    /*!*********************************************!*\
      !*** ./artifacts/transpiled/events/drag.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            dataUtils = __webpack_require__( /*! ../core/element_data */ 37),
            wrapToArray = __webpack_require__( /*! ../core/utils/array */ 11).wrapToArray,
            inArray = __webpack_require__( /*! ../core/utils/array */ 11).inArray,
            iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 3),
            contains = __webpack_require__( /*! ../core/utils/dom */ 12).contains,
            registerEvent = __webpack_require__( /*! ./core/event_registrator */ 67),
            eventUtils = __webpack_require__( /*! ./utils */ 9),
            GestureEmitter = __webpack_require__( /*! ./gesture/emitter.gesture */ 156),
            registerEmitter = __webpack_require__( /*! ./core/emitter_registrator */ 92);
        var DRAG_START_EVENT = "dxdragstart",
            DRAG_EVENT = "dxdrag",
            DRAG_END_EVENT = "dxdragend",
            DRAG_ENTER_EVENT = "dxdragenter",
            DRAG_LEAVE_EVENT = "dxdragleave",
            DROP_EVENT = "dxdrop",
            DX_DRAG_EVENTS_COUNT_KEY = "dxDragEventsCount";
        var knownDropTargets = [],
            knownDropTargetSelectors = [],
            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),
                dropTargetSelectors = knownDropTargetSelectors[dropTargetIndex];
            var $delegatedTargets = $element.find(dropTargetSelectors.join(", "));
            if (inArray(void 0, dropTargetSelectors) !== -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),
                    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),
                    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 result, that = this;
                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) === this._$element.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
                }
                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/core/utils/view_port.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../renderer */ 2),
            readyCallbacks = __webpack_require__( /*! ./ready_callbacks */ 52),
            ready = readyCallbacks.add,
            changeCallback = __webpack_require__( /*! ./callbacks */ 21)(),
            $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 each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            callbacks = __webpack_require__( /*! ./event_registrator_callbacks */ 119);
        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
            }
            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)
                }
            });
            callbacks.fire(name, strategy)
        };
        registerEvent.callbacks = callbacks;
        module.exports = registerEvent
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/framework/errors.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var errorUtils = __webpack_require__( /*! ../core/utils/error */ 111),
            errors = __webpack_require__( /*! ../core/errors */ 19);
        module.exports = errorUtils(errors.ERROR_MESSAGES, {
            E3001: "Routing rule is not found for the '{0}' URI.",
            E3002: "The passed object cannot be formatted into a URI string by the application's router. An appropriate route should be registered.",
            E3003: "Unable to navigate. Application is being initialized.",
            E3004: "Cannot execute the command: {0}.",
            E3005: "The '{0}' command {1} is not registered in the application's command mapping. Go to http://dxpr.es/1bTjfj1 for more details.",
            E3006: "Unknown navigation target: '{0}'. Use the 'current', 'back' or 'blank' values.",
            E3007: "Error while restoring the application state. The state has been cleared. Refresh the page.",
            E3008: "Unable to go back.",
            E3009: "Unable to go forward.",
            E3010: "The command's 'id' option should be specified.\r\nProcessed markup: {0}\n",
            E3011: "Layout controller cannot be resolved. There are no appropriate layout controllers for the current context. Check browser console for details.",
            E3012: "Layout controller cannot be resolved. Two or more layout controllers suit the current context. Check browser console for details.",
            E3013: "The '{0}' template with the '{1}' name is not found. Make sure the case is correct in the specified view name and the template fits the current context.",
            E3014: "All the children of the dxView element should be either of the dxCommand or dxContent type.\r\nProcessed markup: {0}",
            E3015: "The 'exec' method should be called before the 'finalize' method.",
            E3016: "Unknown transition type '{0}'.",
            E3018: "Unable to parse options.\nMessage: {0};\nOptions value: {1}.",
            E3019: "View templates should be updated according to the 13.1 changes. Go to http://dxpr.es/15ikrJA for more details.",
            E3020: "Concurrent templates are found:\r\n{0}Target device:\r\n{1}.",
            E3021: "Remote template cannot be loaded.\r\nUrl:{0}\r\nError:{1}.",
            E3022: "Cannot initialize the HtmlApplication component.",
            E3023: "Navigation item is not found",
            E3024: "Layout controller is not initialized",
            W3001: "A view with the '{0}' key doesn't exist.",
            W3002: "A view with the '{0}' key has already been released.",
            W3003: "Layout resolving context:\n{0}\nAvailable layout controller registrations:\n{1}\n",
            W3004: "Layout resolving context:\n{0}\nConcurent layout controller registrations for the context:\n{1}\n",
            W3005: 'Direct hash-based navigation is detected in a mobile application. Use data-bind="dxAction: url" instead of href="#url" to avoid navigation issues.\nFound markup:\n{0}\n'
        })
    },
    /*!***********************************************************************!*\
      !*** ./artifacts/transpiled/framework/html/view_engine_components.js ***!
      \***********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var errors = __webpack_require__( /*! ../errors */ 68),
            domUtils = __webpack_require__( /*! ../../core/utils/dom */ 12),
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            MarkupComponent = __webpack_require__( /*! ./markup_component */ 186).MarkupComponent;
        __webpack_require__( /*! ../../integration/knockout */ 121);
        var View = MarkupComponent.inherit({
            _setDefaultOptions: function() {
                this.callBase();
                this.option({
                    name: null,
                    title: null
                })
            },
            ctor: function() {
                this._id = domUtils.uniqueId();
                this.callBase.apply(this, arguments)
            },
            _render: function() {
                this.callBase();
                this.element().addClass("dx-view");
                this.element().attr("dx-data-template-id", this._id)
            },
            getId: function() {
                return this._id
            }
        });
        var Layout = MarkupComponent.inherit({
            _setDefaultOptions: function() {
                this.callBase();
                this.option({
                    name: null
                })
            },
            _render: function() {
                this.callBase();
                this.element().addClass("dx-layout")
            }
        });
        var ViewPlaceholder = MarkupComponent.inherit({
            _setDefaultOptions: function() {
                this.callBase();
                this.option({
                    viewName: null
                })
            },
            _render: function() {
                this.callBase();
                this.element().addClass("dx-view-placeholder")
            }
        });
        var setupTransitionElement = function($element, transitionType, transitionName, contentCssPosition) {
            if ("absolute" === contentCssPosition) {
                $element.addClass("dx-transition-absolute")
            } else {
                $element.addClass("dx-transition-static")
            }
            $element.addClass("dx-transition").addClass("dx-transition-" + transitionName).addClass("dx-transition-" + transitionType).attr("data-dx-transition-type", transitionType).attr("data-dx-transition-name", transitionName)
        };
        var setupTransitionInnerElement = function($element) {
            $element.addClass("dx-transition-inner-wrapper")
        };
        var Transition = MarkupComponent.inherit({
            _setDefaultOptions: function() {
                this.callBase();
                this.option({
                    name: null,
                    type: void 0,
                    animation: "slide"
                })
            },
            _render: function() {
                this.callBase();
                var element = this.element();
                setupTransitionElement(element, this.option("type") || this.option("animation"), this.option("name"), "absolute");
                element.wrapInner("<div>");
                setupTransitionInnerElement(element.children());
                if (this.option("type")) {
                    errors.log("W0003", "dxTransition", "type", "15.1", "Use the 'animation' property instead")
                }
            },
            _clean: function() {
                this.callBase();
                this.element().empty()
            }
        });
        var ContentPlaceholder = MarkupComponent.inherit({
            _setDefaultOptions: function() {
                this.callBase();
                this.option({
                    name: null,
                    transition: void 0,
                    animation: "none",
                    contentCssPosition: "absolute"
                })
            },
            _render: function() {
                this.callBase();
                var $element = this.element();
                $element.addClass("dx-content-placeholder").addClass("dx-content-placeholder-" + this.option("name"));
                $element.attr("data-dx-content-placeholder-name", this.option("name"));
                setupTransitionElement($element, this.option("transition") || this.option("animation"), this.option("name"), this.option("contentCssPosition"));
                if (this.option("transition")) {
                    errors.log("W0003", "dxContentPlaceholder", "transition", "15.1", "Use the 'animation' property instead")
                }
            }
        });
        var Content = MarkupComponent.inherit({
            _setDefaultOptions: function() {
                this.callBase();
                this.option({
                    targetPlaceholder: null
                })
            },
            _optionChanged: function() {
                this._refresh()
            },
            _clean: function() {
                this.callBase();
                this.element().removeClass(this._currentClass)
            },
            _render: function() {
                this.callBase();
                var element = this.element();
                element.addClass("dx-content");
                this._currentClass = "dx-content-" + this.option("targetPlaceholder");
                element.attr("data-dx-target-placeholder-id", this.option("targetPlaceholder"));
                element.addClass(this._currentClass);
                setupTransitionInnerElement(element)
            }
        });
        registerComponent("dxView", View);
        registerComponent("dxLayout", Layout);
        registerComponent("dxViewPlaceholder", ViewPlaceholder);
        registerComponent("dxContentPlaceholder", ContentPlaceholder);
        registerComponent("dxTransition", Transition);
        registerComponent("dxContent", Content);
        exports.dxView = View;
        exports.dxLayout = Layout;
        exports.dxViewPlaceholder = ViewPlaceholder;
        exports.dxContentPlaceholder = ContentPlaceholder;
        exports.dxTransition = Transition;
        exports.dxContent = Content
    },
    /*!***********************************!*\
      !*** external "window.Globalize" ***!
      \***********************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports) {
        module.exports = window.Globalize
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/ui/widget/ui.template_base.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13),
            Callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 21),
            domUtils = __webpack_require__( /*! ../../core/utils/dom */ 12),
            Class = __webpack_require__( /*! ../../core/class */ 10),
            abstract = Class.abstract;
        var renderedCallbacks = Callbacks();
        var TemplateBase = Class.inherit({
            render: 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
            },
            _ensureResultInContainer: function($result, container) {
                if (!container) {
                    return
                }
                var $container = $(container);
                var resultInContainer = domUtils.contains($container.get(0), $result.get(0));
                $container.append($result);
                if (resultInContainer) {
                    return
                }
                var resultInBody = domAdapter.getBody().contains($container.get(0));
                if (!resultInBody) {
                    return
                }
                domUtils.triggerShownEvent($result)
            },
            _renderCore: abstract
        });
        module.exports = TemplateBase;
        module.exports.renderedCallbacks = renderedCallbacks
    },
    /*!************************************************************!*\
      !*** ./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",
            INKRIPPLE_WAVE_CLASS = "dx-inkripple-wave",
            INKRIPPLE_SHOWING_CLASS = "dx-inkripple-showing",
            INKRIPPLE_HIDING_CLASS = "dx-inkripple-hiding";
        var DEFAULT_WAVE_SIZE_COEFFICIENT = 2,
            MAX_WAVE_SIZE = 4e3,
            ANIMATION_DURATION = 300,
            HOLD_ANIMATION_DURATION = 1e3,
            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),
                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 left, top, element = config.element,
                elementWidth = element.outerWidth(),
                elementHeight = element.outerHeight(),
                elementDiagonal = parseInt(Math.sqrt(elementWidth * elementWidth + elementHeight * elementHeight)),
                waveSize = Math.min(MAX_WAVE_SIZE, parseInt(elementDiagonal * args.waveSizeCoefficient));
            if (args.isCentered) {
                left = (elementWidth - waveSize) / 2;
                top = (elementHeight - waveSize) / 2
            } else {
                var event = config.event,
                    position = config.element.offset(),
                    x = event.pageX - position.left,
                    y = event.pageY - position.top;
                left = x - waveSize / 2;
                top = y - waveSize / 2
            }
            return {
                left: left,
                top: top,
                height: waveSize,
                width: waveSize
            }
        };
        var showWave = function(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)
        };
        var showingWaveHandler = function(args, $wave) {
            var durationCss = args.durations.showingScale + "ms";
            $wave.addClass(INKRIPPLE_SHOWING_CLASS).css("transitionDuration", durationCss)
        };
        var getDurations = function(useHoldAnimation) {
            return {
                showingScale: useHoldAnimation ? HOLD_ANIMATION_DURATION : ANIMATION_DURATION,
                hidingScale: ANIMATION_DURATION,
                hidingOpacity: ANIMATION_DURATION
            }
        };
        var hideSelectedWave = function($wave) {
            $wave.removeClass(INKRIPPLE_HIDING_CLASS).css("transitionDuration", "")
        };
        var hideWave = function(args, config) {
            args.showingTimeout && clearTimeout(args.showingTimeout);
            var $wave = getWaves(config.element, config.wavesNumber).eq(config.wave || DEFAULT_WAVE_INDEX),
                durations = args.durations,
                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/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/core/utils/variable_wrapper.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var logger = __webpack_require__( /*! ./console */ 84).logger,
            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/format_helper.js ***!
      \***********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var typeUtils = __webpack_require__( /*! ./core/utils/type */ 1),
            dateUtils = __webpack_require__( /*! ./core/utils/date */ 22),
            numberLocalization = __webpack_require__( /*! ./localization/number */ 49),
            dateLocalization = __webpack_require__( /*! ./localization/date */ 32),
            dependencyInjector = __webpack_require__( /*! ./core/utils/dependency_injector */ 56);
        __webpack_require__( /*! ./localization/currency */ 146);
        module.exports = dependencyInjector({
            format: function(value, _format) {
                var formatIsValid = typeUtils.isString(_format) && "" !== _format || typeUtils.isPlainObject(_format) || typeUtils.isFunction(_format),
                    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 = [],
                    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 resultFormat, maxDiff, currentDiff, 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
                    }
                }
                resultFormat = this.getDateFormatByDifferences(maxDiff);
                return resultFormat
            },
            getDateFormatByTickInterval: function(startValue, endValue, tickInterval) {
                var resultFormat, dateDifferences, dateUnitInterval, dateDifferencesConverter = {
                        week: "day"
                    },
                    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
                        }
                    },
                    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;
                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;
                resultFormat = this.getDateFormatByDifferences(dateDifferences);
                return resultFormat
            }
        })
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/core/utils/ajax.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Deferred = __webpack_require__( /*! ./deferred */ 7).Deferred;
        var domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13);
        var httpRequest = __webpack_require__( /*! ../../core/http_request */ 333);
        var windowUtils = __webpack_require__( /*! ../../core/utils/window */ 6);
        var window = windowUtils.getWindow();
        var extendFromObject = __webpack_require__( /*! ./extend */ 0).extendFromObject;
        var isDefined = __webpack_require__( /*! ./type */ 1).isDefined;
        var Promise = __webpack_require__( /*! ../polyfills/promise */ 104);
        var injector = __webpack_require__( /*! ./dependency_injector */ 56);
        var SUCCESS = "success",
            ERROR = "error",
            TIMEOUT = "timeout",
            NO_CONTENT = "nocontent",
            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 || "*",
                scriptAccept = "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript",
                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,
                originAnchor = domAdapter.createElement("a"),
                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, ""),
                    callbackName = options.jsonpCallback || "dxCallback" + Date.now() + "_" + random,
                    callbackParameter = options.jsonp || "callback";
                options.data = options.data || {};
                options.data[callbackParameter] = callbackName;
                return callbackName
            }
        };
        var getRequestOptions = function(options, headers) {
            var params = options.data,
                paramsAlreadyString = "string" === typeof params,
                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
            }
        };
        var getMethod = function(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 timeoutId, xhr = httpRequest.getXhr(),
                d = new Deferred,
                result = d.promise(),
                async = isDefined(options.async) ? options.async : true, dataType = options.dataType, timeout = options.timeout || 0;
            options.crossDomain = isCrossDomain(options.url);
            var needScriptEvaluation = "jsonp" === dataType || "script" === dataType;
            if (void 0 === options.cache) {
                options.cache = !needScriptEvaluation
            }
            var callbackName = getJsonpOptions(options),
                headers = getRequestHeaders(options),
                requestOptions = getRequestOptions(options, headers),
                url = requestOptions.url,
                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)
                    },
                    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 (headers.hasOwnProperty(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/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/animation/position.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            commonUtils = __webpack_require__( /*! ../core/utils/common */ 4),
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6),
            window = windowUtils.getWindow(),
            domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 13),
            isWindow = __webpack_require__( /*! ../core/utils/type */ 1).isWindow,
            stringUtils = __webpack_require__( /*! ../core/utils/string */ 40),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            translator = __webpack_require__( /*! ./translator */ 24),
            support = __webpack_require__( /*! ../core/utils/support */ 44);
        var horzRe = /left|right/,
            vertRe = /top|bottom/,
            collisionRe = /fit|flip|none/;
        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 stringUtils.pairToObject(raw)
        };
        var normalizeCollision = function(raw) {
            var pair = commonUtils.splitPair(raw),
                h = String(pair && pair[0]).toLowerCase(),
                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")),
                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),
                currentOffset = $what.offset(),
                result = extend(true, {}, defaultPositionResult, {
                    h: {
                        location: currentOffset.left
                    },
                    v: {
                        location: currentOffset.top
                    }
                });
            if (!options) {
                return result
            }
            var my = normalizeAlign(options.my),
                at = normalizeAlign(options.at),
                of = $(options.of).length && options.of || window,
                offset = normalizeOffset(options.offset),
                collision = normalizeCollision(options.collision),
                boundary = options.boundary,
                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 ? 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 o = of .offset();
                        h.atLocation = o.left;
                        v.atLocation = o.top;
                        h.atSize = of .outerWidth();
                        v.atSize = of .outerHeight()
                    }
                }
            }
            initMyLocation(h);
            initMyLocation(v);
            var bounds = function() {
                var win = $(window),
                    windowWidth = win.width(),
                    windowHeight = win.height(),
                    left = win.scrollLeft(),
                    top = win.scrollTop(),
                    documentElement = domAdapter.getDocumentElement(),
                    hZoomLevel = support.touch ? documentElement.clientWidth / windowWidth : 1,
                    vZoomLevel = support.touch ? documentElement.clientHeight / windowHeight : 1;
                if (void 0 === scrollbarWidth) {
                    calculateScrollbarWidth()
                }
                var boundaryWidth = windowWidth,
                    boundaryHeight = windowHeight;
                if (boundary) {
                    var $boundary = $(boundary),
                        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(),
                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/integration/jquery/use_jquery.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var jQuery = __webpack_require__( /*! jquery */ 29);
        var config = __webpack_require__( /*! ../../core/config */ 25);
        var useJQuery = config().useJQuery;
        if (jQuery && false !== useJQuery) {
            config({
                useJQuery: true
            })
        }
        module.exports = function() {
            return jQuery && config().useJQuery
        }
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/data/array_store.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _utils = __webpack_require__( /*! ./utils */ 39);
        var _query = __webpack_require__( /*! ./query */ 43);
        var _query2 = _interopRequireDefault(_query);
        var _errors = __webpack_require__( /*! ./errors */ 35);
        var _abstract_store = __webpack_require__( /*! ./abstract_store */ 100);
        var _abstract_store2 = _interopRequireDefault(_abstract_store);
        var _array_utils = __webpack_require__( /*! ./array_utils */ 136);
        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.fireEvent("modifying");
                this._array = [];
                this.fireEvent("modified")
            }
        }, "array");
        module.exports = ArrayStore
    },
    /*!*********************************************!*\
      !*** ./artifacts/transpiled/core/action.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ./renderer */ 2),
            config = __webpack_require__( /*! ./config */ 25),
            window = __webpack_require__( /*! ./utils/window */ 6).getWindow(),
            typeUtils = __webpack_require__( /*! ./utils/type */ 1),
            each = __webpack_require__( /*! ./utils/iterator */ 3).each,
            Class = __webpack_require__( /*! ./class */ 10),
            errors = __webpack_require__( /*! ./errors */ 19);
        var Action = Class.inherit({
            ctor: function(action, config) {
                config = config || {};
                this._action = action;
                this._context = config.context || window;
                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
                    }
                }
            },
            execute: 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,
                    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 && config().useJQuery) {
                    Object.defineProperty(argsBag, "jQueryEvent", {
                        get: function() {
                            errors.log("W0003", "Handler argument", "jQueryEvent", "17.2", "Use the 'event' field instead");
                            return argsBag.event
                        },
                        set: function(value) {
                            errors.log("W0003", "Handler argument", "jQueryEvent", "17.2", "Use the 'event' field instead");
                            argsBag.event = value
                        }
                    })
                }
                if (!this._validateAction(e)) {
                    return
                }
                beforeExecute && beforeExecute.call(this._context, e);
                if (e.cancel) {
                    return
                }
                var result = this._executeAction(e);
                if (argsBag.cancel) {
                    return
                }
                afterExecute && afterExecute.call(this._context, e);
                return result
            },
            _validateAction: function(e) {
                var excludeValidators = this._excludeValidators,
                    executors = Action.executors;
                for (var name in executors) {
                    if (!excludeValidators[name]) {
                        var executor = executors[name];
                        if (executor.validate) {
                            executor.validate(e)
                        }
                        if (e.cancel) {
                            return false
                        }
                    }
                }
                return true
            },
            _executeAction: function(e) {
                var result, executors = Action.executors;
                for (var name in executors) {
                    var executor = executors[name];
                    if (executor.execute) {
                        executor.execute(e)
                    }
                    if (e.handled) {
                        result = e.result;
                        break
                    }
                }
                return result
            }
        });
        Action.executors = {};
        Action.registerExecutor = function(name, executor) {
            if (typeUtils.isPlainObject(name)) {
                each(name, Action.registerExecutor);
                return
            }
            Action.executors[name] = executor
        };
        Action.unregisterExecutor = function() {
            var args = [].slice.call(arguments);
            each(args, function() {
                delete Action.executors[this]
            })
        };
        Action.registerExecutor({
            undefined: {
                execute: function(e) {
                    if (!e.action) {
                        e.result = void 0;
                        e.handled = true
                    }
                }
            },
            func: {
                execute: function(e) {
                    if (typeUtils.isFunction(e.action)) {
                        e.result = e.action.call(e.context, e.args[0]);
                        e.handled = true
                    }
                }
            }
        });
        var createValidatorByTargetElement = function(condition) {
            return function(e) {
                if (!e.args.length) {
                    return
                }
                var args = e.args[0],
                    element = args[e.validatingTargetName] || args.element;
                if (element && condition($(element))) {
                    e.cancel = true
                }
            }
        };
        Action.registerExecutor({
            designMode: {
                validate: function(e) {
                    if (config().designMode) {
                        e.cancel = true
                    }
                }
            },
            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 *")
                })
            }
        });
        module.exports = Action
    }, ,
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/data/store_helper.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var grep = __webpack_require__( /*! ../core/utils/common */ 4).grep,
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            arrayQuery = __webpack_require__( /*! ./array_query */ 153),
            normalizeSortingInfo = __webpack_require__( /*! ./utils */ 39).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,
                sort = options.sort,
                select = options.select,
                group = options.group,
                skip = options.skip,
                take = options.take;
            if (filter) {
                query = query.filter(filter)
            }
            if (group) {
                group = normalizeSortingInfo(group)
            }
            if (!isCountQuery) {
                if (sort || group) {
                    sort = normalizeSortingInfo(sort || []);
                    if (group) {
                        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 (!isCountQuery) {
                if (take || skip) {
                    query = query.slice(skip || 0, take)
                }
            }
            return query
        }
        module.exports = {
            multiLevelGroup: multiLevelGroup,
            arrangeSortingInfo: arrangeSortingInfo,
            queryByOptions: queryByOptions
        }
    },
    /*!****************************************************!*\
      !*** ./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/core/utils/style.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var camelize = __webpack_require__( /*! ./inflector */ 34).camelize,
            callOnce = __webpack_require__( /*! ./call_once */ 73),
            typeUtils = __webpack_require__( /*! ./type */ 1),
            domAdapter = __webpack_require__( /*! ../dom_adapter */ 13);
        var jsPrefixes = ["", "Webkit", "Moz", "O", "Ms"],
            cssPrefixes = {
                "": "",
                Webkit: "-webkit-",
                Moz: "-moz-",
                O: "-o-",
                ms: "-ms-"
            },
            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/localization/core.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var dependencyInjector = __webpack_require__( /*! ../core/utils/dependency_injector */ 56);
        module.exports = dependencyInjector({
            locale: function() {
                var currentLocale = "en";
                return function(locale) {
                    if (!locale) {
                        return currentLocale
                    }
                    currentLocale = locale
                }
            }()
        })
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/core/utils/icon.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2);
        var getImageSourceType = function(source) {
            if (!source || "string" !== typeof source) {
                return false
            }
            if (/data:.*base64|\.|\//.test(source)) {
                return "image"
            }
            if (/^[\w-_]+$/.test(source)) {
                return "dxIcon"
            }
            return "fontIcon"
        };
        var getImageContainer = function(source) {
            var imageType = getImageSourceType(source),
                ICON_CLASS = "dx-icon";
            switch (imageType) {
                case "image":
                    return $("<img>").attr("src", source).addClass(ICON_CLASS);
                case "fontIcon":
                    return $("<i>").addClass(ICON_CLASS + " " + source);
                case "dxIcon":
                    return $("<i>").addClass(ICON_CLASS + " " + ICON_CLASS + "-" + source);
                default:
                    return null
            }
        };
        exports.getImageSourceType = getImageSourceType;
        exports.getImageContainer = getImageContainer
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/framework/view_cache.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var inArray = __webpack_require__( /*! ../core/utils/array */ 11).inArray,
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            Class = __webpack_require__( /*! ../core/class */ 10),
            EventsMixin = __webpack_require__( /*! ../core/events_mixin */ 54);
        var ViewCache = Class.inherit({
            ctor: function() {
                this._cache = {}
            },
            setView: function(key, viewInfo) {
                this._cache[key] = viewInfo
            },
            getView: function(key) {
                return this._cache[key]
            },
            removeView: function(key) {
                var result = this._cache[key];
                if (result) {
                    delete this._cache[key];
                    this.fireEvent("viewRemoved", [{
                        viewInfo: result
                    }])
                }
                return result
            },
            clear: function() {
                var that = this;
                each(this._cache, function(key) {
                    that.removeView(key)
                })
            },
            hasView: function(key) {
                return key in this._cache
            }
        }).include(EventsMixin);
        var NullViewCache = ViewCache.inherit({
            setView: function(key, viewInfo) {
                this.callBase(key, viewInfo);
                this.removeView(key)
            }
        });

        function delegateEvent(eventName, source, target) {
            source.on(eventName, function() {
                target.fireEvent(eventName, arguments)
            })
        }
        var ConditionalViewCacheDecorator = Class.inherit({
            ctor: function(options) {
                this._filter = options.filter;
                this._viewCache = options.viewCache;
                this.viewRemoved = this._viewCache.viewRemoved;
                delegateEvent("viewRemoved", this._viewCache, this)
            },
            setView: function(key, viewInfo) {
                this._viewCache.setView(key, viewInfo);
                if (!this._filter(key, viewInfo)) {
                    this._viewCache.removeView(key)
                }
            },
            getView: function(key) {
                return this._viewCache.getView(key)
            },
            removeView: function(key) {
                return this._viewCache.removeView(key)
            },
            clear: function() {
                return this._viewCache.clear()
            },
            hasView: function(key) {
                return this._viewCache.hasView(key)
            }
        }).include(EventsMixin);
        var DEFAULT_VIEW_CACHE_CAPACITY = 5;
        var CapacityViewCacheDecorator = Class.inherit({
            ctor: function(options) {
                this._keys = [];
                this._size = options.size || DEFAULT_VIEW_CACHE_CAPACITY;
                this._viewCache = options.viewCache;
                this.viewRemoved = this._viewCache.viewRemoved;
                delegateEvent("viewRemoved", this._viewCache, this)
            },
            setView: function(key, viewInfo) {
                if (!this.hasView(key)) {
                    if (this._keys.length === this._size) {
                        this.removeView(this._keys[0])
                    }
                    this._keys.push(key)
                }
                this._viewCache.setView(key, viewInfo)
            },
            getView: function(key) {
                var index = inArray(key, this._keys);
                if (index < 0) {
                    return null
                }
                this._keys.push(key);
                this._keys.splice(index, 1);
                return this._viewCache.getView(key)
            },
            removeView: function(key) {
                var index = inArray(key, this._keys);
                if (index > -1) {
                    this._keys.splice(index, 1)
                }
                return this._viewCache.removeView(key)
            },
            clear: function() {
                this._keys = [];
                return this._viewCache.clear()
            },
            hasView: function(key) {
                return this._viewCache.hasView(key)
            }
        }).include(EventsMixin);
        var HistoryDependentViewCacheDecorator = Class.inherit({
            ctor: function(options) {
                this._viewCache = options.viewCache || new ViewCache;
                this._navigationManager = options.navigationManager;
                this._navigationManager.on("itemRemoved", this._onNavigationItemRemoved.bind(this));
                this.viewRemoved = this._viewCache.viewRemoved;
                delegateEvent("viewRemoved", this._viewCache, this)
            },
            _onNavigationItemRemoved: function(item) {
                this.removeView(item.key)
            },
            setView: function(key, viewInfo) {
                this._viewCache.setView(key, viewInfo)
            },
            getView: function(key) {
                return this._viewCache.getView(key)
            },
            removeView: function(key) {
                return this._viewCache.removeView(key)
            },
            clear: function() {
                return this._viewCache.clear()
            },
            hasView: function(key) {
                return this._viewCache.hasView(key)
            }
        }).include(EventsMixin);
        module.exports = ViewCache;
        module.exports.NullViewCache = NullViewCache;
        module.exports.ConditionalViewCacheDecorator = ConditionalViewCacheDecorator;
        module.exports.CapacityViewCacheDecorator = CapacityViewCacheDecorator;
        module.exports.HistoryDependentViewCacheDecorator = HistoryDependentViewCacheDecorator
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/ui/load_indicator.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6),
            navigator = windowUtils.getNavigator(),
            support = __webpack_require__( /*! ../core/utils/support */ 44),
            themes = __webpack_require__( /*! ./themes */ 20),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            devices = __webpack_require__( /*! ../core/devices */ 16),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            Widget = __webpack_require__( /*! ./widget/ui.widget */ 28);
        var LOADINDICATOR_CLASS = "dx-loadindicator",
            LOADINDICATOR_WRAPPER_CLASS = "dx-loadindicator-wrapper",
            LOADINDICATOR_CONTENT_CLASS = "dx-loadindicator-content",
            LOADINDICATOR_ICON_CLASS = "dx-loadindicator-icon",
            LOADINDICATOR_SEGMENT_CLASS = "dx-loadindicator-segment",
            LOADINDICATOR_SEGMENT_INNER_CLASS = "dx-loadindicator-segment-inner",
            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(),
                            obsoleteAndroid = "android" === realDevice.platform && !/chrome/i.test(navigator.userAgent);
                        return obsoleteAndroid
                    },
                    options: {
                        viaImage: true
                    }
                }, {
                    device: function() {
                        return themes.isWin8(themeName) || themes.isWin10(themeName)
                    },
                    options: {
                        _animatingSegmentCount: 5
                    }
                }, {
                    device: function() {
                        return themes.isIos7(themeName)
                    },
                    options: {
                        _animatingSegmentCount: 11
                    }
                }, {
                    device: function() {
                        return themes.isMaterial(themeName) || themes.isAndroid5(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"),
                    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/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),
                    s = parseInt(colorString[2], 10),
                    v = parseInt(colorString[3], 10),
                    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),
                    s = parseInt(colorString[2], 10),
                    l = parseInt(colorString[3], 10),
                    rgb = hslToRgb(h, s, l);
                return [rgb[0], rgb[1], rgb[2], 1, null, [h, s, l]]
            }
        }];

        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 str, i = 0,
                ii = standardColorTypes.length;
            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 H, S, V, max = Math.max(r, g, b),
                min = Math.min(r, g, b),
                delta = max - min;
            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 vDec, vInc, vMin, index, a, r, g, b;
            index = Math.floor(h % 360 / 60);
            vMin = (100 - s) * v / 100;
            a = (v - vMin) * (h % 60 / 60);
            vInc = vMin + a;
            vDec = v - a;
            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 h, s, max = Math.max(r, g, b),
                min = Math.min(r, g, b),
                maxMinSum = max + min,
                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, g, 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,
                    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
        }
        var _round = Math.round;
        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),
                    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,
                    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/events/core/emitter_registrator.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            readyCallbacks = __webpack_require__( /*! ../../core/utils/ready_callbacks */ 52),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            dataUtils = __webpack_require__( /*! ../../core/element_data */ 37),
            Class = __webpack_require__( /*! ../../core/class */ 10),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            inArray = __webpack_require__( /*! ../../core/utils/array */ 11).inArray,
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            registerEvent = __webpack_require__( /*! ./event_registrator */ 67),
            eventUtils = __webpack_require__( /*! ../utils */ 9),
            pointerEvents = __webpack_require__( /*! ../pointer */ 27),
            wheelEvent = __webpack_require__( /*! ./wheel */ 105);
        var MANAGER_EVENT = "dxEventManager",
            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,
                    result = [],
                    $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),
                    verticalGestureDirection = "both" === direction && !e.shiftKey || "vertical" === direction,
                    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,
                emitterName = emitterConfig.events[0],
                emitterEvents = emitterConfig.events;
            each(emitterEvents, function(_, eventName) {
                registerEvent(eventName, {
                    noBubble: !emitterConfig.bubble,
                    setup: function(element) {
                        var subscriptions = dataUtils.data(element, EMITTER_SUBSCRIPTION_DATA) || {},
                            emitters = dataUtils.data(element, EMITTER_DATA) || {},
                            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),
                            emitter = emitters[emitterName];
                        emitter.configure(extend({
                            delegateSelector: handleObj.selector
                        }, handleObj.data), handleObj.type)
                    },
                    teardown: function(element) {
                        var subscriptions = dataUtils.data(element, EMITTER_SUBSCRIPTION_DATA),
                            emitters = dataUtils.data(element, EMITTER_DATA),
                            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/ui/widget/empty_template.js ***!
      \**********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            TemplateBase = __webpack_require__( /*! ./ui.template_base */ 71);
        var EmptyTemplate = TemplateBase.inherit({
            _renderCore: function() {
                return $()
            }
        });
        module.exports = EmptyTemplate
    },
    /*!******************************************************!*\
      !*** ./artifacts/transpiled/ui/validation_engine.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ../core/class */ 10),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            inArray = __webpack_require__( /*! ../core/utils/array */ 11).inArray,
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            EventsMixin = __webpack_require__( /*! ../core/events_mixin */ 54),
            errors = __webpack_require__( /*! ../core/errors */ 19),
            commonUtils = __webpack_require__( /*! ../core/utils/common */ 4),
            typeUtils = __webpack_require__( /*! ../core/utils/type */ 1),
            numberLocalization = __webpack_require__( /*! ../localization/number */ 49),
            messageLocalization = __webpack_require__( /*! ../localization/message */ 14);
        var BaseRuleValidator = Class.inherit({
            NAME: "base",
            defaultMessage: function(value) {
                return messageLocalization.getFormatter("validation-" + this.NAME)(value)
            },
            defaultFormattedMessage: function(value) {
                return messageLocalization.getFormatter("validation-" + this.NAME + "-formatted")(value)
            },
            validate: function(value, rule) {
                var valueArray = Array.isArray(value) ? value : [value],
                    result = true;
                if (valueArray.length) {
                    valueArray.every(function(itemValue) {
                        result = this._validate(itemValue, rule);
                        return result
                    }, this)
                } else {
                    result = this._validate(null, rule)
                }
                return result
            }
        });
        var RequiredRuleValidator = BaseRuleValidator.inherit({
            NAME: "required",
            _validate: function(value, rule) {
                if (!typeUtils.isDefined(value)) {
                    return false
                }
                if (false === value) {
                    return false
                }
                value = String(value);
                if (rule.trim || !typeUtils.isDefined(rule.trim)) {
                    value = value.trim()
                }
                return "" !== value
            }
        });
        var NumericRuleValidator = BaseRuleValidator.inherit({
            NAME: "numeric",
            _validate: function(value, rule) {
                if (!rulesValidators.required.validate(value, {})) {
                    return true
                }
                if (rule.useCultureSettings && typeUtils.isString(value)) {
                    return !isNaN(numberLocalization.parse(value))
                } else {
                    return typeUtils.isNumeric(value)
                }
            }
        });
        var RangeRuleValidator = BaseRuleValidator.inherit({
            NAME: "range",
            _validate: function(value, rule) {
                if (!rulesValidators.required.validate(value, {})) {
                    return true
                }
                var validNumber = rulesValidators.numeric.validate(value, rule),
                    validValue = typeUtils.isDefined(value),
                    number = validNumber ? parseFloat(value) : validValue && value.valueOf(),
                    min = rule.min,
                    max = rule.max;
                if (!(validNumber || typeUtils.isDate(value)) && !validValue) {
                    return false
                }
                if (typeUtils.isDefined(min)) {
                    if (typeUtils.isDefined(max)) {
                        return number >= min && number <= max
                    }
                    return number >= min
                } else {
                    if (typeUtils.isDefined(max)) {
                        return number <= max
                    } else {
                        throw errors.Error("E0101")
                    }
                }
            }
        });
        var StringLengthRuleValidator = BaseRuleValidator.inherit({
            NAME: "stringLength",
            _validate: function(value, rule) {
                value = typeUtils.isDefined(value) ? String(value) : "";
                if (rule.trim || !typeUtils.isDefined(rule.trim)) {
                    value = value.trim()
                }
                return rulesValidators.range.validate(value.length, extend({}, rule))
            }
        });
        var CustomRuleValidator = BaseRuleValidator.inherit({
            NAME: "custom",
            validate: function(value, rule) {
                var validator = rule.validator,
                    dataGetter = validator && typeUtils.isFunction(validator.option) && validator.option("dataGetter"),
                    data = typeUtils.isFunction(dataGetter) && dataGetter(),
                    params = {
                        value: value,
                        validator: validator,
                        rule: rule
                    };
                if (data) {
                    params.data = data
                }
                return rule.validationCallback(params)
            }
        });
        var CompareRuleValidator = BaseRuleValidator.inherit({
            NAME: "compare",
            _validate: function(value, rule) {
                if (!rule.comparisonTarget) {
                    throw errors.Error("E0102")
                }
                extend(rule, {
                    reevaluate: true
                });
                var otherValue = rule.comparisonTarget(),
                    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
                }
            }
        });
        var PatternRuleValidator = BaseRuleValidator.inherit({
            NAME: "pattern",
            _validate: function(value, rule) {
                if (!rulesValidators.required.validate(value, {})) {
                    return true
                }
                var pattern = rule.pattern;
                if (typeUtils.isString(pattern)) {
                    pattern = new RegExp(pattern)
                }
                return pattern.test(value)
            }
        });
        var EmailRuleValidator = BaseRuleValidator.inherit({
            NAME: "email",
            _validate: function(value, rule) {
                if (!rulesValidators.required.validate(value, {})) {
                    return true
                }
                return rulesValidators.pattern.validate(value, extend({}, rule, {
                    pattern: /^[\d\w\._\-]+@([\d\w\._\-]+\.)+[\w]+$/i
                }))
            }
        });
        var rulesValidators = {
            required: new RequiredRuleValidator,
            numeric: new NumericRuleValidator,
            range: new RangeRuleValidator,
            stringLength: new StringLengthRuleValidator,
            custom: new CustomRuleValidator,
            compare: new CompareRuleValidator,
            pattern: new PatternRuleValidator,
            email: new EmailRuleValidator
        };
        var GroupConfig = Class.inherit({
            ctor: function(group) {
                this.group = group;
                this.validators = []
            },
            validate: function() {
                var result = {
                    isValid: true,
                    brokenRules: [],
                    validators: []
                };
                each(this.validators, function(_, validator) {
                    var validatorResult = validator.validate();
                    result.isValid = result.isValid && validatorResult.isValid;
                    if (validatorResult.brokenRule) {
                        result.brokenRules.push(validatorResult.brokenRule)
                    }
                    result.validators.push(validator)
                });
                this.fireEvent("validated", [{
                    validators: result.validators,
                    brokenRules: result.brokenRules,
                    isValid: result.isValid
                }]);
                return result
            },
            reset: function() {
                each(this.validators, function(_, validator) {
                    validator.reset()
                })
            }
        }).include(EventsMixin);
        var ValidationEngine = {
            groups: [],
            getGroupConfig: function(group) {
                var result = commonUtils.grep(this.groups, function(config) {
                    return config.group === group
                });
                if (result.length) {
                    return result[0]
                }
            },
            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),
                    index = inArray(config, this.groups);
                if (index > -1) {
                    this.groups.splice(index, 1)
                }
                return config
            },
            _setDefaultMessage: function(rule, validator, name) {
                if (!typeUtils.isDefined(rule.message)) {
                    if (validator.defaultFormattedMessage && typeUtils.isDefined(name)) {
                        rule.message = validator.defaultFormattedMessage(name)
                    } else {
                        rule.message = validator.defaultMessage()
                    }
                }
            },
            validate: function(value, rules, name) {
                var result = {
                        name: name,
                        value: value,
                        brokenRule: null,
                        isValid: true,
                        validationRules: rules
                    },
                    that = this;
                each(rules || [], function(_, rule) {
                    var ruleValidationResult, ruleValidator = rulesValidators[rule.type];
                    if (ruleValidator) {
                        if (typeUtils.isDefined(rule.isValid) && rule.value === value && !rule.reevaluate) {
                            if (!rule.isValid) {
                                result.isValid = false;
                                result.brokenRule = rule;
                                return false
                            }
                            return true
                        }
                        rule.value = value;
                        ruleValidationResult = ruleValidator.validate(value, rule);
                        rule.isValid = ruleValidationResult;
                        if (!ruleValidationResult) {
                            result.isValid = false;
                            that._setDefaultMessage(rule, ruleValidator, name);
                            result.brokenRule = rule
                        }
                        if (!rule.isValid) {
                            return false
                        }
                    } else {
                        throw errors.Error("E0100")
                    }
                });
                return result
            },
            registerValidatorInGroup: function(group, validator) {
                var groupConfig = ValidationEngine.addGroup(group);
                if (inArray(validator, groupConfig.validators) < 0) {
                    groupConfig.validators.push(validator)
                }
            },
            _shouldRemoveGroup: function(group, validatorsInGroup) {
                var isDefaultGroup = void 0 === group,
                    isValidationGroupInstance = group && "dxValidationGroup" === group.NAME;
                return !isDefaultGroup && !isValidationGroupInstance && !validatorsInGroup.length
            },
            removeRegisteredValidator: function(group, validator) {
                var config = ValidationEngine.getGroupConfig(group),
                    validatorsInGroup = config && config.validators;
                var index = inArray(validator, validatorsInGroup);
                if (index > -1) {
                    validatorsInGroup.splice(index, 1);
                    if (this._shouldRemoveGroup(group, validatorsInGroup)) {
                        this.removeGroup(group)
                    }
                }
            },
            validateGroup: function(group) {
                var groupConfig = ValidationEngine.getGroupConfig(group);
                if (!groupConfig) {
                    throw errors.Error("E0110")
                }
                return groupConfig.validate()
            },
            resetGroup: function(group) {
                var groupConfig = ValidationEngine.getGroupConfig(group);
                if (!groupConfig) {
                    throw errors.Error("E0110")
                }
                return groupConfig.reset()
            }
        };
        ValidationEngine.initGroups();
        module.exports = ValidationEngine
    },
    /*!*********************************************!*\
      !*** ./artifacts/transpiled/events/hold.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var eventUtils = __webpack_require__( /*! ./utils */ 9),
            Emitter = __webpack_require__( /*! ./core/emitter */ 120),
            registerEmitter = __webpack_require__( /*! ./core/emitter_registrator */ 92),
            abs = Math.abs;
        var HOLD_EVENT_NAME = "dxhold",
            HOLD_TIMEOUT = 750,
            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/ui/scroll_view/ui.scrollable.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            support = __webpack_require__( /*! ../../core/utils/support */ 44),
            browser = __webpack_require__( /*! ../../core/utils/browser */ 38),
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            getPublicElement = __webpack_require__( /*! ../../core/utils/dom */ 12).getPublicElement,
            windowUtils = __webpack_require__( /*! ../../core/utils/window */ 6),
            navigator = windowUtils.getNavigator(),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13),
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            DOMComponent = __webpack_require__( /*! ../../core/dom_component */ 59),
            selectors = __webpack_require__( /*! ../widget/selectors */ 58),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            scrollEvents = __webpack_require__( /*! ./ui.events.emitter.gesture.scroll */ 491),
            simulatedStrategy = __webpack_require__( /*! ./ui.scrollable.simulated */ 301),
            NativeStrategy = __webpack_require__( /*! ./ui.scrollable.native */ 175),
            when = __webpack_require__( /*! ../../core/utils/deferred */ 7).when;
        var SCROLLABLE = "dxScrollable",
            SCROLLABLE_STRATEGY = "dxScrollableStrategy",
            SCROLLABLE_CLASS = "dx-scrollable",
            SCROLLABLE_DISABLED_CLASS = "dx-scrollable-disabled",
            SCROLLABLE_CONTAINER_CLASS = "dx-scrollable-container",
            SCROLLABLE_WRAPPER_CLASS = "dx-scrollable-wrapper",
            SCROLLABLE_CONTENT_CLASS = "dx-scrollable-content",
            VERTICAL = "vertical",
            HORIZONTAL = "horizontal",
            BOTH = "both";
        var deviceDependentOptions = function() {
            return [{
                device: function() {
                    return !support.nativeScrolling
                },
                options: {
                    useNative: false
                }
            }, {
                device: function(_device) {
                    return !devices.isSimulator() && "generic" === devices.real().platform && "generic" === _device.platform
                },
                options: {
                    bounceEnabled: false,
                    scrollByThumb: true,
                    scrollByContent: support.touch,
                    showScrollbar: "onHover"
                }
            }]
        };
        var Scrollable = DOMComponent.inherit({
            _getDefaultOptions: function() {
                return 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 support.nativeScrolling && "android" === devices.real().platform && !browser.mozilla
                    },
                    options: {
                        useSimulatedScrollbar: true
                    }
                }, {
                    device: function() {
                        return "ios" === devices.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.option("rtlEnabled"));
                    this._savedScrollOffset && this.scrollTo(this._savedScrollOffset);
                    delete this._savedScrollOffset
                } else {
                    this._savedScrollOffset = this.scrollOffset()
                }
            },
            _initScrollableMarkup: function() {
                var $element = this.$element().addClass(SCROLLABLE_CLASS),
                    $container = this._$container = $("<div>").addClass(SCROLLABLE_CONTAINER_CLASS),
                    $wrapper = this._$wrapper = $("<div>").addClass(SCROLLABLE_WRAPPER_CLASS),
                    $content = this._$content = $("<div>").addClass(SCROLLABLE_CONTENT_CLASS);
                if (domAdapter.hasDocumentProperty("onbeforeactivate") && browser.msie && browser.version < 12) {
                    eventsEngine.on($element, eventUtils.addNamespace("beforeactivate", SCROLLABLE), function(e) {
                        if (!$(e.target).is(selectors.focusable)) {
                            e.preventDefault()
                        }
                    })
                }
                $content.append($element.contents()).appendTo($container);
                $container.appendTo($wrapper);
                $wrapper.appendTo($element)
            },
            _dimensionChanged: function() {
                this.update()
            },
            _attachNativeScrollbarsCustomizationCss: function() {
                if ("desktop" === devices.real().deviceType && !(navigator.platform.indexOf("Mac") > -1 && browser.webkit)) {
                    this.$element().addClass("dx-scrollable-customizable-scrollbars")
                }
            },
            _initMarkup: function() {
                this.callBase();
                this._renderDirection()
            },
            _render: function() {
                this._renderStrategy();
                this._attachNativeScrollbarsCustomizationCss();
                this._attachEventHandlers();
                this._renderDisabledState();
                this._createActions();
                this.update();
                this.callBase();
                this._updateRtlPosition(this.option("rtlEnabled"))
            },
            _updateRtlPosition: function(rtl) {
                var that = this;
                this._updateBounds();
                if (rtl && this.option("direction") !== VERTICAL) {
                    commonUtils.deferUpdate(function() {
                        var left = that.scrollWidth() - that.clientWidth();
                        commonUtils.deferRender(function() {
                            that.scrollTo({
                                left: left
                            })
                        })
                    })
                }
            },
            _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
                };
                eventsEngine.off(this._$wrapper, "." + SCROLLABLE);
                eventsEngine.on(this._$wrapper, eventUtils.addNamespace(scrollEvents.init, SCROLLABLE), initEventData, this._initHandler.bind(this));
                eventsEngine.on(this._$wrapper, eventUtils.addNamespace(scrollEvents.start, SCROLLABLE), strategy.handleStart.bind(strategy));
                eventsEngine.on(this._$wrapper, eventUtils.addNamespace(scrollEvents.move, SCROLLABLE), strategy.handleMove.bind(strategy));
                eventsEngine.on(this._$wrapper, eventUtils.addNamespace(scrollEvents.end, SCROLLABLE), strategy.handleEnd.bind(strategy));
                eventsEngine.on(this._$wrapper, eventUtils.addNamespace(scrollEvents.cancel, SCROLLABLE), strategy.handleCancel.bind(strategy));
                eventsEngine.on(this._$wrapper, eventUtils.addNamespace(scrollEvents.stop, SCROLLABLE), strategy.handleStop.bind(strategy));
                eventsEngine.off(this._$container, "." + SCROLLABLE);
                eventsEngine.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 NativeStrategy(this) : new simulatedStrategy.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;
                    default:
                        this.callBase(args)
                }
            },
            _resetInactiveDirection: function() {
                var inactiveProp = this._getInactiveProp();
                if (!inactiveProp || !windowUtils.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 (typeUtils.isPlainObject(location)) {
                    var left = commonUtils.ensureDefined(location.left, location.x);
                    var top = commonUtils.ensureDefined(location.top, location.y);
                    return {
                        left: typeUtils.isDefined(left) ? -left : void 0,
                        top: typeUtils.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 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 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 - commonUtils.ensureDefined(targetLocation.left, location.left),
                    top: location.top - commonUtils.ensureDefined(targetLocation.top, location.top)
                });
                if (!distance.top && !distance.left) {
                    return
                }
                this._strategy.scrollBy(distance)
            },
            scrollToElement: function(element, offset) {
                offset = offset || {};
                var $element = $(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._scrollToElementPosition($element, HORIZONTAL, offset)
                }
                if (direction !== HORIZONTAL) {
                    scrollPosition.top = this._scrollToElementPosition($element, VERTICAL, offset)
                }
                this.scrollTo(scrollPosition)
            },
            _scrollToElementPosition: function($element, direction, 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()
                }
            }
        });
        registerComponent(SCROLLABLE, Scrollable);
        module.exports = Scrollable;
        module.exports.deviceDependentOptions = deviceDependentOptions
    },
    /*!*************************************************************************!*\
      !*** ./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/date_box/ui.date_utils.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _typeof = "function" === typeof Symbol && "symbol" === typeof Symbol.iterator ? function(obj) {
            return typeof obj
        } : function(obj) {
            return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
        };
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            dateSerialization = __webpack_require__( /*! ../../core/utils/date_serialization */ 63),
            isDate = __webpack_require__( /*! ../../core/utils/type */ 1).isDate,
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            dateLocalization = __webpack_require__( /*! ../../localization/date */ 32);
        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 = "undefined" === typeof format ? "undefined" : _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",
                                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 i, longestIndex = 0,
                    longestCaptionLength = 0;
                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),
                    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, showNames, 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, showNames, date) {
                    var formatDate = new Date(date.getTime());
                    formatDate.setDate(value);
                    if (!showNames) {
                        return dateLocalization.format(formatDate, "d")
                    }
                    return dateUtils.DATE_COMPONENT_TEXT_FORMATTER(value, dateLocalization.getDayNames()[formatDate.getDay()])
                },
                startValue: 1,
                endValue: void 0
            },
            month: {
                getter: "getMonth",
                setter: "setMonth",
                formatter: function(value, showNames) {
                    var monthName = dateLocalization.getMonthNames()[value];
                    return showNames ? dateUtils.DATE_COMPONENT_TEXT_FORMATTER(value + 1, monthName) : monthName
                },
                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/widget/function_template.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var TemplateBase = __webpack_require__( /*! ./ui.template_base */ 71),
            domUtils = __webpack_require__( /*! ../../core/utils/dom */ 12);
        var FunctionTemplate = TemplateBase.inherit({
            ctor: function(render) {
                this._render = render
            },
            _renderCore: function(options) {
                return domUtils.normalizeTemplateElement(this._render(options))
            }
        });
        module.exports = FunctionTemplate
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/data/abstract_store.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ../core/class */ 10),
            abstract = Class.abstract,
            EventsMixin = __webpack_require__( /*! ../core/events_mixin */ 54),
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            errorsModule = __webpack_require__( /*! ./errors */ 35),
            dataUtils = __webpack_require__( /*! ./utils */ 39),
            compileGetter = __webpack_require__( /*! ../core/utils/data */ 23).compileGetter,
            storeHelper = __webpack_require__( /*! ./store_helper */ 83),
            queryByOptions = storeHelper.queryByOptions,
            Deferred = __webpack_require__( /*! ../core/utils/deferred */ 7).Deferred,
            noop = __webpack_require__( /*! ../core/utils/common */ 4).noop,
            config = __webpack_require__( /*! ../core/config */ 25),
            storeImpl = {};
        var Store = Class.inherit({
            ctor: function(options) {
                var that = this;
                options = options || {};
                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.fireEvent("loading", [options]);
                return this._withLock(this._loadImpl(options)).done(function(result) {
                    that.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,
                        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.fireEvent("modifying");
                that.fireEvent("inserting", [values]);
                return that._addFailHandlers(that._insertImpl(values).done(function(callbackValues, callbackKey) {
                    that.fireEvent("inserted", [callbackValues, callbackKey]);
                    that.fireEvent("modified")
                }))
            },
            _insertImpl: abstract,
            update: function(key, values) {
                var that = this;
                that.fireEvent("modifying");
                that.fireEvent("updating", [key, values]);
                return that._addFailHandlers(that._updateImpl(key, values).done(function(callbackValues, callbackKey) {
                    that.fireEvent("updated", [key, config().useLegacyStoreResult ? callbackKey : callbackValues]);
                    that.fireEvent("modified")
                }))
            },
            _updateImpl: abstract,
            push: function(changes) {
                this._pushImpl(changes);
                this.fireEvent("push", [changes])
            },
            _pushImpl: noop,
            remove: function(key) {
                var that = this;
                that.fireEvent("modifying");
                that.fireEvent("removing", [key]);
                return that._addFailHandlers(that._removeImpl(key).done(function(callbackKey) {
                    that.fireEvent("removed", [callbackKey]);
                    that.fireEvent("modified")
                }))
            },
            _removeImpl: abstract,
            _addFailHandlers: function(deferred) {
                return deferred.fail(this._errorHandler).fail(errorsModule._errorHandler)
            }
        }).include(EventsMixin);
        Store.create = function(alias, options) {
            if (!(alias in storeImpl)) {
                throw errorsModule.errors.Error("E4020", alias)
            }
            return new storeImpl[alias](options)
        };
        Store.inherit = function(inheritor) {
            return function(members, alias) {
                var type = inheritor.apply(this, [members]);
                if (alias) {
                    storeImpl[alias] = type
                }
                return type
            }
        }(Store.inherit);
        module.exports = Store
    },
    /*!*********************************************!*\
      !*** ./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 */ 472)
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/ui/widget/child_default_template.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var TemplateBase = __webpack_require__( /*! ./ui.template_base */ 71);
        module.exports = TemplateBase.inherit({
            ctor: function(name) {
                this.name = 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 */ 10),
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            contains = __webpack_require__( /*! ../../core/utils/dom */ 12).contains,
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            eventUtils = __webpack_require__( /*! ../utils */ 9),
            pointerEvents = __webpack_require__( /*! ../pointer */ 27),
            Emitter = __webpack_require__( /*! ./emitter */ 120),
            registerEmitter = __webpack_require__( /*! ./emitter_registrator */ 92);
        var ACTIVE_EVENT_NAME = "dxactive",
            INACTIVE_EVENT_NAME = "dxinactive",
            ACTIVE_TIMEOUT = 30,
            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,
                    eventTarget = this._getEmitterTarget(e),
                    mouseEvent = eventUtils.isMouseEvent(e),
                    isSimulator = devices.isSimulator(),
                    deferFeedback = isSimulator || !mouseEvent,
                    activeTimeout = commonUtils.ensureDefined(this.activeTimeout, ACTIVE_TIMEOUT),
                    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/core/polyfills/promise.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var deferredUtils = __webpack_require__( /*! ../../core/utils/deferred */ 7),
            windowUtils = __webpack_require__( /*! ../../core/utils/window */ 6),
            Deferred = deferredUtils.Deferred,
            when = deferredUtils.when,
            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/events/core/wheel.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13),
            callOnce = __webpack_require__( /*! ../../core/utils/call_once */ 73),
            registerEvent = __webpack_require__( /*! ./event_registrator */ 67),
            eventUtils = __webpack_require__( /*! ../utils */ 9);
        var EVENT_NAME = "dxmousewheel",
            EVENT_NAMESPACE = "dxWheel";
        var getWheelEventName = callOnce(function() {
            return domAdapter.hasDocumentProperty("onwheel") ? "wheel" : "mousewheel"
        });
        var wheel = {
            setup: function(element) {
                var $element = $(element);
                eventsEngine.on($element, eventUtils.addNamespace(getWheelEventName(), EVENT_NAMESPACE), wheel._wheelHandler.bind(wheel))
            },
            teardown: function(element) {
                eventsEngine.off(element, "." + EVENT_NAMESPACE)
            },
            _wheelHandler: function(e) {
                var delta = this._getWheelDelta(e.originalEvent);
                eventUtils.fireEvent({
                    type: EVENT_NAME,
                    originalEvent: e,
                    delta: delta,
                    pointerType: "mouse"
                });
                e.stopPropagation()
            },
            _getWheelDelta: function(event) {
                return event.wheelDelta ? event.wheelDelta : 30 * -event.deltaY
            }
        };
        registerEvent(EVENT_NAME, wheel);
        exports.name = EVENT_NAME
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/data/odata/utils.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _typeof = "function" === typeof Symbol && "symbol" === typeof Symbol.iterator ? function(obj) {
            return typeof obj
        } : function(obj) {
            return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
        };
        var Class = __webpack_require__( /*! ../../core/class */ 10),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            iteratorUtils = __webpack_require__( /*! ../../core/utils/iterator */ 3),
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            ajax = __webpack_require__( /*! ../../core/utils/ajax */ 76),
            _Guid = __webpack_require__( /*! ../../core/guid */ 48),
            isDefined = typeUtils.isDefined,
            isPlainObject = typeUtils.isPlainObject,
            grep = __webpack_require__( /*! ../../core/utils/common */ 4).grep,
            Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7).Deferred,
            errors = __webpack_require__( /*! ../errors */ 35).errors,
            dataUtils = __webpack_require__( /*! ../utils */ 39);
        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" === typeUtils.type(value) ? value.split() : value
        };
        var hasDot = function(x) {
            return /\./.test(x)
        };

        function formatISO8601(date, skipZeroTime, skipTimezone) {
            var bag = [];
            var pad = function(n) {
                if (n < 10) {
                    return "0".concat(n)
                }
                return String(n)
            };
            var isZeroTime = function() {
                return date.getHours() + date.getMinutes() + date.getSeconds() + date.getMilliseconds() < 1
            };
            bag.push(date.getFullYear());
            bag.push("-");
            bag.push(pad(date.getMonth() + 1));
            bag.push("-");
            bag.push(pad(date.getDate()));
            if (!(skipZeroTime && isZeroTime())) {
                bag.push("T");
                bag.push(pad(date.getHours()));
                bag.push(":");
                bag.push(pad(date.getMinutes()));
                bag.push(":");
                bag.push(pad(date.getSeconds()));
                if (date.getMilliseconds()) {
                    bag.push(".");
                    bag.push(date.getMilliseconds())
                }
                if (!skipTimezone) {
                    bag.push("Z")
                }
            }
            return bag.join("")
        }

        function parseISO8601(isoString) {
            var result = new Date(60 * new Date(0).getTimezoneOffset() * 1e3),
                chunks = isoString.replace("Z", "").split("T"),
                date = /(\d{4})-(\d{2})-(\d{2})/.exec(chunks[0]),
                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]));
                result.setMilliseconds(Number(String(time[4]).substr(0, 3)) || 0)
            }
            return result
        }

        function isAbsoluteUrl(url) {
            return /^(?:[a-z]+:)?\/\//i.test(url)
        }

        function toAbsoluteUrl(basePath, relativePath) {
            var part;
            var baseParts = stripParams(basePath).split("/");
            var relativeParts = relativePath.split("/");

            function stripParams(url) {
                var index = url.indexOf("?");
                if (index > -1) {
                    return url.substr(0, index)
                }
                return url
            }
            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, options) {
            request = extend({
                async: true,
                method: "get",
                url: "",
                params: {},
                payload: null,
                headers: {},
                timeout: 3e4
            }, request);
            options = options || {};
            var beforeSend = options.beforeSend;
            if (beforeSend) {
                beforeSend(request)
            }
            var method = (request.method || "get").toLowerCase(),
                isGet = "get" === method,
                useJsonp = isGet && options.jsonp,
                params = extend({}, request.params),
                ajaxData = isGet ? params : formatPayload(request.payload),
                qs = !isGet && param(params),
                url = request.url,
                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: request.async,
                timeout: request.timeout,
                headers: request.headers,
                contentType: contentType,
                accepts: {
                    json: [JSON_VERBOSE_MIME_TYPE, "text/plain"].join()
                },
                xhrFields: {
                    withCredentials: options.withCredentials
                }
            };

            function formatPayload(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.Error("E4002")
                    }
                })
            }
        };
        var sendRequest = function sendRequest(protocolVersion, request, options) {
            var d = new Deferred;
            var ajaxOptions = ajaxOptionsForRequest(protocolVersion, request, options);
            ajax.sendRequest(ajaxOptions).always(function(obj, textStatus) {
                var extra, transformOptions = {
                        deserializeDates: options.deserializeDates,
                        fieldTypes: options.fieldTypes
                    },
                    tuple = interpretJsonFormat(obj, textStatus, transformOptions, ajaxOptions),
                    error = tuple.error,
                    data = tuple.data,
                    nextUrl = tuple.nextUrl;
                if (error) {
                    if (error.message !== dataUtils.XHR_ERROR_UNLOAD) {
                        d.reject(error)
                    }
                } else {
                    if (options.countOnly) {
                        if (isFinite(tuple.count)) {
                            d.resolve(tuple.count)
                        } else {
                            d.reject(new errors.Error("E4018"))
                        }
                    } else {
                        if (nextUrl && !options.isPaged) {
                            if (!isAbsoluteUrl(nextUrl)) {
                                nextUrl = toAbsoluteUrl(ajaxOptions.url, nextUrl)
                            }
                            sendRequest(protocolVersion, {
                                url: nextUrl
                            }, options).fail(d.reject).done(function(nextData) {
                                d.resolve(data.concat(nextData))
                            })
                        } else {
                            if (isFinite(tuple.count)) {
                                extra = {
                                    totalCount: tuple.count
                                }
                            }
                            d.resolve(data, extra)
                        }
                    }
                }
            });
            return d.promise()
        };
        var formatDotNetError = function(errorObj) {
            var message, currentError = errorObj;
            if ("message" in errorObj) {
                if (errorObj.message.value) {
                    message = errorObj.message.value
                } else {
                    message = 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) {
            if ("nocontent" === textStatus) {
                return null
            }
            var message = "Unknown error",
                response = obj,
                httpStatus = 200,
                errorData = {
                    requestOptions: ajaxOptions
                };
            if ("success" !== textStatus) {
                httpStatus = obj.status;
                message = dataUtils.errorMessageFromXhr(obj, textStatus);
                try {
                    response = JSON.parse(obj.responseText)
                } catch (x) {}
            }
            var errorObj = response && (response.then && response || response.error || response["odata.error"] || response["@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) {
                errorData.httpStatus = httpStatus;
                return extend(Error(message), errorData)
            }
            return null
        };
        var interpretJsonFormat = function(obj, textStatus, transformOptions, ajaxOptions) {
            var value, error = errorFromResponse(obj, textStatus, ajaxOptions);
            if (error) {
                return {
                    error: error
                }
            }
            if (!isPlainObject(obj)) {
                return {
                    data: obj
                }
            }
            if ("d" in obj && (Array.isArray(obj.d) || typeUtils.isObject(obj.d))) {
                value = interpretVerboseJsonFormat(obj, textStatus)
            } else {
                value = interpretLightJsonFormat(obj, textStatus)
            }
            transformTypes(value, transformOptions);
            return value
        };
        var interpretVerboseJsonFormat = function(obj) {
            var data = obj.d;
            if (!isDefined(data)) {
                return {
                    error: Error("Malformed or unsupported JSON response received")
                }
            }
            data = data;
            if (isDefined(data.results)) {
                data = data.results
            }
            return {
                data: data,
                nextUrl: obj.d.__next,
                count: parseInt(obj.d.__count, 10)
            }
        };
        var interpretLightJsonFormat = function(obj) {
            var data = obj;
            if (isDefined(data.value)) {
                data = data.value
            }
            return {
                data: data,
                nextUrl: obj["@odata.nextLink"],
                count: parseInt(obj["@odata.count"], 10)
            }
        };
        var EdmLiteral = Class.inherit({
            ctor: function(value) {
                this._value = value
            },
            valueOf: function() {
                return this._value
            }
        });
        var transformTypes = function transformTypes(obj, options) {
            options = options || {};
            each(obj, function(key, value) {
                if (null !== value && "object" === ("undefined" === typeof value ? "undefined" : _typeof(value))) {
                    if ("results" in value) {
                        obj[key] = value.results
                    }
                    transformTypes(obj[key], options)
                } else {
                    if ("string" === typeof value) {
                        var fieldTypes = options.fieldTypes,
                            canBeGuid = !fieldTypes || "String" !== fieldTypes[key];
                        if (canBeGuid && GUID_REGEX.test(value)) {
                            obj[key] = new _Guid(value)
                        }
                        if (false !== options.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'" + formatISO8601(date, true, true) + "'"
        };
        var serializeString = function(value) {
            return "'" + value.replace(/'/g, "''") + "'"
        };
        var serializePropName = function(propName) {
            if (propName instanceof EdmLiteral) {
                return propName.valueOf()
            }
            return propName.replace(/\./g, "/")
        };
        var serializeValueV4 = function serializeValueV4(value) {
            if (value instanceof Date) {
                return formatISO8601(value, false, false)
            }
            if (value instanceof _Guid) {
                return value.valueOf()
            }
            if (Array.isArray(value)) {
                return "[" + 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 _Guid) {
                return "guid'" + value + "'"
            }
            if (value instanceof EdmLiteral) {
                return value.valueOf()
            }
            if ("string" === typeof value) {
                return serializeString(value)
            }
            return String(value)
        };
        var serializeValue = function(value, protocolVersion) {
            switch (protocolVersion) {
                case 2:
                case 3:
                    return serializeValueV2(value);
                case 4:
                    return serializeValueV4(value);
                default:
                    throw errors.Error("E4002")
            }
        };
        var serializeKey = function(key, protocolVersion) {
            if (isPlainObject(key)) {
                var parts = [];
                each(key, function(k, v) {
                    parts.push(serializePropName(k) + "=" + serializeValue(v, protocolVersion))
                });
                return parts.join()
            }
            return serializeValue(key, protocolVersion)
        };
        var keyConverters = {
            String: function(value) {
                return value + ""
            },
            Int32: function(value) {
                return Math.floor(value)
            },
            Int64: function(value) {
                if (value instanceof EdmLiteral) {
                    return value
                }
                return new EdmLiteral(value + "L")
            },
            Guid: function(value) {
                if (value instanceof _Guid) {
                    return value
                }
                return new _Guid(value)
            },
            Boolean: function(value) {
                return !!value
            },
            Single: function(value) {
                if (value instanceof EdmLiteral) {
                    return value
                }
                return new EdmLiteral(value + "f")
            },
            Decimal: function(value) {
                if (value instanceof EdmLiteral) {
                    return value
                }
                return new EdmLiteral(value + "m")
            }
        };
        var convertPrimitiveValue = function(type, value) {
            if (null === value) {
                return null
            }
            var converter = keyConverters[type];
            if (!converter) {
                throw errors.Error("E4014", type)
            }
            return converter(value)
        };
        var generateSelect = function(oDataVersion, select) {
            if (!select) {
                return
            }
            if (oDataVersion < 4) {
                return serializePropName(select.join())
            }
            return grep(select, hasDot, true).join()
        };
        var generateExpand = function(oDataVersion, expand, select) {
            var generatorV2 = function() {
                var hash = {};
                if (expand) {
                    iteratorUtils.each(makeArray(expand), function() {
                        hash[serializePropName(this)] = 1
                    })
                }
                if (select) {
                    iteratorUtils.each(makeArray(select), function() {
                        var path = this.split(".");
                        if (path.length < 2) {
                            return
                        }
                        path.pop();
                        hash[serializePropName(path.join("."))] = 1
                    })
                }
                return iteratorUtils.map(hash, function(k, v) {
                    return v
                }).join()
            };
            var generatorV4 = function() {
                var format = function(hash) {
                    var formatCore = function formatCore(hash) {
                        var result = "",
                            selectValue = [],
                            expandValue = [];
                        iteratorUtils.each(hash, function(key, value) {
                            if (Array.isArray(value)) {
                                [].push.apply(selectValue, value)
                            }
                            if (isPlainObject(value)) {
                                expandValue.push(key + formatCore(value))
                            }
                        });
                        if (selectValue.length || expandValue.length) {
                            result += "(";
                            if (selectValue.length) {
                                result += "$select=" + iteratorUtils.map(selectValue, serializePropName).join()
                            }
                            if (expandValue.length) {
                                if (selectValue.length) {
                                    result += ";"
                                }
                                result += "$expand=" + iteratorUtils.map(expandValue, serializePropName).join()
                            }
                            result += ")"
                        }
                        return result
                    };
                    var result = [];
                    iteratorUtils.each(hash, function(key, value) {
                        result.push(key + formatCore(value))
                    });
                    return result.join()
                };
                var parseTree = function(exprs, root, stepper) {
                    var parseCore = function parseCore(exprParts, root, stepper) {
                        var result = stepper(root, exprParts.shift(), exprParts);
                        if (false === result) {
                            return
                        }
                        parseCore(exprParts, result, stepper)
                    };
                    iteratorUtils.each(exprs, function(_, x) {
                        parseCore(x.split("."), root, stepper)
                    })
                };
                var hash = {};
                if (expand || select) {
                    if (expand) {
                        parseTree(makeArray(expand), hash, function(node, key, path) {
                            node[key] = node[key] || {};
                            if (!path.length) {
                                return false
                            }
                            return node[key]
                        })
                    }
                    if (select) {
                        parseTree(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)
                }
            };
            if (oDataVersion < 4) {
                return generatorV2()
            }
            return generatorV4()
        };
        exports.sendRequest = sendRequest;
        exports.serializePropName = serializePropName;
        exports.serializeValue = serializeValue;
        exports.serializeKey = serializeKey;
        exports.keyConverters = keyConverters;
        exports.convertPrimitiveValue = convertPrimitiveValue;
        exports.generateExpand = generateExpand;
        exports.generateSelect = generateSelect;
        exports.EdmLiteral = EdmLiteral;
        exports.OData__internals = {
            interpretJsonFormat: interpretJsonFormat
        }
    },
    /*!*************************************************************!*\
      !*** ./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 */ 37),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            WeakMap = __webpack_require__( /*! ../polyfills/weak_map */ 180),
            isDefined = __webpack_require__( /*! ./type */ 1).isDefined,
            removeEvent = __webpack_require__( /*! ../remove_event */ 135);
        var COMPONENT_NAMES_DATA_KEY = "dxComponents",
            ANONYMOUS_COMPONENT_DATA_KEY = "dxPrivateComponent";
        var componentNames = new WeakMap,
            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)),
                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/utils/position.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var config = __webpack_require__( /*! ../config */ 25);
        var getDefaultAlignment = function(isRtlEnabled) {
            var rtlEnabled = isRtlEnabled || config().rtlEnabled;
            return rtlEnabled ? "right" : "left"
        };
        exports.getDefaultAlignment = getDefaultAlignment
    },
    /*!*****************************************!*\
      !*** ./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 */ 476),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8);
        registerComponent("dxList", ListEdit);
        module.exports = ListEdit
    },
    /*!***********************************************!*\
      !*** ./artifacts/transpiled/ui/select_box.js ***!
      \***********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            commonUtils = __webpack_require__( /*! ../core/utils/common */ 4),
            typeUtils = __webpack_require__( /*! ../core/utils/type */ 1),
            isDefined = typeUtils.isDefined,
            isPromise = typeUtils.isPromise,
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            inArray = __webpack_require__( /*! ../core/utils/array */ 11).inArray,
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            deferredUtils = __webpack_require__( /*! ../core/utils/deferred */ 7),
            getPublicElement = __webpack_require__( /*! ../core/utils/dom */ 12).getPublicElement,
            Deferred = deferredUtils.Deferred,
            errors = __webpack_require__( /*! ../core/errors */ 19),
            inkRipple = __webpack_require__( /*! ./widget/utils.ink_ripple */ 72),
            messageLocalization = __webpack_require__( /*! ../localization/message */ 14),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            eventUtils = __webpack_require__( /*! ../events/utils */ 9),
            dataQuery = __webpack_require__( /*! ../data/query */ 43),
            DropDownList = __webpack_require__( /*! ./drop_down_editor/ui.drop_down_list */ 213),
            themes = __webpack_require__( /*! ./themes */ 20),
            clickEvent = __webpack_require__( /*! ../events/click */ 17);
        var DISABLED_STATE_SELECTOR = ".dx-state-disabled",
            SELECTBOX_CLASS = "dx-selectbox",
            SELECTBOX_POPUP_CLASS = "dx-selectbox-popup",
            SELECTBOX_CONTAINER_CLASS = "dx-selectbox-container",
            SELECTBOX_POPUP_WRAPPER_CLASS = "dx-selectbox-popup-wrapper";
        var SelectBox = DropDownList.inherit({
            _supportedKeys: function() {
                var that = this,
                    parent = this.callBase(),
                    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.apply(this, arguments)
                    },
                    upArrow: function() {
                        if (parent.upArrow.apply(this, arguments)) {
                            if (!this.option("opened")) {
                                this._setNextValue(-1)
                            }
                            return true
                        }
                    },
                    downArrow: function() {
                        if (parent.downArrow.apply(this, arguments)) {
                            if (!this.option("opened")) {
                                this._setNextValue(1)
                            }
                            return true
                        }
                    },
                    leftArrow: function() {
                        searchIfNeeded();
                        parent.leftArrow.apply(this, arguments)
                    },
                    rightArrow: function() {
                        searchIfNeeded();
                        parent.rightArrow.apply(this, arguments)
                    },
                    home: function() {
                        searchIfNeeded();
                        parent.home.apply(this, arguments)
                    },
                    end: function() {
                        searchIfNeeded();
                        parent.end.apply(this, arguments)
                    },
                    escape: function() {
                        parent.escape.apply(this, arguments);
                        this._cancelEditing()
                    },
                    enter: function(e) {
                        if ("" === this._input().val() && this.option("value") && this.option("allowClearing")) {
                            this.option({
                                selectedItem: null,
                                value: null
                            });
                            this.close()
                        } else {
                            if (this.option("acceptCustomValue")) {
                                e.preventDefault();
                                return this.option("opened")
                            }
                            if (parent.enter.apply(this, arguments)) {
                                return this.option("opened")
                            }
                        }
                    },
                    space: function(e) {
                        var isOpened = this.option("opened"),
                            isSearchEnabled = this.option("searchEnabled"),
                            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
                })
            },
            _defaultOptionsRules: function() {
                var themeName = themes.current();
                return this.callBase().concat([{
                    device: function() {
                        return themes.isWin8(themeName)
                    },
                    options: {
                        _isAdaptablePopupPosition: true,
                        popupPosition: {
                            at: "left top",
                            offset: {
                                h: 0,
                                v: 0
                            }
                        }
                    }
                }, {
                    device: function() {
                        return themes.isAndroid5(themeName)
                    },
                    options: {
                        _isAdaptablePopupPosition: true,
                        popupPosition: {
                            offset: {
                                h: -16,
                                v: -8
                            }
                        },
                        useInkRipple: true
                    }
                }])
            },
            _init: function() {
                this.callBase();
                this._initCustomItemCreatingAction()
            },
            _initMarkup: function() {
                this._renderSubmitElement();
                this.$element().addClass(SELECTBOX_CLASS);
                this._renderTooltip();
                this.option("useInkRipple") && this._renderInkRipple();
                this.callBase();
                this._$container.addClass(SELECTBOX_CONTAINER_CLASS)
            },
            _renderSubmitElement: function() {
                this._$submitElement = $("<input>").attr("type", "hidden").appendTo(this.$element())
            },
            _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(),
                    index = inArray(this.option("selectedItem"), this.option("items")),
                    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(),
                    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()
            },
            _setSubmitValue: function() {
                var value = this.option("value"),
                    submitValue = "this" === this.option("valueExpr") ? this._displayGetter(value) : value;
                this._$submitElement.val(submitValue)
            },
            _getSubmitElement: function() {
                return this._$submitElement
            },
            _renderInputValue: function() {
                return this.callBase().always(function() {
                    this._renderInputValueAsync()
                }.bind(this))
            },
            _renderInputValueAsync: function() {
                this._renderTooltip();
                this._renderInputValueImpl();
                this._refreshSelected()
            },
            _renderInputValueImpl: function() {
                this._renderInputAddons()
            },
            _fitIntoRange: function(value, start, end) {
                if (value > end) {
                    return start
                }
                if (value < start) {
                    return end
                }
                return value
            },
            _setNextValue: function(step) {
                var dataSourceIsLoaded = this._dataSource.isLoaded() ? (new Deferred).resolve() : this._dataSource.load();
                dataSourceIsLoaded.done(function() {
                    var item = this._calcNextItem(step),
                        value = this._valueGetter(item);
                    this._setValue(value)
                }.bind(this))
            },
            _calcNextItem: function(step) {
                var items = this._items();
                var nextIndex = this._fitIntoRange(this._getSelectedIndex() + step, 0, items.length - 1);
                return items[nextIndex]
            },
            _items: function() {
                var items = this._getPlainItems(!this._list && this._dataSource.items());
                var availableItems = new dataQuery(items).filter("disabled", "<>", true).toArray();
                return availableItems
            },
            _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
            },
            _setSelectedItem: function(item) {
                var isUnknownItem = !this._isCustomValueAllowed() && void 0 === item;
                this.callBase(isUnknownItem ? null : item)
            },
            _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,
                    focusedElement = $(list.option("focusedElement")),
                    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._renderInputAddons()
            },
            _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()
                }
                if (this._wasSearch() && isVisible) {
                    this._wasSearch(false);
                    if (this.option("showDataBeforeSearch") || 0 === this.option("minSearchLength")) {
                        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")
            },
            _popupHidingHandler: function() {
                this._cancelEditing();
                this.callBase()
            },
            _restoreInputText: function() {
                this._loadItemDeferred && this._loadItemDeferred.always(function() {
                    if (this.option("acceptCustomValue")) {
                        return
                    }
                    if (this.option("searchEnabled")) {
                        if (!this._searchValue() && this.option("allowClearing")) {
                            this._clearTextValue();
                            return
                        }
                    }
                    var oldSelectedItem = this.option("selectedItem");
                    if ((this._displayGetter(oldSelectedItem) || "").toString() === this._searchValue()) {
                        return
                    }
                    this._renderInputValue().always(function(selectedItem) {
                        var newSelectedItem = commonUtils.ensureDefined(selectedItem, oldSelectedItem);
                        this._setSelectedItem(newSelectedItem);
                        this._updateField(newSelectedItem);
                        this._clearFilter()
                    }.bind(this))
                }.bind(this))
            },
            _focusOutHandler: function(e) {
                this.callBase(e);
                this._restoreInputText()
            },
            _clearTextValue: function() {
                this.option("value", null)
            },
            _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,
                    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"),
                    searchValue = this._searchValue(),
                    selectedItemText = this._displayGetter(selectedItem);
                return !selectedItemText || searchValue !== selectedItemText.toString()
            },
            _valueChangeEventHandler: function() {
                if (this.option("acceptCustomValue") && this._isCustomItemSelected()) {
                    this._customItemAddedHandler()
                }
            },
            _initCustomItemCreatingAction: function() {
                this._customItemCreatingAction = this._createActionByOption("onCustomItemCreating")
            },
            _createCustomItem: function(text) {
                var params = {
                        text: text
                    },
                    actionResult = this._customItemCreatingAction(params),
                    item = commonUtils.ensureDefined(actionResult, params.customItem);
                if (isDefined(actionResult)) {
                    errors.log("W0015", "onCustomItemCreating", "customItem")
                }
                return item
            },
            _customItemAddedHandler: function() {
                var searchValue = this._searchValue(),
                    item = this._createCustomItem(searchValue);
                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);
                this._setValue(this._valueGetter(item));
                this._renderDisplayText(this._displayGetter(item));
                if (null === item && this._wasSearch()) {
                    this._filterDataSource(null)
                }
            },
            _createClearButton: function() {
                var eventName = eventUtils.addNamespace(clickEvent.name, this.NAME);
                var $clearButton = this.callBase();
                eventsEngine.on($clearButton, eventName, function() {
                    return false
                });
                return $clearButton
            },
            _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),
                    isAllSelected = 0 === input.selectionStart && input.selectionEnd === this._searchValue().length,
                    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(),
                    valueLength = $input.val().length;
                if (0 === valueLength) {
                    return
                }
                var inputElement = $input.get(0),
                    displayValue = this._displayGetter(item).toString();
                inputElement.value = displayValue;
                this._caret({
                    start: valueLength,
                    end: displayValue.length
                })
            },
            _cleanInputSelection: function() {
                var inputElement = this._input().get(0),
                    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 "selectedItem":
                        if (args.previousValue !== args.value) {
                            this.callBase(args)
                        }
                        break;
                    case "allowClearing":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _clean: function() {
                delete this._inkRipple;
                this.callBase()
            }
        });
        registerComponent("dxSelectBox", SelectBox);
        module.exports = SelectBox
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/core/utils/error.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var extend = __webpack_require__( /*! ./extend */ 0).extend,
            consoleUtils = __webpack_require__( /*! ./console */ 84),
            stringUtils = __webpack_require__( /*! ./string */ 40),
            version = __webpack_require__( /*! ../version */ 132);
        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)))
                }
            };
            var combineMessage = function(args) {
                var id = args[0];
                args = args.slice(1);
                return formatMessage(id, formatDetails(id, args))
            };
            var formatDetails = function(id, args) {
                args = [exports.ERROR_MESSAGES[id]].concat(args);
                return stringUtils.format.apply(this, args).replace(/\.*\s*?$/, "")
            };
            var formatMessage = function(id, details) {
                return stringUtils.format.apply(this, ["{0} - {1}. See:\n{2}", id, details, ERROR_URL + id])
            };
            var makeError = function(args) {
                var id, details, message;
                id = args[0];
                args = args.slice(1);
                details = formatDetails(id, args);
                message = formatMessage(id, details);
                return extend(new Error(message), {
                    __id: id,
                    __details: details
                })
            };
            return exports
        }
    }, , , ,
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/animation/frame.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var windowUtils = __webpack_require__( /*! ../core/utils/window */ 6),
            window = windowUtils.hasWindow() ? windowUtils.getWindow() : {},
            callOnce = __webpack_require__( /*! ../core/utils/call_once */ 73);
        var FRAME_ANIMATION_STEP_TIME = 1e3 / 60,
            request = function(callback) {
                return setTimeout(callback, FRAME_ANIMATION_STEP_TIME)
            },
            cancel = function(requestID) {
                clearTimeout(requestID)
            };
        var setAnimationFrameMethods = callOnce(function() {
            var nativeRequest = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame,
                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_helper.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var DataSource = __webpack_require__( /*! ./data/data_source/data_source */ 50).DataSource,
            extend = __webpack_require__( /*! ./core/utils/extend */ 0).extend,
            normalizeDataSourceOptions = __webpack_require__( /*! ./data/data_source/data_source */ 50).normalizeDataSourceOptions;
        var DATA_SOURCE_OPTIONS_METHOD = "_dataSourceOptions",
            DATA_SOURCE_CHANGED_METHOD = "_dataSourceChangedHandler",
            DATA_SOURCE_LOAD_ERROR_METHOD = "_dataSourceLoadErrorHandler",
            DATA_SOURCE_LOADING_CHANGED_METHOD = "_dataSourceLoadingChangedHandler",
            DATA_SOURCE_FROM_URL_LOAD_MODE_METHOD = "_dataSourceFromUrlLoadMode",
            SPECIFIC_DATA_SOURCE_OPTION = "_getSpecificDataSourceOption";
        var DataHelperMixin = {
            postCtor: function() {
                this.on("disposing", function() {
                    this._disposeDataSource()
                }.bind(this))
            },
            _refreshDataSource: function() {
                this._initDataSource();
                this._loadDataSource()
            },
            _initDataSource: function() {
                var widgetDataSourceOptions, dataSourceType, dataSourceOptions = SPECIFIC_DATA_SOURCE_OPTION in this ? this[SPECIFIC_DATA_SOURCE_OPTION]() : this.option("dataSource");
                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))
                    }
                    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/events/gesture/swipeable.js ***!
      \**********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var swipeEvents = __webpack_require__( /*! ../swipe */ 125),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            DOMComponent = __webpack_require__( /*! ../../core/dom_component */ 59),
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            eventUtils = __webpack_require__( /*! ../utils */ 9),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            publicComponentUtils = __webpack_require__( /*! ../../core/utils/public_component */ 107);
        var DX_SWIPEABLE = "dxSwipeable",
            SWIPEABLE_CLASS = "dx-swipeable",
            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)
                }
            }
        });
        publicComponentUtils.name(Swipeable, DX_SWIPEABLE);
        module.exports = Swipeable
    },
    /*!***********************************************!*\
      !*** ./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 */ 502)
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/events/core/event_registrator_callbacks.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var MemorizedCallbacks = __webpack_require__( /*! ../../core/memorized_callbacks */ 181);
        module.exports = new MemorizedCallbacks
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/events/core/emitter.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            Class = __webpack_require__( /*! ../../core/class */ 10),
            Callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 21),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            eventUtils = __webpack_require__( /*! ../utils */ 9);
        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 "dxmousewheel" !== e.type
            },
            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/integration/knockout.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var ko = __webpack_require__( /*! knockout */ 61);
        if (ko) {
            var errors = __webpack_require__( /*! ../core/errors */ 19),
                compareVersion = __webpack_require__( /*! ../core/utils/version */ 62).compare;
            if (compareVersion(ko.version, [2, 3]) < 0) {
                throw errors.Error("E0013")
            }
            __webpack_require__( /*! ./knockout/component_registrator */ 343);
            __webpack_require__( /*! ./knockout/event_registrator */ 344);
            __webpack_require__( /*! ./knockout/components */ 345);
            __webpack_require__( /*! ./knockout/validation */ 346);
            __webpack_require__( /*! ./knockout/variable_wrapper_utils */ 347);
            __webpack_require__( /*! ./knockout/clean_node */ 348);
            __webpack_require__( /*! ./knockout/clean_node_old */ 349)
        }
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/framework/utils.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var ko = __webpack_require__( /*! knockout */ 61),
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            KoTemplate = __webpack_require__( /*! ../integration/knockout/template */ 248);
        var mergeWithReplace = function(targetArray, arrayToMerge, needReplaceFn) {
            var result = [];
            for (var i = 0, length = targetArray.length; i < length; i++) {
                if (!needReplaceFn(targetArray[i], arrayToMerge)) {
                    result.push(targetArray[i])
                }
            }
            result.push.apply(result, arrayToMerge);
            return result
        };
        var prepareCommandToReplace = function(targetCommand, commandsToMerge) {
            var needToReplace = false;
            each(commandsToMerge, function(_, commandToMerge) {
                var idEqual = targetCommand.option("id") === commandToMerge.option("id") && commandToMerge.option("id"),
                    behaviorEqual = targetCommand.option("behavior") === commandToMerge.option("behavior") && targetCommand.option("behavior");
                needToReplace = idEqual || behaviorEqual;
                if (behaviorEqual && null === commandToMerge.option("onExecute")) {
                    commandToMerge.option("onExecute", targetCommand.option("onExecute"))
                }
                if (needToReplace) {
                    targetCommand.$element().remove();
                    return false
                }
            });
            return needToReplace
        };
        var mergeCommands = function(targetCommands, commandsToMerge) {
            return mergeWithReplace(targetCommands, commandsToMerge, prepareCommandToReplace)
        };
        var resolvePropertyValue = function(command, containerOptions, propertyName, defaultValue) {
            var containerOption = containerOptions ? containerOptions[propertyName] : void 0,
                defaultOption = void 0 === containerOption ? defaultValue : containerOption,
                commandOption = command.option(propertyName);
            return void 0 === commandOption || commandOption === defaultValue ? defaultOption : commandOption
        };
        var resolveTextValue = function(command, containerOptions) {
            var showText = resolvePropertyValue(command, containerOptions, "showText"),
                hasIcon = !!command.option("icon"),
                titleValue = resolvePropertyValue(command, containerOptions, "title", "");
            return showText || !hasIcon ? titleValue : ""
        };
        var resolveIconValue = function(command, containerOptions) {
            var showIcon = resolvePropertyValue(command, containerOptions, "showIcon"),
                hasText = !!command.option("title"),
                iconValue = resolvePropertyValue(command, containerOptions, "icon", "");
            return showIcon || !hasText ? iconValue : ""
        };
        exports.utils = {
            mergeCommands: mergeCommands,
            commandToContainer: {
                resolveIconValue: resolveIconValue,
                resolveTextValue: resolveTextValue,
                resolvePropertyValue: resolvePropertyValue
            }
        };
        exports.templateProvider = {
            createTemplate: function(element) {
                return new KoTemplate(element)
            },
            applyTemplate: function(element, model) {
                ko.applyBindings(model, element)
            }
        }
    },
    /*!**************************************************************!*\
      !*** ./artifacts/transpiled/framework/navigation_manager.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ../integration/jquery */ 46);
        var $ = __webpack_require__( /*! jquery */ 29),
            Class = __webpack_require__( /*! ../core/class */ 10),
            Callbacks = __webpack_require__( /*! ../core/utils/callbacks */ 21),
            commonUtils = __webpack_require__( /*! ../core/utils/common */ 4),
            iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 3),
            isPlainObject = __webpack_require__( /*! ../core/utils/type */ 1).isPlainObject,
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            navigationDevices = __webpack_require__( /*! ./navigation_devices */ 151),
            EventsMixin = __webpack_require__( /*! ../core/events_mixin */ 54),
            errors = __webpack_require__( /*! ./errors */ 68),
            hardwareBackButton = __webpack_require__( /*! ../mobile/process_hardware_back_button */ 243).processCallback,
            hideTopOverlay = __webpack_require__( /*! ../mobile/hide_top_overlay */ 137),
            when = __webpack_require__( /*! ../core/utils/deferred */ 7).when;
        var NAVIGATION_TARGETS = {
                current: "current",
                blank: "blank",
                back: "back"
            },
            STORAGE_HISTORY_KEY = "__history";
        var HistoryBasedNavigationManager = Class.inherit({
            ctor: function(options) {
                options = options || {};
                this._currentItem = void 0;
                this._previousItem = void 0;
                this._createNavigationDevice(options)
            },
            _createNavigationDevice: function(options) {
                this._navigationDevice = options.navigationDevice || new navigationDevices.HistoryBasedNavigationDevice;
                this._navigationDevice.uriChanged.add(this._uriChangedHandler.bind(this))
            },
            _uriChangedHandler: function(uri) {
                while (hideTopOverlay()) {}
                this.navigate(uri)
            },
            _syncUriWithCurrentNavigationItem: function() {
                var currentUri = this._currentItem && this._currentItem.uri;
                this._navigationDevice.setUri(currentUri, true)
            },
            _cancelNavigation: function(args) {
                this._syncUriWithCurrentNavigationItem();
                this.fireEvent("navigationCanceled", [args])
            },
            _getDefaultOptions: function() {
                return {
                    direction: "none",
                    target: NAVIGATION_TARGETS.blank
                }
            },
            _updateHistory: function(uri, options) {
                this._previousItem = this._currentItem;
                this._currentItem = {
                    uri: uri,
                    key: uri
                };
                this._navigationDevice.setUri(uri, options.target === NAVIGATION_TARGETS.current)
            },
            _setCurrentItem: function(item) {
                this._currentItem = item
            },
            navigate: function(uri, options) {
                options = options || {};
                var args, that = this,
                    isFirstNavigate = !that._currentItem,
                    currentItem = that._currentItem || {},
                    targetItem = options.item || {},
                    currentUri = currentItem.uri,
                    currentKey = currentItem.key,
                    targetKey = targetItem.key;
                if (void 0 === uri) {
                    uri = that._navigationDevice.getUri()
                }
                if (/^_back$/.test(uri)) {
                    that.back();
                    return
                }
                options = extend(that._getDefaultOptions(), options || {});
                if (isFirstNavigate) {
                    options.target = NAVIGATION_TARGETS.current
                }
                args = {
                    currentUri: currentUri,
                    uri: uri,
                    cancel: false,
                    navigateWhen: [],
                    options: options
                };
                that.fireEvent("navigating", [args]);
                uri = args.uri;
                if (args.cancel || currentUri === uri && (void 0 === targetKey || targetKey === currentKey) && !that._forceNavigate) {
                    that._cancelNavigation(args)
                } else {
                    that._forceNavigate = false;
                    when.apply($, args.navigateWhen).done(function() {
                        commonUtils.executeAsync(function() {
                            that._updateHistory(uri, options);
                            that.fireEvent("navigated", [{
                                uri: uri,
                                previousUri: currentUri,
                                options: options,
                                item: that._currentItem
                            }])
                        })
                    })
                }
            },
            back: function() {
                return this._navigationDevice.back()
            },
            previousItem: function() {
                return this._previousItem
            },
            currentItem: function(item) {
                if (arguments.length > 0) {
                    if (!item) {
                        throw errors.Error("E3023")
                    }
                    this._setCurrentItem(item)
                } else {
                    return this._currentItem
                }
            },
            rootUri: function() {
                return this._currentItem && this._currentItem.uri
            },
            canBack: function() {
                return true
            },
            saveState: commonUtils.noop,
            restoreState: commonUtils.noop,
            removeState: commonUtils.noop
        }).include(EventsMixin);
        var StackBasedNavigationManager = HistoryBasedNavigationManager.inherit({
            ctor: function(options) {
                options = options || {};
                this.callBase(options);
                this._createNavigationStacks(options);
                hardwareBackButton.add(this._deviceBackInitiated.bind(this));
                this._stateStorageKey = options.stateStorageKey || STORAGE_HISTORY_KEY
            },
            init: function() {
                return this._navigationDevice.init()
            },
            _createNavigationDevice: function(options) {
                if (!options.navigationDevice) {
                    options.navigationDevice = new navigationDevices.StackBasedNavigationDevice
                }
                this.callBase(options);
                this._navigationDevice.backInitiated.add(this._deviceBackInitiated.bind(this))
            },
            _uriChangedHandler: function(uri) {
                this.navigate(uri)
            },
            _createNavigationStacks: function(options) {
                this.navigationStacks = {};
                this._keepPositionInStack = options.keepPositionInStack;
                this.currentStack = new NavigationStack
            },
            _deviceBackInitiated: function() {
                if (!hideTopOverlay()) {
                    this.back({
                        isHardwareButton: true
                    })
                } else {
                    this._syncUriWithCurrentNavigationItem()
                }
            },
            _getDefaultOptions: function() {
                return {
                    target: NAVIGATION_TARGETS.blank
                }
            },
            _createNavigationStack: function() {
                var result = new NavigationStack;
                result.itemsRemoved.add(this._removeItems.bind(this));
                return result
            },
            _setCurrentItem: function(item) {
                this._setCurrentStack(item.stack);
                this.currentStack.currentItem(item);
                this.callBase(item);
                this._syncUriWithCurrentNavigationItem()
            },
            _setCurrentStack: function(stackOrStackKey) {
                var stack, stackKey;
                if ("string" === typeof stackOrStackKey) {
                    stackKey = stackOrStackKey;
                    if (!(stackKey in this.navigationStacks)) {
                        this.navigationStacks[stackKey] = this._createNavigationStack()
                    }
                    stack = this.navigationStacks[stackKey]
                } else {
                    stack = stackOrStackKey;
                    stackKey = iteratorUtils.map(this.navigationStacks, function(stack, key) {
                        if (stack === stackOrStackKey) {
                            return key
                        }
                        return null
                    })[0]
                }
                this.currentStack = stack;
                this.currentStackKey = stackKey
            },
            _getViewTargetStackKey: function(uri, isRoot) {
                var result;
                if (isRoot) {
                    if (void 0 !== this.navigationStacks[uri]) {
                        result = uri
                    } else {
                        for (var stackKey in this.navigationStacks) {
                            if (this.navigationStacks[stackKey].items[0].uri === uri) {
                                result = stackKey;
                                break
                            }
                        }
                        result = result || uri
                    }
                } else {
                    result = this.currentStackKey || uri
                }
                return result
            },
            _updateHistory: function(uri, options) {
                var isRoot = options.root,
                    forceIsRoot = isRoot,
                    forceToRoot = false,
                    previousStack = this.currentStack,
                    keepPositionInStack = void 0 !== options.keepPositionInStack ? options.keepPositionInStack : this._keepPositionInStack;
                options.stack = options.stack || this._getViewTargetStackKey(uri, isRoot);
                this._setCurrentStack(options.stack);
                if (isRoot || !this.currentStack.items.length) {
                    forceToRoot = this.currentStack === previousStack;
                    forceIsRoot = true
                }
                if (isRoot && this.currentStack.items.length) {
                    if (!keepPositionInStack || forceToRoot) {
                        this.currentStack.currentIndex = 0;
                        if (this.currentItem().uri !== uri) {
                            this.currentStack.navigate(uri, true)
                        }
                    }
                    options.direction = options.direction || "none"
                } else {
                    var prevIndex = this.currentStack.currentIndex,
                        prevItem = this.currentItem() || {};
                    switch (options.target) {
                        case NAVIGATION_TARGETS.blank:
                            this.currentStack.navigate(uri);
                            break;
                        case NAVIGATION_TARGETS.current:
                            this.currentStack.navigate(uri, true);
                            break;
                        case NAVIGATION_TARGETS.back:
                            if (this.currentStack.currentIndex > 0) {
                                this.currentStack.back(uri)
                            } else {
                                this.currentStack.navigate(uri, true)
                            }
                            break;
                        default:
                            throw errors.Error("E3006", options.target)
                    }
                    if (void 0 === options.direction) {
                        var indexDelta = this.currentStack.currentIndex - prevIndex;
                        if (indexDelta < 0) {
                            options.direction = this.currentStack.currentItem().backDirection || "backward"
                        } else {
                            if (indexDelta > 0 && this.currentStack.currentIndex > 0) {
                                options.direction = "forward"
                            } else {
                                options.direction = "none"
                            }
                        }
                    }
                    prevItem.backDirection = "forward" === options.direction ? "backward" : "none"
                }
                options.root = forceIsRoot;
                this._currentItem = this.currentStack.currentItem();
                this._syncUriWithCurrentNavigationItem()
            },
            _removeItems: function(items) {
                var that = this;
                iteratorUtils.each(items, function(index, item) {
                    that.fireEvent("itemRemoved", [item])
                })
            },
            back: function(options) {
                options = options || {};
                var navigatingBackArgs = extend({
                    cancel: false
                }, options);
                this.fireEvent("navigatingBack", [navigatingBackArgs]);
                if (navigatingBackArgs.cancel) {
                    this._syncUriWithCurrentNavigationItem();
                    return
                }
                var item = this.previousItem(navigatingBackArgs.stack);
                if (item) {
                    this.navigate(item.uri, {
                        stack: navigatingBackArgs.stack,
                        target: NAVIGATION_TARGETS.back,
                        item: item
                    })
                } else {
                    this.callBase()
                }
            },
            rootUri: function() {
                return this.currentStack.items.length ? this.currentStack.items[0].uri : this.callBase()
            },
            canBack: function(stackKey) {
                var stack = stackKey ? this.navigationStacks[stackKey] : this.currentStack;
                return stack ? stack.canBack() : false
            },
            saveState: function(storage) {
                if (this.currentStack.items.length) {
                    var state = {
                        navigationStacks: {},
                        currentStackKey: this.currentStackKey
                    };
                    iteratorUtils.each(this.navigationStacks, function(stackKey, stack) {
                        var stackState = {};
                        state.navigationStacks[stackKey] = stackState;
                        stackState.currentIndex = stack.currentIndex;
                        stackState.items = iteratorUtils.map(stack.items, function(item) {
                            return {
                                key: item.key,
                                uri: item.uri
                            }
                        })
                    });
                    var json = JSON.stringify(state);
                    storage.setItem(this._stateStorageKey, json)
                } else {
                    this.removeState(storage)
                }
            },
            restoreState: function(storage) {
                if (this.disableRestoreState) {
                    return
                }
                var json = storage.getItem(this._stateStorageKey);
                if (json) {
                    try {
                        var that = this,
                            state = JSON.parse(json);
                        iteratorUtils.each(state.navigationStacks, function(stackKey, stackState) {
                            var stack = that._createNavigationStack();
                            that.navigationStacks[stackKey] = stack;
                            stack.currentIndex = stackState.currentIndex;
                            stack.items = iteratorUtils.map(stackState.items, function(item) {
                                item.stack = stack;
                                return item
                            })
                        });
                        this.currentStackKey = state.currentStackKey;
                        this.currentStack = this.navigationStacks[this.currentStackKey];
                        this._currentItem = this.currentStack.currentItem();
                        this._navigationDevice.setUri(this.currentItem().uri);
                        this._forceNavigate = true
                    } catch (e) {
                        this.removeState(storage);
                        throw errors.Error("E3007")
                    }
                }
            },
            removeState: function(storage) {
                storage.removeItem(this._stateStorageKey)
            },
            currentIndex: function() {
                return this.currentStack.currentIndex
            },
            previousItem: function(stackKey) {
                var stack = this.navigationStacks[stackKey] || this.currentStack;
                return stack.previousItem()
            },
            getItemByIndex: function(index) {
                return this.currentStack.items[index]
            },
            clearHistory: function() {
                this._createNavigationStacks({
                    keepPositionInStack: this._keepPositionInStack
                })
            },
            itemByKey: function(itemKey) {
                var result;
                iteratorUtils.each(this.navigationStacks, function(stackKey, stack) {
                    var item = stack.itemByKey(itemKey);
                    if (item) {
                        result = item;
                        return false
                    }
                });
                return result
            },
            currentItem: function(itemOrItemKey) {
                var item;
                if (arguments.length > 0) {
                    if ("string" === typeof itemOrItemKey) {
                        item = this.itemByKey(itemOrItemKey)
                    } else {
                        if (isPlainObject(itemOrItemKey)) {
                            item = itemOrItemKey
                        }
                    }
                    this.callBase(item)
                } else {
                    return this.callBase()
                }
            }
        });
        var NavigationStack = Class.inherit({
            ctor: function(options) {
                options = options || {};
                this.itemsRemoved = Callbacks();
                this.clear()
            },
            currentItem: function(item) {
                if (item) {
                    for (var i = 0; i < this.items.length; i++) {
                        if (item === this.items[i]) {
                            this.currentIndex = i;
                            break
                        }
                    }
                } else {
                    return this.items[this.currentIndex]
                }
            },
            previousItem: function() {
                return this.items.length > 1 ? this.items[this.currentIndex - 1] : void 0
            },
            canBack: function() {
                return this.currentIndex > 0
            },
            clear: function() {
                this._deleteItems(this.items);
                this.items = [];
                this.currentIndex = -1
            },
            back: function(uri) {
                this.currentIndex--;
                if (this.currentIndex < 0) {
                    throw errors.Error("E3008")
                }
                var currentItem = this.currentItem();
                if (currentItem.uri !== uri) {
                    this._updateItem(this.currentIndex, uri)
                }
            },
            forward: function() {
                this.currentIndex++;
                if (this.currentIndex >= this.items.length) {
                    throw errors.Error("E3009")
                }
            },
            navigate: function(uri, replaceCurrent) {
                if (this.currentIndex < this.items.length && this.currentIndex > -1 && this.items[this.currentIndex].uri === uri) {
                    return
                }
                if (replaceCurrent && this.currentIndex > -1) {
                    this.currentIndex--
                }
                if (this.currentIndex + 1 < this.items.length && this.items[this.currentIndex + 1].uri === uri) {
                    this.currentIndex++
                } else {
                    var toDelete = this.items.splice(this.currentIndex + 1, this.items.length - this.currentIndex - 1);
                    this.items.push({
                        stack: this
                    });
                    this.currentIndex++;
                    this._updateItem(this.currentIndex, uri);
                    this._deleteItems(toDelete)
                }
                return this.currentItem()
            },
            itemByKey: function(key) {
                for (var i = 0; i < this.items.length; i++) {
                    var item = this.items[i];
                    if (item.key === key) {
                        return item
                    }
                }
            },
            _updateItem: function(index, uri) {
                var item = this.items[index];
                item.uri = uri;
                item.key = this.items[0].uri + "_" + index + "_" + uri
            },
            _deleteItems: function(items) {
                if (items) {
                    this.itemsRemoved.fire(items)
                }
            }
        });
        HistoryBasedNavigationManager.NAVIGATION_TARGETS = NAVIGATION_TARGETS;
        exports.HistoryBasedNavigationManager = HistoryBasedNavigationManager;
        exports.StackBasedNavigationManager = StackBasedNavigationManager;
        exports.NavigationStack = NavigationStack
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/localization/globalize/core.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Globalize = __webpack_require__( /*! globalize */ 70),
            coreLocalization = __webpack_require__( /*! ../core */ 86);
        if (Globalize && Globalize.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 (!Globalize.locale()) {
                Globalize.load(likelySubtags);
                Globalize.locale("en")
            }
            coreLocalization.inject({
                locale: function(_locale) {
                    if (!_locale) {
                        return Globalize.locale().locale
                    }
                    Globalize.locale(_locale)
                }
            })
        }
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/events/swipe.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var eventUtils = __webpack_require__( /*! ./utils */ 9),
            GestureEmitter = __webpack_require__( /*! ./gesture/emitter.gesture */ 156),
            registerEmitter = __webpack_require__( /*! ./core/emitter_registrator */ 92);
        var SWIPE_START_EVENT = "dxswipestart",
            SWIPE_EVENT = "dxswipe",
            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(),
                    moveEventData = eventUtils.eventData(e),
                    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(),
                    offsetRatio = strategy.calcOffsetRatio.call(this, e),
                    isFast = strategy.isFastSwipe.call(this, e),
                    startOffset = offsetRatio,
                    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(),
                    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/ui/check_box.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            devices = __webpack_require__( /*! ../core/devices */ 16),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            inkRipple = __webpack_require__( /*! ./widget/utils.ink_ripple */ 72),
            Editor = __webpack_require__( /*! ./editor/editor */ 45),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            eventUtils = __webpack_require__( /*! ../events/utils */ 9),
            themes = __webpack_require__( /*! ./themes */ 20),
            clickEvent = __webpack_require__( /*! ../events/click */ 17);
        var CHECKBOX_CLASS = "dx-checkbox",
            CHECKBOX_ICON_CLASS = "dx-checkbox-icon",
            CHECKBOX_CHECKED_CLASS = "dx-checkbox-checked",
            CHECKBOX_CONTAINER_CLASS = "dx-checkbox-container",
            CHECKBOX_TEXT_CLASS = "dx-checkbox-text",
            CHECKBOX_HAS_TEXT_CLASS = "dx-checkbox-has-text",
            CHECKBOX_INDETERMINATE_CLASS = "dx-checkbox-indeterminate",
            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
                    }
                }, {
                    device: function() {
                        return themes.isAndroid5()
                    },
                    options: {
                        useInkRipple: 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,
                    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(),
                    checked = this.option("value"),
                    indeterminate = void 0 === checked;
                $element.toggleClass(CHECKBOX_CHECKED_CLASS, Boolean(checked));
                $element.toggleClass(CHECKBOX_INDETERMINATE_CLASS, indeterminate);
                this._$submitElement.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/core/component.js ***!
      \************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _typeof = "function" === typeof Symbol && "symbol" === typeof Symbol.iterator ? function(obj) {
            return typeof obj
        } : function(obj) {
            return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
        };
        var _createClass = function() {
            function defineProperties(target, props) {
                for (var i = 0; i < props.length; i++) {
                    var descriptor = props[i];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) {
                        descriptor.writable = true
                    }
                    Object.defineProperty(target, descriptor.key, descriptor)
                }
            }
            return function(Constructor, protoProps, staticProps) {
                if (protoProps) {
                    defineProperties(Constructor.prototype, protoProps)
                }
                if (staticProps) {
                    defineProperties(Constructor, staticProps)
                }
                return Constructor
            }
        }();

        function _toConsumableArray(arr) {
            if (Array.isArray(arr)) {
                for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {
                    arr2[i] = arr[i]
                }
                return arr2
            } else {
                return Array.from(arr)
            }
        }

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }
        var Config = __webpack_require__( /*! ./config */ 25),
            domAdapter = __webpack_require__( /*! ./dom_adapter */ 13),
            extend = __webpack_require__( /*! ./utils/extend */ 0).extend,
            Class = __webpack_require__( /*! ./class */ 10),
            Action = __webpack_require__( /*! ./action */ 81),
            errors = __webpack_require__( /*! ./errors */ 19),
            coreDataUtils = __webpack_require__( /*! ./utils/data */ 23),
            commonUtils = __webpack_require__( /*! ./utils/common */ 4),
            typeUtils = __webpack_require__( /*! ./utils/type */ 1),
            deferredUtils = __webpack_require__( /*! ../core/utils/deferred */ 7),
            Deferred = deferredUtils.Deferred,
            when = deferredUtils.when,
            Callbacks = __webpack_require__( /*! ./utils/callbacks */ 21),
            EventsMixin = __webpack_require__( /*! ./events_mixin */ 54),
            publicComponentUtils = __webpack_require__( /*! ./utils/public_component */ 107),
            devices = __webpack_require__( /*! ./devices */ 16),
            isFunction = typeUtils.isFunction,
            noop = commonUtils.noop;
        var cachedGetters = {};
        var cachedSetters = {};
        var 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;
                        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 (operation.promises && operation.promises.length) {
                            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
        }();
        var Component = Class.inherit({
            _setDeprecatedOptions: function() {
                this._deprecatedOptions = {}
            },
            _getDeprecatedOptions: function() {
                return this._deprecatedOptions
            },
            _getOptionAliasesByName: function(optionName) {
                var _this = this;
                return Object.keys(this._deprecatedOptions).filter(function(aliasName) {
                    return optionName === _this._deprecatedOptions[aliasName].alias
                })
            },
            _getDefaultOptions: function() {
                return {
                    onInitialized: null,
                    onOptionChanged: null,
                    onDisposing: null,
                    defaultOptionsRules: null
                }
            },
            _setDefaultOptions: function() {
                this._options = this._getDefaultOptions()
            },
            _defaultOptionsRules: function() {
                return []
            },
            _setOptionsByDevice: function(customRules) {
                var rules = this._defaultOptionsRules();
                if (Array.isArray(customRules)) {
                    rules = rules.concat(customRules)
                }
                var rulesOptions = this._convertRulesToOptions(rules);
                extend(true, this._options, rulesOptions);
                for (var fieldName in this._optionsByReference) {
                    if (rulesOptions.hasOwnProperty(fieldName)) {
                        this._options[fieldName] = rulesOptions[fieldName]
                    }
                }
            },
            _convertRulesToOptions: function(rules) {
                var options = {};
                var currentDevice = devices.current();
                var deviceMatch = function(device, filter) {
                    var filterArray = [];
                    Array.prototype.push.call(filterArray, filter);
                    return 1 === filterArray.length && typeUtils.isEmptyObject(filterArray[0]) || commonUtils.findBestMatches(device, filterArray).length > 0
                };
                for (var i = 0; i < rules.length; i++) {
                    var match, rule = rules[i],
                        deviceFilter = rule.device || {};
                    if (isFunction(deviceFilter)) {
                        match = deviceFilter(currentDevice)
                    } else {
                        match = deviceMatch(currentDevice, deviceFilter)
                    }
                    if (match) {
                        extend(options, rule.options)
                    }
                }
                return options
            },
            _isInitialOptionValue: function(name) {
                var optionValue = this.option(name),
                    initialOptionValue = this.initialOption(name),
                    isInitialOption = isFunction(optionValue) && isFunction(initialOptionValue) ? optionValue.toString() === initialOptionValue.toString() : commonUtils.equalByValue(optionValue, initialOptionValue);
                return isInitialOption
            },
            _setOptionsByReference: function() {
                this._optionsByReference = {}
            },
            _getOptionsByReference: function() {
                return this._optionsByReference
            },
            ctor: function(options) {
                this.NAME = publicComponentUtils.name(this.constructor);
                options = options || {};
                if (options.eventsStrategy) {
                    this.setEventsStrategy(options.eventsStrategy)
                }
                this._options = {};
                this._updateLockCount = 0;
                this._optionChangedCallbacks = options._optionChangedCallbacks || Callbacks();
                this._disposingCallbacks = options._disposingCallbacks || Callbacks();
                this.postponedOperations = new PostponedOperations;
                this.beginUpdate();
                try {
                    this._suppressDeprecatedWarnings();
                    this._setOptionsByReference();
                    this._setDeprecatedOptions();
                    this._setDefaultOptions();
                    if (options && options.onInitializing) {
                        options.onInitializing.apply(this, [options])
                    }
                    this._setOptionsByDevice(options.defaultOptionsRules);
                    this._resumeDeprecatedWarnings();
                    this._initOptions(options)
                } finally {
                    this.endUpdate()
                }
            },
            _initOptions: function(options) {
                this.option(options)
            },
            _optionValuesEqual: function(name, oldValue, newValue) {
                oldValue = coreDataUtils.toComparable(oldValue, true);
                newValue = coreDataUtils.toComparable(newValue, true);
                if (oldValue && newValue && typeUtils.isRenderer(oldValue) && typeUtils.isRenderer(newValue)) {
                    return newValue.is(oldValue)
                }
                var oldValueIsNaN = oldValue !== oldValue,
                    newValueIsNaN = newValue !== newValue;
                if (oldValueIsNaN && newValueIsNaN) {
                    return true
                }
                if (null === oldValue || "object" !== ("undefined" === typeof oldValue ? "undefined" : _typeof(oldValue)) || domAdapter.isElementNode(oldValue)) {
                    return oldValue === newValue
                }
                return false
            },
            _init: function() {
                this._createOptionChangedAction();
                this.on("disposing", function(args) {
                    this._disposingCallbacks.fireWith(this, [args])
                }.bind(this))
            },
            _createOptionChangedAction: function() {
                this._optionChangedAction = this._createActionByOption("onOptionChanged", {
                    excludeValidators: ["disabled", "readOnly", "designMode"]
                })
            },
            _createDisposingAction: function() {
                this._disposingAction = this._createActionByOption("onDisposing", {
                    excludeValidators: ["disabled", "readOnly", "designMode"]
                })
            },
            _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._disposeEvents();
                this._disposed = true
            },
            instance: function() {
                return this
            },
            beginUpdate: function() {
                this._updateLockCount++
            },
            endUpdate: function() {
                this._updateLockCount = Math.max(this._updateLockCount - 1, 0);
                if (!this._updateLockCount) {
                    this.postponedOperations.callPostponedOperations();
                    if (!this._initializing && !this._initialized) {
                        this._initializing = true;
                        try {
                            this._init()
                        } finally {
                            this._initializing = false;
                            this._updateLockCount++;
                            this._createActionByOption("onInitialized", {
                                excludeValidators: ["disabled", "readOnly", "designMode"]
                            })();
                            this._updateLockCount--;
                            this._initialized = true
                        }
                    }
                }
            },
            _logWarningIfDeprecated: function(option) {
                var info = this._deprecatedOptions[option];
                if (info && !this._deprecatedOptionsSuppressed) {
                    this._logDeprecatedWarning(option, info)
                }
            },
            _logDeprecatedWarningCount: 0,
            _logDeprecatedWarning: function(option, info) {
                var message = info.message || "Use the '" + info.alias + "' option instead";
                errors.log("W0001", this.NAME, option, info.since, message);
                ++this._logDeprecatedWarningCount
            },
            _suppressDeprecatedWarnings: function() {
                this._deprecatedOptionsSuppressed = true
            },
            _resumeDeprecatedWarnings: function() {
                this._deprecatedOptionsSuppressed = false
            },
            _optionChanging: noop,
            _notifyOptionChanged: function(option, value, previousValue) {
                var that = this;
                if (this._initialized) {
                    var optionNames = [option].concat(that._getOptionAliasesByName(option));
                    for (var i = 0; i < optionNames.length; i++) {
                        var name = optionNames[i],
                            args = {
                                name: name.split(/[.\[]/)[0],
                                fullName: name,
                                value: value,
                                previousValue: previousValue
                            };
                        that._optionChangedCallbacks.fireWith(that, [extend(that._defaultActionArgs(), args)]);
                        that._optionChangedAction(extend({}, args));
                        if (!that._disposed) {
                            that._optionChanged(args)
                        }
                    }
                }
            },
            initialOption: function(optionName) {
                var currentOptions, currentInitialized = this._initialized;
                if (!this._initialOptions) {
                    currentOptions = this._options;
                    this._options = {};
                    this._initialized = false;
                    this._setDefaultOptions();
                    this._setOptionsByDevice(currentOptions.defaultOptionsRules);
                    this._initialOptions = this._options;
                    this._options = currentOptions;
                    this._initialized = currentInitialized
                }
                return this._initialOptions[optionName]
            },
            _defaultActionConfig: function() {
                return {
                    context: this,
                    component: this
                }
            },
            _defaultActionArgs: function() {
                return {
                    component: this
                }
            },
            _createAction: function(actionSource, config) {
                var action, that = this;
                return function(e) {
                    if (!arguments.length) {
                        e = {}
                    }
                    if (!typeUtils.isPlainObject(e)) {
                        e = {
                            actionValue: e
                        }
                    }
                    action = action || new Action(actionSource, extend(config, that._defaultActionConfig()));
                    return action.execute.call(action, extend(e, that._defaultActionArgs()))
                }
            },
            _createActionByOption: function(optionName, config) {
                var action, eventName, actionFunc, that = this;
                var result = function() {
                    if (!eventName) {
                        config = config || {};
                        if ("string" !== typeof optionName) {
                            throw errors.Error("E0008")
                        }
                        if (0 === optionName.indexOf("on")) {
                            eventName = that._getEventName(optionName)
                        }
                        if (0 !== optionName.indexOf("on")) {
                            throw Error("The '" + optionName + "' option name should start with 'on' prefix")
                        }
                        actionFunc = that.option(optionName)
                    }
                    if (!action && !actionFunc && !config.beforeExecute && !config.afterExecute && !that.hasEvent(eventName)) {
                        return
                    }
                    if (!action) {
                        var beforeExecute = config.beforeExecute;
                        config.beforeExecute = function(args) {
                            beforeExecute && beforeExecute.apply(that, arguments);
                            that.fireEvent(eventName, args.args)
                        };
                        that._suppressDeprecatedWarnings();
                        action = that._createAction(actionFunc, config);
                        that._resumeDeprecatedWarnings()
                    }
                    if (Config().wrapActionsBeforeExecute) {
                        var beforeActionExecute = that.option("beforeActionExecute") || noop;
                        var wrappedAction = beforeActionExecute(that, action, config) || action;
                        return wrappedAction.apply(that, arguments)
                    }
                    return action.apply(that, arguments)
                };
                if (!Config().wrapActionsBeforeExecute) {
                    var onActionCreated = that.option("onActionCreated") || noop;
                    result = onActionCreated(that, result, config) || result
                }
                return result
            },
            _getEventName: function(actionName) {
                return actionName.charAt(2).toLowerCase() + actionName.substr(3)
            },
            hasActionSubscription: function(actionName) {
                return !!this.option(actionName) || this.hasEvent(this._getEventName(actionName))
            },
            isOptionDeprecated: function(name) {
                var deprecatedOptions = this._getDeprecatedOptions();
                return deprecatedOptions.hasOwnProperty(name)
            },
            option: function() {
                var normalizeOptionName = function(that, name) {
                    var deprecate;
                    if (name) {
                        if (!that._cachedDeprecateNames) {
                            that._cachedDeprecateNames = [];
                            for (var optionName in that._deprecatedOptions) {
                                that._cachedDeprecateNames.push(optionName)
                            }
                        }
                        for (var i = 0; i < that._cachedDeprecateNames.length; i++) {
                            if (that._cachedDeprecateNames[i] === name) {
                                deprecate = that._deprecatedOptions[name];
                                break
                            }
                        }
                        if (deprecate) {
                            that._logWarningIfDeprecated(name);
                            var alias = deprecate.alias;
                            if (alias) {
                                name = alias
                            }
                        }
                    }
                    return name
                };
                var getPreviousName = function(fullName) {
                    var splitNames = fullName.split(".");
                    splitNames.pop();
                    return splitNames.join(".")
                };
                var getFieldName = function(fullName) {
                    var splitNames = fullName.split(".");
                    return splitNames[splitNames.length - 1]
                };
                var getOptionValue = function(options, name, unwrapObservables) {
                    var getter = cachedGetters[name];
                    if (!getter) {
                        getter = cachedGetters[name] = coreDataUtils.compileGetter(name)
                    }
                    return getter(options, {
                        functionsAsIs: true,
                        unwrapObservables: unwrapObservables
                    })
                };
                var clearOptionsField = function(options, name) {
                    delete options[name];
                    var previousFieldName = getPreviousName(name),
                        fieldName = getFieldName(name),
                        fieldObject = previousFieldName ? getOptionValue(options, previousFieldName, false) : options;
                    if (fieldObject) {
                        delete fieldObject[fieldName]
                    }
                };
                var setOptionsField = function(options, fullName, value) {
                    var fieldObject, fieldName = "";
                    do {
                        if (fieldName) {
                            fieldName = "." + fieldName
                        }
                        fieldName = getFieldName(fullName) + fieldName;
                        fullName = getPreviousName(fullName);
                        fieldObject = fullName ? getOptionValue(options, fullName, false) : options
                    } while (!fieldObject);
                    fieldObject[fieldName] = value
                };
                var normalizeOptionValue = function(that, options, name, value) {
                    if (name) {
                        var alias = normalizeOptionName(that, name);
                        if (alias && alias !== name) {
                            setOptionsField(options, alias, value);
                            clearOptionsField(options, name)
                        }
                    }
                };
                var prepareOption = function prepareOption(that, options, name, value) {
                    if (typeUtils.isPlainObject(value)) {
                        for (var valueName in value) {
                            prepareOption(that, options, name + "." + valueName, value[valueName])
                        }
                    }
                    normalizeOptionValue(that, options, name, value)
                };
                var setOptionValue = function(that, name, value) {
                    if (!cachedSetters[name]) {
                        cachedSetters[name] = coreDataUtils.compileSetter(name)
                    }
                    var path = name.split(/[.\[]/);
                    cachedSetters[name](that._options, value, {
                        functionsAsIs: true,
                        merge: !that._getOptionsByReference()[name],
                        unwrapObservables: path.length > 1 && !!that._getOptionsByReference()[path[0]]
                    })
                };
                var setOption = function(that, name, value) {
                    var previousValue = getOptionValue(that._options, name, false);
                    if (that._optionValuesEqual(name, previousValue, value)) {
                        return
                    }
                    if (that._initialized) {
                        that._optionChanging(name, previousValue, value)
                    }
                    setOptionValue(that, name, value);
                    that._notifyOptionChanged(name, value, previousValue)
                };
                return function(options, value) {
                    var that = this,
                        name = options;
                    if (arguments.length < 2 && "object" !== typeUtils.type(name)) {
                        name = normalizeOptionName(that, name);
                        return getOptionValue(that._options, name)
                    }
                    if ("string" === typeof name) {
                        options = {};
                        options[name] = value
                    }
                    that.beginUpdate();
                    try {
                        var optionName;
                        for (optionName in options) {
                            prepareOption(that, options, optionName, options[optionName])
                        }
                        for (optionName in options) {
                            setOption(that, optionName, options[optionName])
                        }
                    } finally {
                        that.endUpdate()
                    }
                }
            }(),
            _getOptionValue: function(name, context) {
                var value = this.option(name);
                if (isFunction(value)) {
                    return value.bind(context)()
                }
                return value
            }
        }).include(EventsMixin);
        module.exports = Component;
        module.exports.PostponedOperations = PostponedOperations
    },
    /*!***********************************************************************************!*\
      !*** ./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),
            Class = __webpack_require__( /*! ../../core/class */ 10),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            iteratorUtils = __webpack_require__( /*! ../../core/utils/iterator */ 3),
            fx = __webpack_require__( /*! ../fx */ 31),
            animationPresetsModule = __webpack_require__( /*! ../presets/presets */ 148),
            deferredUtils = __webpack_require__( /*! ../../core/utils/deferred */ 7),
            when = deferredUtils.when,
            Deferred = deferredUtils.Deferred;
        var directionPostfixes = {
                forward: " dx-forward",
                backward: " dx-backward",
                none: " dx-no-direction",
                undefined: " dx-no-direction"
            },
            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 animationConfig, that = this,
                    result = [];
                configModifier = configModifier || {};
                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,
                                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 result, that = this;
                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/list/ui.list.edit.decorator.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            Class = __webpack_require__( /*! ../../core/class */ 10),
            swipeEvents = __webpack_require__( /*! ../../events/swipe */ 125),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9);
        var LIST_EDIT_DECORATOR = "dxListEditDecorator",
            SWIPE_START_EVENT_NAME = eventUtils.addNamespace(swipeEvents.start, LIST_EDIT_DECORATOR),
            SWIPE_UPDATE_EVENT_NAME = eventUtils.addNamespace(swipeEvents.swipe, LIST_EDIT_DECORATOR),
            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/bundles/modules/core.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var windowUtils = __webpack_require__( /*! ../../core/utils/window */ 6);
        var window = windowUtils.getWindow();
        var DevExpress = window.DevExpress = window.DevExpress || {};
        var errors = DevExpress.errors = __webpack_require__( /*! ../../core/errors */ 19);
        if (DevExpress._DEVEXTREME_BUNDLE_INITIALIZED) {
            throw errors.Error("E0024")
        }
        DevExpress._DEVEXTREME_BUNDLE_INITIALIZED = true;
        DevExpress.clientExporter = __webpack_require__( /*! ../../exporter */ 179);
        DevExpress.VERSION = __webpack_require__( /*! ../../core/version */ 132);
        DevExpress.Class = __webpack_require__( /*! ../../core/class */ 10);
        DevExpress.DOMComponent = __webpack_require__( /*! ../../core/dom_component */ 59);
        DevExpress.Component = __webpack_require__( /*! ../../core/component */ 128);
        DevExpress.registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8);
        DevExpress.devices = __webpack_require__( /*! ../../core/devices */ 16);
        DevExpress.Color = __webpack_require__( /*! ../../color */ 91);
        var animationFrame = __webpack_require__( /*! ../../animation/frame */ 115);
        DevExpress.EventsMixin = __webpack_require__( /*! ../../core/events_mixin */ 54);
        DevExpress.utils = {};
        DevExpress.utils.requestAnimationFrame = animationFrame.requestAnimationFrame;
        DevExpress.utils.cancelAnimationFrame = animationFrame.cancelAnimationFrame;
        DevExpress.utils.initMobileViewport = __webpack_require__( /*! ../../mobile/init_mobile_viewport/init_mobile_viewport */ 242).initMobileViewport;
        DevExpress.utils.extendFromObject = __webpack_require__( /*! ../../core/utils/extend */ 0).extendFromObject;
        DevExpress.utils.createComponents = __webpack_require__( /*! ../../core/utils/dom */ 12).createComponents;
        DevExpress.utils.triggerShownEvent = __webpack_require__( /*! ../../core/utils/dom */ 12).triggerShownEvent;
        DevExpress.utils.triggerHidingEvent = __webpack_require__( /*! ../../core/utils/dom */ 12).triggerHidingEvent;
        DevExpress.utils.resetActiveElement = __webpack_require__( /*! ../../core/utils/dom */ 12).resetActiveElement;
        DevExpress.utils.findBestMatches = __webpack_require__( /*! ../../core/utils/common */ 4).findBestMatches;
        DevExpress.createQueue = __webpack_require__( /*! ../../core/utils/queue */ 182).create;
        DevExpress.utils.dom = __webpack_require__( /*! ../../core/utils/dom */ 12);
        DevExpress.utils.common = __webpack_require__( /*! ../../core/utils/common */ 4);
        DevExpress.utils.date = __webpack_require__( /*! ../../core/utils/date */ 22);
        DevExpress.utils.browser = __webpack_require__( /*! ../../core/utils/browser */ 38);
        DevExpress.utils.inflector = __webpack_require__( /*! ../../core/utils/inflector */ 34);
        DevExpress.utils.iterator = __webpack_require__( /*! ../../core/utils/iterator */ 3);
        DevExpress.utils.resizeCallbacks = __webpack_require__( /*! ../../core/utils/resize_callbacks */ 133);
        DevExpress.utils.console = __webpack_require__( /*! ../../core/utils/console */ 84);
        DevExpress.utils.string = __webpack_require__( /*! ../../core/utils/string */ 40);
        DevExpress.utils.support = __webpack_require__( /*! ../../core/utils/support */ 44);
        DevExpress.processHardwareBackButton = __webpack_require__( /*! ../../mobile/process_hardware_back_button */ 243);
        DevExpress.viewPort = __webpack_require__( /*! ../../core/utils/view_port */ 66).value;
        DevExpress.hideTopOverlay = __webpack_require__( /*! ../../mobile/hide_top_overlay */ 137);
        DevExpress.formatHelper = __webpack_require__( /*! ../../format_helper */ 75);
        DevExpress.config = __webpack_require__( /*! ../../core/config */ 25);
        DevExpress.animationPresets = __webpack_require__( /*! ../../animation/presets/presets */ 148).presets;
        DevExpress.fx = __webpack_require__( /*! ../../animation/fx */ 31);
        DevExpress.TransitionExecutor = __webpack_require__( /*! ../../animation/transition_executor/transition_executor */ 129).TransitionExecutor;
        DevExpress.AnimationPresetCollection = __webpack_require__( /*! ../../animation/presets/presets */ 148).PresetCollection;
        DevExpress.events = __webpack_require__( /*! ../../events */ 336);
        DevExpress.events.click = __webpack_require__( /*! ../../events/click */ 17);
        DevExpress.events.utils = __webpack_require__( /*! ../../events/utils */ 9);
        DevExpress.events.GestureEmitter = __webpack_require__( /*! ../../events/gesture/emitter.gesture */ 156);
        DevExpress.localization = __webpack_require__( /*! ../../localization */ 339);
        module.exports = DevExpress
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/core/version.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = "18.2.3"
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/core/utils/resize_callbacks.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var windowUtils = __webpack_require__( /*! ./window */ 6),
            domAdapter = __webpack_require__( /*! ../dom_adapter */ 13),
            Callbacks = __webpack_require__( /*! ./callbacks */ 21),
            readyCallbacks = __webpack_require__( /*! ./ready_callbacks */ 52),
            callOnce = __webpack_require__( /*! ./call_once */ 73);
        var resizeCallbacks = function() {
            var prevSize, callbacks = Callbacks(),
                originalCallbacksAdd = callbacks.add,
                originalCallbacksRemove = callbacks.remove;
            if (!windowUtils.hasWindow()) {
                return callbacks
            }
            var formatSize = function() {
                var documentElement = domAdapter.getDocumentElement();
                return {
                    width: documentElement.clientWidth,
                    height: documentElement.clientHeight
                }
            };
            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/ui/popover.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _typeof = "function" === typeof Symbol && "symbol" === typeof Symbol.iterator ? function(obj) {
            return typeof obj
        } : function(obj) {
            return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
        };
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6),
            window = windowUtils.getWindow(),
            domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 13),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            stringUtils = __webpack_require__( /*! ../core/utils/string */ 40),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            translator = __webpack_require__( /*! ../animation/translator */ 24),
            positionUtils = __webpack_require__( /*! ../animation/position */ 78),
            noop = __webpack_require__( /*! ../core/utils/common */ 4).noop,
            typeUtils = __webpack_require__( /*! ../core/utils/type */ 1),
            mathUtils = __webpack_require__( /*! ../core/utils/math */ 30),
            eventUtils = __webpack_require__( /*! ../events/utils */ 9),
            Popup = __webpack_require__( /*! ./popup */ 55);
        var POPOVER_CLASS = "dx-popover",
            POPOVER_WRAPPER_CLASS = "dx-popover-wrapper",
            POPOVER_ARROW_CLASS = "dx-popover-arrow",
            POPOVER_WITHOUT_TITLE_CLASS = "dx-popover-without-title",
            POSITION_FLIP_MAP = {
                left: "right",
                top: "bottom",
                right: "left",
                bottom: "top",
                center: "center"
            },
            WEIGHT_OF_SIDES = {
                left: -1,
                top: -1,
                center: 0,
                right: 1,
                bottom: 1
            },
            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"
                }
            },
            SIDE_BORDER_WIDTH_STYLES = {
                left: "borderLeftWidth",
                top: "borderTopWidth",
                right: "borderRightWidth",
                bottom: "borderBottomWidth"
            },
            getEventName = function(that, optionName) {
                var optionValue = that.option(optionName);
                return getEventNameByOption(optionValue)
            },
            getEventNameByOption = function(optionValue) {
                return typeUtils.isObject(optionValue) ? optionValue.name : optionValue
            },
            getEventDelay = function(that, optionName) {
                var optionValue = that.option(optionName);
                return typeUtils.isObject(optionValue) && optionValue.delay
            },
            attachEvent = function(that, name) {
                var delay, action, handler, eventName, target = that.option("target"),
                    event = getEventName(that, name + "Event");
                if (!event || that.option("disabled")) {
                    return
                }
                eventName = eventUtils.addNamespace(event, that.NAME);
                action = that._createAction(function() {
                    delay = getEventDelay(that, name + "Event");
                    this._clearEventTimeout("hide" === name);
                    if (delay) {
                        this._timeouts[name] = setTimeout(function() {
                            that[name]()
                        }, delay)
                    } else {
                        that[name]()
                    }
                }.bind(that), {
                    validatingTargetName: "target"
                });
                handler = function(e) {
                    action({
                        event: e,
                        target: $(e.currentTarget)
                    })
                };
                if (target.jquery || target.nodeType || typeUtils.isWindow(target)) {
                    that["_" + name + "EventHandler"] = void 0;
                    eventsEngine.on(target, eventName, handler)
                } else {
                    that["_" + name + "EventHandler"] = handler;
                    eventsEngine.on(domAdapter.getDocument(), eventName, target, handler)
                }
            },
            detachEvent = function(that, target, name, event) {
                var eventName = event || getEventName(that, name + "Event");
                if (!eventName) {
                    return
                }
                eventName = eventUtils.addNamespace(eventName, that.NAME);
                if (that["_" + name + "EventHandler"]) {
                    eventsEngine.off(domAdapter.getDocument(), eventName, target, that["_" + name + "EventHandler"])
                } else {
                    eventsEngine.off($(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: 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);
                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,
                        newPopupContentHeight = this._$popupContent.height() - containerLocation.v.oversize;
                    this._$content.height(newOverlayContentHeight);
                    this._$popupContent.height(newPopupContentHeight)
                }
            },
            _getContainerPosition: function() {
                var offset = stringUtils.pairToObject(this._position.offset || "");
                var hOffset = offset.h;
                var vOffset = offset.v;
                var isPopoverInside = this._isPopoverInside();
                var sign = (isPopoverInside ? -1 : 1) * WEIGHT_OF_SIDES[this._positionSide];
                var arrowSizeCorrection = this._getContentBorderWidth(this._positionSide);
                if (this._isVerticalSide()) {
                    vOffset += sign * (this._$arrow.height() - arrowSizeCorrection)
                } else {
                    if (this._isHorizontalSide()) {
                        hOffset += sign * (this._$arrow.width() - arrowSizeCorrection)
                    }
                }
                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) {
                this._$arrow.css(POSITION_FLIP_MAP[side], -(this._isVerticalSide(side) ? this._$arrow.height() : this._$arrow.width()));
                var axis = this._isVerticalSide(side) ? "left" : "top";
                var sizeProperty = this._isVerticalSide(side) ? "outerWidth" : "outerHeight";
                var $target = $(this._position.of);
                var targetOffset = positionUtils.offset($target) || {
                    top: 0,
                    left: 0
                };
                var contentOffset = positionUtils.offset(this._$content);
                var arrowSize = this._$arrow[sizeProperty]();
                var contentLocation = contentOffset[axis];
                var contentSize = this._$content[sizeProperty]();
                var targetLocation = targetOffset[axis];
                var targetSize = $target.get(0).preventDefault ? 0 : $target[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()
                }
            },
            _renderShadingPosition: function() {
                if (this.option("shading")) {
                    this._$wrapper.css({
                        top: 0,
                        left: 0
                    })
                }
            },
            _renderShadingDimensions: 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),
                    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,
                    horizontalWeight = Math.abs(WEIGHT_OF_SIDES[my.h] - weightSign * WEIGHT_OF_SIDES[at.h]),
                    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(visibility) {
                clearTimeout(this._timeouts[visibility ? "show" : "hide"])
            },
            _clean: function() {
                this._detachEvents(this.option("target"));
                this.callBase.apply(this, arguments)
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "showTitle":
                    case "title":
                    case "titleTemplate":
                        this.callBase(args);
                        this._renderGeometry();
                        break;
                    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),
                            event = getEventNameByOption(args.previousValue);
                        this.hide();
                        detachEvent(this, this.option("target"), name, event);
                        attachEvent(this, name);
                        break;
                    case "visible":
                        this._clearEventTimeout(args.value);
                        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/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 */ 37).beforeCleanData;
        var eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5);
        var registerEvent = __webpack_require__( /*! ../events/core/event_registrator */ 67);
        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/data/array_utils.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _typeof = "function" === typeof Symbol && "symbol" === typeof Symbol.iterator ? function(obj) {
            return typeof obj
        } : function(obj) {
            return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
        };
        var _type = __webpack_require__( /*! ../core/utils/type */ 1);
        var _config = __webpack_require__( /*! ../core/config */ 25);
        var _config2 = _interopRequireDefault(_config);
        var _guid = __webpack_require__( /*! ../core/guid */ 48);
        var _guid2 = _interopRequireDefault(_guid);
        var _extend = __webpack_require__( /*! ../core/utils/extend */ 0);
        var _errors = __webpack_require__( /*! ./errors */ 35);
        var _object = __webpack_require__( /*! ../core/utils/object */ 51);
        var _object2 = _interopRequireDefault(_object);
        var _utils = __webpack_require__( /*! ./utils */ 39);

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

        function hasKey(target, keyOrKeys) {
            var key, 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, 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 generateHasKeyCache(keyInfo, array) {
            if (keyInfo.key() && !array._hasKeyMap) {
                var hasKeyMap = {};
                for (var i = 0, arrayLength = array.length; i < arrayLength; i++) {
                    hasKeyMap[JSON.stringify(keyInfo.keyOf(array[i]))] = true
                }
                array._hasKeyMap = hasKeyMap
            }
        }

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

        function setHasKeyCacheValue(array, key) {
            if (array._hasKeyMap) {
                array._hasKeyMap[JSON.stringify(key)] = true
            }
        }

        function applyBatch(keyInfo, array, batchData, groupCount, useInsertIndex) {
            batchData.forEach(function(item) {
                var items = "insert" === item.type ? array : getItems(keyInfo, array, item.key, groupCount);
                generateHasKeyCache(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, extendComplexObject = true,
                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"))
                }
                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, obj, keyExpr = keyInfo.key();
            obj = (0, _type.isPlainObject)(data) ? (0, _extend.extend)({}, data) : data;
            if (keyExpr) {
                keyValue = keyInfo.keyOf(obj);
                if (void 0 === keyValue || "object" === ("undefined" === typeof keyValue ? "undefined" : _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)
            }
            setHasKeyCacheValue(array, keyValue);
            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/mobile/hide_top_overlay.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var inArray = __webpack_require__( /*! ../core/utils/array */ 11).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(),
                        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/localization/currency.js ***!
      \*******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            numberLocalization = __webpack_require__( /*! ./number */ 49);
        numberLocalization.inject({
            _formatNumberCore: function(value, format, formatConfig) {
                if ("currency" === format) {
                    formatConfig.precision = formatConfig.precision || 0;
                    var result = this.format(value, extend({}, formatConfig, {
                            type: "fixedpoint"
                        })),
                        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/core/component_registrator_callbacks.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var MemorizedCallbacks = __webpack_require__( /*! ./memorized_callbacks */ 181);
        module.exports = new MemorizedCallbacks
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/animation/presets/presets.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Component = __webpack_require__( /*! ../../core/component */ 128),
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            fx = __webpack_require__( /*! ../fx */ 31);
        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,
                            direction = configModifier.direction,
                            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,
                            direction = configModifier.direction,
                            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,
                            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,
                            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,
                    baseConfig = {
                        type: "css",
                        extraCssClasses: "dx-win-pop-animation",
                        duration: that.option("defaultAnimationDuration")
                    };
                return {
                    enter: function($element, configModifier) {
                        var config = baseConfig,
                            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,
                            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,
                    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/events/pointer/base.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            browser = __webpack_require__( /*! ../../core/utils/browser */ 38),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13),
            Class = __webpack_require__( /*! ../../core/class */ 10),
            eventUtils = __webpack_require__( /*! ../utils */ 9);
        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/framework/router.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            typeUtils = __webpack_require__( /*! ../core/utils/type */ 1),
            iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 3),
            inArray = __webpack_require__( /*! ../core/utils/array */ 11).inArray,
            Class = __webpack_require__( /*! ../core/class */ 10);
        var JSON_URI_PREFIX = encodeURIComponent("json:");
        var Route = Class.inherit({
            _trimSeparators: function(str) {
                return str.replace(/^[\/.]+|\/+$/g, "")
            },
            _escapeRe: function(str) {
                return str.replace(/[^-\w]/g, "\\$1")
            },
            _checkConstraint: function(param, constraint) {
                param = String(param);
                if ("string" === typeof constraint) {
                    constraint = new RegExp(constraint)
                }
                var match = constraint.exec(param);
                if (!match || match[0] !== param) {
                    return false
                }
                return true
            },
            _ensureReady: function() {
                var that = this;
                if (this._patternRe) {
                    return false
                }
                this._pattern = this._trimSeparators(this._pattern);
                this._patternRe = "";
                this._params = [];
                this._segments = [];
                this._separators = [];
                this._pattern.replace(/[^\/]+/g, function(segment, index) {
                    that._segments.push(segment);
                    if (index) {
                        that._separators.push(that._pattern.substr(index - 1, 1))
                    }
                });
                iteratorUtils.each(this._segments, function(index) {
                    var segment = this,
                        separator = index ? that._separators[index - 1] : "";
                    if (":" === segment.charAt(0)) {
                        segment = segment.substr(1);
                        that._params.push(segment);
                        that._patternRe += "(?:" + separator + "([^/]*))";
                        if (segment in that._defaults) {
                            that._patternRe += "?"
                        }
                    } else {
                        that._patternRe += separator + that._escapeRe(segment)
                    }
                });
                this._patternRe = new RegExp("^" + this._patternRe + "$")
            },
            ctor: function(pattern, defaults, constraints) {
                this._pattern = pattern || "";
                this._defaults = defaults || {};
                this._constraints = constraints || {}
            },
            parse: function(uri) {
                var that = this;
                this._ensureReady();
                var matches = this._patternRe.exec(uri);
                if (!matches) {
                    return false
                }
                var result = extend({}, this._defaults);
                iteratorUtils.each(this._params, function(i) {
                    var index = i + 1;
                    if (matches.length >= index && matches[index]) {
                        result[this] = that.parseSegment(matches[index])
                    }
                });
                iteratorUtils.each(this._constraints, function(key) {
                    if (!that._checkConstraint(result[key], that._constraints[key])) {
                        result = false;
                        return false
                    }
                });
                return result
            },
            format: function(routeValues) {
                var that = this,
                    query = "";
                this._ensureReady();
                var mergeValues = extend({}, this._defaults),
                    useStatic = 0,
                    result = [],
                    dels = [],
                    unusedRouteValues = {};
                iteratorUtils.each(routeValues, function(paramName, paramValue) {
                    routeValues[paramName] = that.formatSegment(paramValue);
                    if (!(paramName in mergeValues)) {
                        unusedRouteValues[paramName] = true
                    }
                });
                iteratorUtils.each(this._segments, function(index, segment) {
                    result[index] = index ? that._separators[index - 1] : "";
                    if (":" === segment.charAt(0)) {
                        var paramName = segment.substr(1);
                        if (!(paramName in routeValues) && !(paramName in that._defaults)) {
                            result = null;
                            return false
                        }
                        if (paramName in that._constraints && !that._checkConstraint(routeValues[paramName], that._constraints[paramName])) {
                            result = null;
                            return false
                        }
                        if (paramName in routeValues) {
                            if (void 0 !== routeValues[paramName]) {
                                mergeValues[paramName] = routeValues[paramName];
                                result[index] += routeValues[paramName];
                                useStatic = index
                            }
                            delete unusedRouteValues[paramName]
                        } else {
                            if (paramName in mergeValues) {
                                result[index] += mergeValues[paramName];
                                dels.push(index)
                            }
                        }
                    } else {
                        result[index] += segment;
                        useStatic = index
                    }
                });
                iteratorUtils.each(mergeValues, function(key, value) {
                    if (!!value && inArray(":" + key, that._segments) === -1 && routeValues[key] !== value) {
                        result = null;
                        return false
                    }
                });
                var unusedCount = 0;
                if (!typeUtils.isEmptyObject(unusedRouteValues)) {
                    query = "?";
                    iteratorUtils.each(unusedRouteValues, function(key) {
                        query += key + "=" + routeValues[key] + "&";
                        unusedCount++
                    });
                    query = query.substr(0, query.length - 1)
                }
                if (null === result) {
                    return false
                }
                if (dels.length) {
                    iteratorUtils.map(dels, function(i) {
                        if (i >= useStatic) {
                            result[i] = ""
                        }
                    })
                }
                var path = result.join("");
                path = path.replace(/\/+$/, "");
                return {
                    uri: path + query,
                    unusedCount: unusedCount
                }
            },
            formatSegment: function(value) {
                if (Array.isArray(value) || typeUtils.isPlainObject(value)) {
                    return JSON_URI_PREFIX + encodeURIComponent(JSON.stringify(value))
                }
                return encodeURIComponent(value)
            },
            parseSegment: function(value) {
                if (value.substr(0, JSON_URI_PREFIX.length) === JSON_URI_PREFIX) {
                    try {
                        return JSON.parse(decodeURIComponent(value.substr(JSON_URI_PREFIX.length)))
                    } catch (x) {}
                }
                return decodeURIComponent(value)
            }
        });
        var Router = Class.inherit({
            ctor: function() {
                this._registry = []
            },
            _trimSeparators: function(str) {
                return str.replace(/^[\/.]+|\/+$/g, "")
            },
            _createRoute: function(pattern, defaults, constraints) {
                return new Route(pattern, defaults, constraints)
            },
            register: function(pattern, defaults, constraints) {
                this._registry.push(this._createRoute(pattern, defaults, constraints))
            },
            _parseQuery: function(query) {
                var result = {},
                    values = query.split("&");
                iteratorUtils.each(values, function(index, value) {
                    var keyValuePair = value.split("=");
                    result[keyValuePair[0]] = decodeURIComponent(keyValuePair[1])
                });
                return result
            },
            parse: function(uri) {
                var result, that = this;
                uri = this._trimSeparators(uri);
                var parts = uri.split("?", 2),
                    path = parts[0],
                    query = parts[1];
                iteratorUtils.each(this._registry, function() {
                    var parseResult = this.parse(path);
                    if (false !== parseResult) {
                        result = parseResult;
                        if (query) {
                            result = extend(result, that._parseQuery(query))
                        }
                        return false
                    }
                });
                return result ? result : false
            },
            format: function(obj) {
                var result = false,
                    minUnusedCount = 99999;
                obj = obj || {};
                iteratorUtils.each(this._registry, function() {
                    var toFormat = extend(true, {}, obj);
                    var formatResult = this.format(toFormat);
                    if (false !== formatResult) {
                        if (minUnusedCount > formatResult.unusedCount) {
                            minUnusedCount = formatResult.unusedCount;
                            result = formatResult.uri
                        }
                    }
                });
                return result
            }
        });
        Route.__internals = {
            JSON_URI_PREFIX: JSON_URI_PREFIX
        };
        module.exports = Router;
        module.exports.Route = Route
    },
    /*!**************************************************************!*\
      !*** ./artifacts/transpiled/framework/navigation_devices.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ../integration/jquery */ 46);
        var $ = __webpack_require__( /*! jquery */ 29),
            noop = __webpack_require__( /*! ../core/utils/common */ 4).noop,
            window = __webpack_require__( /*! ../core/utils/window */ 6).getWindow(),
            Class = __webpack_require__( /*! ../core/class */ 10),
            Callbacks = __webpack_require__( /*! ../core/utils/callbacks */ 21),
            browserAdapters = __webpack_require__( /*! ./browser_adapters */ 254),
            SessionStorage = __webpack_require__( /*! ../core/utils/storage */ 158).sessionStorage,
            devices = __webpack_require__( /*! ../core/devices */ 16);
        var SESSION_KEY = "dxPhoneJSApplication";
        var HistoryBasedNavigationDevice = Class.inherit({
            ctor: function(options) {
                options = options || {};
                this._browserAdapter = options.browserAdapter || this._createBrowserAdapter(options);
                this.uriChanged = Callbacks();
                this._browserAdapter.popState.add(this._onPopState.bind(this))
            },
            init: noop,
            getUri: function() {
                return this._browserAdapter.getHash()
            },
            setUri: function(uri, replaceCurrent) {
                if (replaceCurrent) {
                    return this._browserAdapter.replaceState(uri)
                } else {
                    if (uri !== this.getUri()) {
                        return this._browserAdapter.pushState(uri)
                    } else {
                        return $.Deferred().resolve().promise()
                    }
                }
            },
            back: function() {
                return this._browserAdapter.back()
            },
            _onPopState: function() {
                this.uriChanged.fire(this.getUri())
            },
            _isBuggyAndroid2: function() {
                var realDevice = devices.real();
                var version = realDevice.version;
                return "android" === realDevice.platform && version.length > 1 && (2 === version[0] && version[1] < 4 || version[0] < 2)
            },
            _isBuggyAndroid4: function() {
                var realDevice = devices.real();
                var version = realDevice.version;
                return "android" === realDevice.platform && version.length > 1 && 4 === version[0] && 0 === version[1]
            },
            _isWindowsPhone8: function() {
                var realDevice = devices.real();
                return "win" === realDevice.platform && realDevice.phone
            },
            _createBrowserAdapter: function(options) {
                var result, sourceWindow = options.window || window,
                    supportPushReplace = sourceWindow.history.replaceState && sourceWindow.history.pushState;
                if (this._isWindowsPhone8()) {
                    result = new browserAdapters.BuggyCordovaWP81BrowserAdapter(options)
                } else {
                    if (sourceWindow !== sourceWindow.top) {
                        result = new browserAdapters.HistorylessBrowserAdapter(options)
                    } else {
                        if (this._isBuggyAndroid4()) {
                            result = new browserAdapters.BuggyAndroidBrowserAdapter(options)
                        } else {
                            if (this._isBuggyAndroid2() || !supportPushReplace) {
                                result = new browserAdapters.OldBrowserAdapter(options)
                            } else {
                                result = new browserAdapters.DefaultBrowserAdapter(options)
                            }
                        }
                    }
                }
                return result
            }
        });
        var StackBasedNavigationDevice = HistoryBasedNavigationDevice.inherit({
            ctor: function(options) {
                this.callBase(options);
                this.backInitiated = Callbacks();
                this._rootStateHandler = null;
                $(window).on("unload", this._saveBrowserState)
            },
            init: function() {
                var that = this;
                if (that._browserAdapter.canWorkInPureBrowser) {
                    return that._initRootPage().done(function() {
                        if (that._browserAdapter.isRootPage()) {
                            that._browserAdapter.pushState("")
                        }
                    })
                } else {
                    return $.Deferred().resolve().promise()
                }
            },
            setUri: function(uri) {
                return this.callBase(uri, !this._browserAdapter.isRootPage())
            },
            _saveBrowserState: function() {
                var sessionStorage = SessionStorage();
                if (sessionStorage) {
                    sessionStorage.setItem(SESSION_KEY, true)
                }
            },
            _initRootPage: function() {
                var hash = this.getUri(),
                    sessionStorage = SessionStorage();
                if (!sessionStorage || sessionStorage.getItem(SESSION_KEY)) {
                    return $.Deferred().resolve().promise()
                }
                sessionStorage.removeItem(SESSION_KEY);
                this._browserAdapter.createRootPage();
                return this._browserAdapter.pushState(hash)
            },
            _onPopState: function() {
                if (this._browserAdapter.isRootPage()) {
                    if (this._rootStateHandler) {
                        this._rootStateHandler()
                    } else {
                        this.backInitiated.fire()
                    }
                } else {
                    if (!this._rootStateHandler) {
                        this._createRootStateHandler()
                    }
                    this.back()
                }
            },
            _createRootStateHandler: function() {
                var uri = this.getUri();
                this._rootStateHandler = function() {
                    this.uriChanged.fire(uri);
                    this._rootStateHandler = null
                }
            }
        });
        exports.HistoryBasedNavigationDevice = HistoryBasedNavigationDevice;
        exports.StackBasedNavigationDevice = StackBasedNavigationDevice
    },
    /*!********************************************************!*\
      !*** ./artifacts/transpiled/framework/html/presets.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        exports.layoutSets = {};
        exports.animationSets = {
            "native": {
                "view-content-change": [{
                    animation: "slide"
                }, {
                    animation: "ios7-slide",
                    device: {
                        platform: "ios"
                    }
                }, {
                    animation: "none",
                    device: {
                        deviceType: "desktop",
                        platform: "generic"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "view-header-toolbar": [{
                    animation: "ios7-toolbar"
                }, {
                    animation: "slide",
                    device: {
                        grade: "B"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }]
            },
            "default": {
                "layout-change": [{
                    animation: "none"
                }, {
                    animation: "ios7-slide",
                    device: {
                        platform: "ios"
                    }
                }, {
                    animation: "pop",
                    device: {
                        platform: "android"
                    }
                }, {
                    animation: "openDoor",
                    device: {
                        deviceType: "phone",
                        platform: "win",
                        version: [8]
                    }
                }, {
                    animation: "win-pop",
                    device: {
                        deviceType: "phone",
                        platform: "win"
                    }
                }],
                "view-content-change": [{
                    animation: "slide"
                }, {
                    animation: "ios7-slide",
                    device: {
                        platform: "ios"
                    }
                }, {
                    animation: "fade",
                    device: {
                        deviceType: "desktop",
                        platform: "generic"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "view-content-rendered": [{
                    animation: "fade"
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "view-header-toolbar": [{
                    animation: "ios7-toolbar"
                }, {
                    animation: "slide",
                    device: {
                        grade: "B"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "command-rendered-top": [{
                    animation: "stagger-fade-drop"
                }, {
                    animation: "fade",
                    device: {
                        grade: "B"
                    }
                }, {
                    animation: "fade",
                    device: {
                        deviceType: "desktop"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }, {
                    animation: "none",
                    device: {
                        platform: "win",
                        version: [10]
                    }
                }],
                "command-rendered-bottom": [{
                    animation: "stagger-fade-rise"
                }, {
                    animation: "fade",
                    device: {
                        grade: "B"
                    }
                }, {
                    animation: "fade",
                    device: {
                        deviceType: "desktop"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }, {
                    animation: "none",
                    device: {
                        platform: "win",
                        version: [10]
                    }
                }],
                "list-item-rendered": [{
                    animation: "stagger-3d-drop",
                    device: {
                        grade: "A"
                    }
                }, {
                    animation: "fade",
                    device: {
                        deviceType: "desktop"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "detail-item-rendered": [{
                    animation: "stagger-3d-drop",
                    device: {
                        grade: "A"
                    }
                }, {
                    animation: "fade",
                    device: {
                        deviceType: "desktop"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "edit-item-rendered": [{
                    animation: "stagger-3d-drop",
                    device: {
                        grade: "A"
                    }
                }, {
                    animation: "fade",
                    device: {
                        deviceType: "desktop"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }]
            },
            slide: {
                "view-content-change": [{
                    animation: "slide"
                }, {
                    animation: "ios7-slide",
                    device: {
                        platform: "ios"
                    }
                }, {
                    animation: "fade",
                    device: {
                        deviceType: "desktop",
                        platform: "generic"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "view-content-rendered": [{
                    animation: "fade"
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "view-header-toolbar": [{
                    animation: "ios7-toolbar"
                }, {
                    animation: "slide",
                    device: {
                        grade: "B"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "command-rendered-top": [{
                    animation: "stagger-fade-drop"
                }, {
                    animation: "fade",
                    device: {
                        grade: "B"
                    }
                }, {
                    animation: "fade",
                    device: {
                        deviceType: "desktop"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "command-rendered-bottom": [{
                    animation: "stagger-fade-rise"
                }, {
                    animation: "fade",
                    device: {
                        grade: "B"
                    }
                }, {
                    animation: "fade",
                    device: {
                        deviceType: "desktop"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "list-item-rendered": [{
                    animation: "stagger-fade-slide",
                    device: {
                        grade: "A"
                    }
                }, {
                    animation: "fade",
                    device: {
                        deviceType: "desktop"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "detail-item-rendered": [{
                    animation: "stagger-fade-slide",
                    device: {
                        grade: "A"
                    }
                }, {
                    animation: "fade",
                    device: {
                        deviceType: "desktop"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "edit-item-rendered": [{
                    animation: "stagger-fade-slide",
                    device: {
                        grade: "A"
                    }
                }, {
                    animation: "fade",
                    device: {
                        deviceType: "desktop"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }]
            },
            zoom: {
                "view-content-change": [{
                    animation: "slide"
                }, {
                    animation: "ios7-slide",
                    device: {
                        platform: "ios"
                    }
                }, {
                    animation: "fade",
                    device: {
                        deviceType: "desktop",
                        platform: "generic"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "view-content-rendered": [{
                    animation: "fade"
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "view-header-toolbar": [{
                    animation: "ios7-toolbar"
                }, {
                    animation: "slide",
                    device: {
                        grade: "B"
                    }
                }, {
                    animation: "fade",
                    device: {
                        deviceType: "desktop"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "command-rendered-top": [{
                    animation: "stagger-fade-zoom"
                }, {
                    animation: "fade",
                    device: {
                        grade: "B"
                    }
                }, {
                    animation: "fade",
                    device: {
                        deviceType: "desktop"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "command-rendered-bottom": [{
                    animation: "stagger-fade-zoom"
                }, {
                    animation: "fade",
                    device: {
                        grade: "B"
                    }
                }, {
                    animation: "fade",
                    device: {
                        deviceType: "desktop"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "list-item-rendered": [{
                    animation: "stagger-fade-zoom",
                    device: {
                        grade: "A"
                    }
                }, {
                    animation: "fade",
                    device: {
                        deviceType: "desktop"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "detail-item-rendered": [{
                    animation: "stagger-fade-zoom",
                    device: {
                        grade: "A"
                    }
                }, {
                    animation: "fade",
                    device: {
                        deviceType: "desktop"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }],
                "edit-item-rendered": [{
                    animation: "stagger-fade-zoom",
                    device: {
                        grade: "A"
                    }
                }, {
                    animation: "fade",
                    device: {
                        deviceType: "desktop"
                    }
                }, {
                    animation: "none",
                    device: {
                        grade: "C"
                    }
                }]
            }
        }
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/data/array_query.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ../core/class */ 10),
            typeUtils = __webpack_require__( /*! ../core/utils/type */ 1),
            iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 3),
            compileGetter = __webpack_require__( /*! ../core/utils/data */ 23).compileGetter,
            toComparable = __webpack_require__( /*! ../core/utils/data */ 23).toComparable,
            Deferred = __webpack_require__( /*! ../core/utils/deferred */ 7).Deferred,
            errorsModule = __webpack_require__( /*! ./errors */ 35),
            dataUtils = __webpack_require__( /*! ./utils */ 39);
        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,
                    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],
                        xValue = rule.getter(x),
                        yValue = rule.getter(y),
                        compare = rule.compare || defaultCompare,
                        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]),
                    op = crit[1],
                    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))),
                                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],
                    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 (Array.isArray(crit[0])) {
                    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 = {},
                    keys = [],
                    iter = this.iter,
                    getter = compileGetter(this.getter);
                iter.reset();
                while (iter.next()) {
                    var current = iter.current(),
                        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 seed, d = (new Deferred).fail(handleError),
                    step = aggregator.step,
                    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))
            };
            var chainQuery = function(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/ui/collection/item.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            Class = __webpack_require__( /*! ../../core/class */ 10),
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            publicComponentUtils = __webpack_require__( /*! ../../core/utils/public_component */ 107);
        var INVISIBLE_STATE_CLASS = "dx-state-invisible",
            DISABLED_STATE_CLASS = "dx-state-disabled",
            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,
                    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)
            },
            _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/data/odata/query_adapter.js ***!
      \**********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            iteratorUtils = __webpack_require__( /*! ../../core/utils/iterator */ 3),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            queryAdapters = __webpack_require__( /*! ../query_adapters */ 190),
            odataUtils = __webpack_require__( /*! ./utils */ 106),
            serializePropName = odataUtils.serializePropName,
            errors = __webpack_require__( /*! ../errors */ 35).errors,
            dataUtils = __webpack_require__( /*! ../utils */ 39),
            isFunction = typeUtils.isFunction;
        var DEFAULT_PROTOCOL_VERSION = 2;
        var compileCriteria = function() {
            var protocolVersion, fieldTypes;
            var createBinaryOperationFormatter = function(op) {
                return function(prop, val) {
                    return prop + " " + op + " " + val
                }
            };
            var createStringFuncFormatter = function(op, params) {
                params = params || {};
                return function(prop, val) {
                    var bag = [op, "("];
                    if (params.forceLowerCase) {
                        prop = prop.indexOf("tolower(") === -1 ? "tolower(" + prop + ")" : prop;
                        val = val.toLowerCase()
                    }
                    if (params.reverse) {
                        bag.push(val, ",", prop)
                    } else {
                        bag.push(prop, ",", val)
                    }
                    bag.push(")");
                    return bag.join("")
                }
            };
            var formatters = {
                "=": createBinaryOperationFormatter("eq"),
                "<>": createBinaryOperationFormatter("ne"),
                ">": createBinaryOperationFormatter("gt"),
                ">=": createBinaryOperationFormatter("ge"),
                "<": createBinaryOperationFormatter("lt"),
                "<=": createBinaryOperationFormatter("le"),
                startswith: createStringFuncFormatter("startswith", {
                    forceLowerCase: true
                }),
                endswith: createStringFuncFormatter("endswith", {
                    forceLowerCase: true
                })
            };
            var formattersV2 = extend({}, formatters, {
                contains: createStringFuncFormatter("substringof", {
                    reverse: true,
                    forceLowerCase: true
                }),
                notcontains: createStringFuncFormatter("not substringof", {
                    reverse: true,
                    forceLowerCase: true
                })
            });
            var formattersV4 = extend({}, formatters, {
                contains: createStringFuncFormatter("contains", {
                    forceLowerCase: true
                }),
                notcontains: createStringFuncFormatter("not contains", {
                    forceLowerCase: true
                })
            });
            var compileBinary = function(criteria) {
                criteria = dataUtils.normalizeBinaryCriterion(criteria);
                var op = criteria[1],
                    formatters = 4 === protocolVersion ? formattersV4 : formattersV2,
                    formatter = formatters[op.toLowerCase()];
                if (!formatter) {
                    throw errors.Error("E4003", op)
                }
                var fieldName = criteria[0],
                    value = criteria[2];
                if (fieldTypes && fieldTypes[fieldName]) {
                    value = odataUtils.convertPrimitiveValue(fieldTypes[fieldName], value)
                }
                return formatter(serializePropName(fieldName), odataUtils.serializeValue(value, protocolVersion))
            };
            var compileUnary = function(criteria) {
                var op = criteria[0],
                    crit = compileCore(criteria[1]);
                if ("!" === op) {
                    return "not (" + crit + ")"
                }
                throw errors.Error("E4003", op)
            };
            var compileGroup = function(criteria) {
                var groupOperator, nextGroupOperator, bag = [];
                iteratorUtils.each(criteria, function(index, criterion) {
                    if (Array.isArray(criterion)) {
                        if (bag.length > 1 && groupOperator !== nextGroupOperator) {
                            throw new errors.Error("E4019")
                        }
                        bag.push("(" + compileCore(criterion) + ")");
                        groupOperator = nextGroupOperator;
                        nextGroupOperator = "and"
                    } else {
                        nextGroupOperator = dataUtils.isConjunctiveOperator(this) ? "and" : "or"
                    }
                });
                return bag.join(" " + groupOperator + " ")
            };
            var compileCore = function(criteria) {
                if (Array.isArray(criteria[0])) {
                    return compileGroup(criteria)
                }
                if (dataUtils.isUnaryOperation(criteria)) {
                    return compileUnary(criteria)
                }
                return compileBinary(criteria)
            };
            return function(criteria, version, types) {
                fieldTypes = types;
                protocolVersion = version;
                return compileCore(criteria)
            }
        }();
        var createODataQueryAdapter = function(queryOptions) {
            var _select, _skip, _take, _countQuery, _sorting = [],
                _criteria = [],
                _expand = queryOptions.expand,
                _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 (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 = odataUtils.generateSelect(_oDataVersion, _select) || void 0;
                    result.$expand = odataUtils.generateExpand(_oDataVersion, _expand, _select) || void 0
                }
                if (_criteria.length) {
                    var criteria = _criteria.length < 2 ? _criteria[0] : _criteria,
                        fieldTypes = queryOptions && queryOptions.fieldTypes;
                    result.$filter = compileCriteria(criteria, _oDataVersion, fieldTypes)
                }
                if (_countQuery) {
                    result.$top = 0
                }
                if (queryOptions.requireTotalCount || _countQuery) {
                    if (4 !== _oDataVersion) {
                        result.$inlinecount = "allpages"
                    } else {
                        result.$count = "true"
                    }
                }
                return result
            };

            function tryLiftSelect(tasks) {
                var selectIndex = -1;
                for (var i = 0; i < tasks.length; i++) {
                    if ("select" === tasks[i].name) {
                        selectIndex = i;
                        break
                    }
                }
                if (selectIndex < 0 || !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: function(tasks) {
                    tryLiftSelect(tasks)
                },
                exec: function(url) {
                    return odataUtils.sendRequest(_oDataVersion, {
                        url: url,
                        params: extend(requestData(), queryOptions && 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 rule, getter = args[i][0],
                            desc = !!args[i][1];
                        if ("string" !== typeof getter) {
                            return false
                        }
                        rule = 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 || isFunction(expr)) {
                        return false
                    }
                    if (!Array.isArray(expr)) {
                        expr = [].slice.call(arguments)
                    }
                    _select = expr
                },
                count: function() {
                    _countQuery = true
                }
            }
        };
        queryAdapters.odata = createODataQueryAdapter;
        exports.odata = createODataQueryAdapter
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/events/gesture/emitter.gesture.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            styleUtils = __webpack_require__( /*! ../../core/utils/style */ 85),
            callOnce = __webpack_require__( /*! ../../core/utils/call_once */ 73),
            domUtils = __webpack_require__( /*! ../../core/utils/dom */ 12),
            readyCallbacks = __webpack_require__( /*! ../../core/utils/ready_callbacks */ 52),
            ready = readyCallbacks.add,
            mathUtils = __webpack_require__( /*! ../../core/utils/math */ 30),
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            isDefined = __webpack_require__( /*! ../../core/utils/type */ 1).isDefined,
            eventUtils = __webpack_require__( /*! ../utils */ 9),
            Emitter = __webpack_require__( /*! ../core/emitter */ 120),
            sign = mathUtils.sign,
            abs = Math.abs;
        var SLEEP = 0,
            INITED = 1,
            STARTED = 2,
            TOUCH_BOUNDARY = 10,
            IMMEDIATE_TOUCH_BOUNDARY = 0,
            IMMEDIATE_TIMEOUT = 180;
        var isMouseWheelEvent = function(e) {
            return e && "dxmousewheel" === e.type
        };
        var supportPointerEvents = function() {
            return styleUtils.styleProp("pointer-events")
        };
        var setGestureCover = callOnce(function() {
            var GESTURE_COVER_CLASS = "dx-gesture-cover";
            var isDesktop = "generic" === devices.real().platform;
            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 (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),
                    delta = eventUtils.eventDelta(this._startEventData, eventUtils.eventData(e)),
                    deltaX = abs(delta.x),
                    deltaY = abs(delta.y);
                var horizontalMove = this._validateMove(touchBoundary, deltaX, deltaY),
                    verticalMove = this._validateMove(touchBoundary, deltaY, deltaX);
                var direction = this.getDirection(e),
                    bothAccepted = "both" === direction && (horizontalMove || verticalMove),
                    horizontalAccepted = "horizontal" === direction && horizontalMove,
                    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 || isMouseWheelEvent(e) ? IMMEDIATE_TOUCH_BOUNDARY : TOUCH_BOUNDARY
            },
            _adjustStartEvent: function(e) {
                var touchBoundary = this._getTouchBoundary(e),
                    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) {
                var isStarted = this._stage === STARTED;
                if (isStarted) {
                    gestureCover(toggle, this.getElement().css("cursor"))
                }
            },
            _clearSelection: function(e) {
                if (isMouseWheelEvent(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/drop_down_editor/ui.drop_down_editor.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            AsyncTemplateMixin = __webpack_require__( /*! ../shared/async_template_mixin */ 271),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            Guid = __webpack_require__( /*! ../../core/guid */ 48),
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            domUtils = __webpack_require__( /*! ../../core/utils/dom */ 12),
            focused = __webpack_require__( /*! ../widget/selectors */ 58).focused,
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            isDefined = __webpack_require__( /*! ../../core/utils/type */ 1).isDefined,
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            getPublicElement = __webpack_require__( /*! ../../core/utils/dom */ 12).getPublicElement,
            errors = __webpack_require__( /*! ../widget/ui.errors */ 18),
            positionUtils = __webpack_require__( /*! ../../animation/position */ 78),
            getDefaultAlignment = __webpack_require__( /*! ../../core/utils/position */ 108).getDefaultAlignment,
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14),
            Button = __webpack_require__( /*! ../button */ 36),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            TextBox = __webpack_require__( /*! ../text_box */ 101),
            clickEvent = __webpack_require__( /*! ../../events/click */ 17),
            FunctionTemplate = __webpack_require__( /*! ../widget/function_template */ 99),
            Popup = __webpack_require__( /*! ../popup */ 55);
        var DROP_DOWN_EDITOR_CLASS = "dx-dropdowneditor",
            DROP_DOWN_EDITOR_INPUT_WRAPPER_CLASS = "dx-dropdowneditor-input-wrapper",
            DROP_DOWN_EDITOR_BUTTON_CLASS = "dx-dropdowneditor-button",
            DROP_DOWN_EDITOR_BUTTON_ICON = "dx-dropdowneditor-icon",
            DROP_DOWN_EDITOR_OVERLAY = "dx-dropdowneditor-overlay",
            DROP_DOWN_EDITOR_OVERLAY_FLIPPED = "dx-dropdowneditor-overlay-flipped",
            DROP_DOWN_EDITOR_ACTIVE = "dx-dropdowneditor-active",
            DROP_DOWN_EDITOR_BUTTON_VISIBLE = "dx-dropdowneditor-button-visible",
            DROP_DOWN_EDITOR_FIELD_CLICKABLE = "dx-dropdowneditor-field-clickable";
        var DropDownEditor = TextBox.inherit({
            _supportedKeys: function() {
                var homeEndHandler = function(e) {
                    if (this.option("opened")) {
                        e.preventDefault();
                        return true
                    }
                    return false
                };
                return 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 && eventsEngine.trigger($focusableElement, "focus");
                        e.preventDefault()
                    },
                    escape: function(e) {
                        if (this.option("opened")) {
                            e.preventDefault()
                        }
                        this.close()
                    },
                    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
                    },
                    home: homeEndHandler,
                    end: homeEndHandler
                })
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    value: null,
                    onOpened: null,
                    onClosed: null,
                    opened: false,
                    acceptCustomValue: true,
                    applyValueMode: "instantly",
                    deferRendering: true,
                    activeStateEnabled: true,
                    dropDownButtonTemplate: "dropDownButton",
                    fieldTemplate: null,
                    contentTemplate: null,
                    openOnFieldClick: false,
                    showDropDownButton: true,
                    popupPosition: this._getDefaultPopupPosition(),
                    onPopupInitialized: null,
                    applyButtonText: messageLocalization.format("OK"),
                    cancelButtonText: messageLocalization.format("Cancel"),
                    buttonsLocation: "default",
                    showPopupTitle: false
                })
            },
            _getDefaultPopupPosition: function() {
                var position = getDefaultAlignment(this.option("rtlEnabled"));
                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,
                            isWin10 = "win" === _device.platform && _device.version && 10 === _device.version[0];
                        return isGeneric || isWin10
                    },
                    options: {
                        popupPosition: {
                            offset: {
                                v: 0
                            }
                        }
                    }
                }])
            },
            _inputWrapper: function() {
                return this.$element().find("." + DROP_DOWN_EDITOR_INPUT_WRAPPER_CLASS)
            },
            _init: function() {
                this.callBase();
                this._initVisibilityActions();
                this._initPopupInitializedAction()
            },
            _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", "designMode"]
                })
            },
            _initMarkup: function() {
                this.callBase();
                this.$element().addClass(DROP_DOWN_EDITOR_CLASS);
                this.setAria("role", "combobox")
            },
            _render: function() {
                this.callBase();
                this._renderOpenHandler();
                this._renderOpenedState()
            },
            _renderContentImpl: function() {
                if (!this.option("deferRendering")) {
                    this._createPopup()
                }
            },
            _renderInput: function() {
                this.callBase();
                this.$element().wrapInner($("<div>").addClass(DROP_DOWN_EDITOR_INPUT_WRAPPER_CLASS));
                this._$container = this.$element().children().eq(0);
                this.setAria({
                    haspopup: "true",
                    autocomplete: "list"
                })
            },
            _readOnlyPropValue: function() {
                return !this.option("acceptCustomValue") || this.callBase()
            },
            _cleanFocusState: function() {
                this.callBase();
                if (this.option("fieldTemplate")) {
                    eventsEngine.off(this._input(), "focusin focusout beforeactivate")
                }
            },
            _renderField: function() {
                var fieldTemplate = this._getTemplateByOption("fieldTemplate");
                if (!(fieldTemplate && this.option("fieldTemplate"))) {
                    return
                }
                this._renderTemplatedField(fieldTemplate, this._fieldRenderData())
            },
            _renderTemplatedField: function(fieldTemplate, data) {
                var _this = this;
                var isFocused = focused(this._input());
                this._resetFocus(isFocused);
                var $container = this._$container;
                $container.empty();
                this._$dropDownButton = null;
                this._$clearButton = null;
                fieldTemplate.render({
                    model: data,
                    container: domUtils.getPublicElement($container),
                    onRendered: function() {
                        if (!_this._input().length) {
                            throw errors.Error("E1010")
                        }
                        _this._refreshEvents();
                        _this._refreshValueChangeEvent();
                        _this._renderFocusState();
                        isFocused && eventsEngine.trigger(_this._input(), "focus")
                    }
                })
            },
            _resetFocus: function(isFocused) {
                this._cleanFocusState();
                isFocused && eventsEngine.trigger(this._input(), "focusout")
            },
            _fieldRenderData: function() {
                return this.option("value")
            },
            _renderInputAddons: function() {
                this._renderField();
                this.callBase();
                this._renderDropDownButton()
            },
            _renderDropDownButton: function() {
                if (this._$dropDownButton) {
                    this._$dropDownButton.remove();
                    this._$dropDownButton = null
                }
                var showDropDownButton = this.option("showDropDownButton");
                this.$element().toggleClass(DROP_DOWN_EDITOR_BUTTON_VISIBLE, showDropDownButton);
                if (!showDropDownButton) {
                    return
                }
                this._$dropDownButton = this._createDropDownButton();
                this._attachDropDownButtonClickHandler()
            },
            _attachDropDownButtonClickHandler: function() {
                if (this.option("showDropDownButton") && !this.option("openOnFieldClick")) {
                    this._$dropDownButton.dxButton("option", "onClick", this._openHandler.bind(this))
                }
            },
            _initTemplates: function() {
                this.callBase();
                this._defaultTemplates.dropDownButton = new FunctionTemplate(function(options) {
                    var $icon = $("<div>").addClass(DROP_DOWN_EDITOR_BUTTON_ICON);
                    $(options.container).append($icon)
                }, this)
            },
            _createDropDownButton: function() {
                var $button = $("<div>").addClass(DROP_DOWN_EDITOR_BUTTON_CLASS).prependTo(this._buttonsContainer());
                this._createComponent($button, Button, {
                    focusStateEnabled: false,
                    hoverStateEnabled: false,
                    activeStateEnabled: false,
                    disabled: this.option("readOnly"),
                    useInkRipple: false,
                    template: this._getTemplateByOption("dropDownButtonTemplate")
                });
                $button.removeClass("dx-button");
                eventsEngine.on($button, "mousedown", function(e) {
                    e.preventDefault()
                });
                return $button
            },
            _renderOpenHandler: function() {
                var that = this,
                    $inputWrapper = that._inputWrapper(),
                    eventName = eventUtils.addNamespace(clickEvent.name, that.NAME),
                    openOnFieldClick = that.option("openOnFieldClick");
                eventsEngine.off($inputWrapper, eventName);
                eventsEngine.on($inputWrapper, eventName, that._getInputClickHandler(openOnFieldClick));
                that.$element().toggleClass(DROP_DOWN_EDITOR_FIELD_CLICKABLE, openOnFieldClick);
                if (openOnFieldClick) {
                    that._openOnFieldClickAction = that._createAction(that._openHandler.bind(that))
                }
            },
            _getInputClickHandler: function(openOnFieldClick) {
                var that = this;
                return openOnFieldClick ? function(e) {
                    that._executeOpenAction(e)
                } : function(e) {
                    that._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") && !focused(this._input())) {
                    eventsEngine.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,
                    owns: (opened || void 0) && this._popupContentId
                })
            },
            _createPopup: function() {
                if (this._$popup) {
                    return
                }
                this._$popup = $("<div>").addClass(DROP_DOWN_EDITOR_OVERLAY).addClass(this.option("customOverlayCssClass")).appendTo(this.$element());
                this._renderPopup();
                this._renderPopupContent()
            },
            _renderPopup: function() {
                this._popup = this._createComponent(this._$popup, Popup, this._popupConfig());
                this._popup.on({
                    showing: this._popupShowingHandler.bind(this),
                    shown: this._popupShownHandler.bind(this),
                    hiding: this._popupHidingHandler.bind(this),
                    hidden: this._popupHiddenHandler.bind(this)
                });
                this._popup.option("onContentReady", this._contentReadyHandler.bind(this));
                this._contentReadyHandler();
                this._popupContentId = "dx-" + new Guid;
                this.setAria("id", this._popupContentId, this._popup.$content())
            },
            _contentReadyHandler: commonUtils.noop,
            _popupConfig: function() {
                return {
                    onInitialized: this._popupInitializedHandler(),
                    position: extend(this.option("popupPosition"), { of: this.$element()
                    }),
                    showTitle: this.option("showPopupTitle"),
                    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
                }
            },
            _popupInitializedHandler: function() {
                if (!this.option("onPopupInitialized")) {
                    return
                }
                return function(e) {
                    this._popupInitializedAction({
                        popup: e.component
                    })
                }.bind(this)
            },
            _popupPositionedHandler: function(e) {
                e.position && this._popup.overlayContent().toggleClass(DROP_DOWN_EDITOR_OVERLAY_FLIPPED, e.position.v.flip)
            },
            _popupShowingHandler: commonUtils.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 myTop = positionUtils.setup(this.$element()).top,
                        popupTop = positionUtils.setup(this._popup.$content()).top;
                    positionRequest = myTop + this.option("popupPosition").offset.v > popupTop ? "below" : "above"
                }
                return this.callBase(positionRequest)
            },
            _renderPopupContent: function() {
                var contentTemplate = this._getTemplateByOption("contentTemplate");
                if (!(contentTemplate && this.option("contentTemplate"))) {
                    return
                }
                var $popupContent = this._popup.$content(),
                    templateData = {
                        value: this._fieldRenderData(),
                        component: this
                    };
                $popupContent.empty();
                contentTemplate.render({
                    container: domUtils.getPublicElement($popupContent),
                    model: templateData
                })
            },
            _closeOutsideDropDownHandler: function(e) {
                var $target = $(e.target);
                var isInputClicked = !!$target.closest(this.$element()).length;
                var isDropDownButtonClicked = !!$target.closest(this._$dropDownButton).length;
                var isOutsideClick = !isInputClicked && !isDropDownButtonClicked;
                return isOutsideClick
            },
            _clean: function() {
                delete this._$dropDownButton;
                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 = $(e.currentTarget);
                if (e.shiftKey && $element.is(this._getFirstPopupElement()) || !e.shiftKey && $element.is(this._getLastPopupElement())) {
                    eventsEngine.trigger(this._input(), "focus");
                    e.preventDefault()
                }
            },
            _popupElementEscHandler: function() {
                eventsEngine.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"),
                    resultConfig = buttonsConfig;
                if ("default" !== buttonsLocation) {
                    var position = commonUtils.splitPair(buttonsLocation);
                    each(resultConfig, function(_, element) {
                        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()
            },
            _toggleReadOnlyState: function() {
                this.callBase();
                this._$dropDownButton && this._$dropDownButton.dxButton("option", "disabled", this.option("readOnly"))
            },
            _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 (isDefined(args.value)) {
                            this._renderInputAddons()
                        } else {
                            this._invalidate()
                        }
                        break;
                    case "showDropDownButton":
                    case "contentTemplate":
                    case "acceptCustomValue":
                    case "openOnFieldClick":
                        this._invalidate();
                        break;
                    case "dropDownButtonTemplate":
                        this._renderDropDownButton();
                        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;
                    default:
                        this.callBase(args)
                }
            },
            open: function() {
                this.option("opened", true)
            },
            close: function() {
                this.option("opened", false)
            },
            field: function() {
                return getPublicElement(this._input())
            },
            content: function() {
                return this._popup ? this._popup.content() : null
            }
        }).include(AsyncTemplateMixin);
        registerComponent("dxDropDownEditor", DropDownEditor);
        module.exports = DropDownEditor
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/core/utils/storage.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var window = __webpack_require__( /*! ../../core/utils/window */ 6).getWindow();
        var getSessionStorage = function() {
            var sessionStorage;
            try {
                sessionStorage = window.sessionStorage
            } catch (e) {}
            return sessionStorage
        };
        exports.sessionStorage = getSessionStorage
    }, , , , , , , , , ,
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/widget/ui.keyboard_processor.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            Class = __webpack_require__( /*! ../../core/class */ 10),
            inArray = __webpack_require__( /*! ../../core/utils/array */ 11).inArray,
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9);
        var KeyboardProcessor = Class.inherit({
            _keydown: eventUtils.addNamespace("keydown", "KeyboardProcessor"),
            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"
            },
            ctor: function(options) {
                var _this = this;
                options = options || {};
                if (options.element) {
                    this._element = $(options.element)
                }
                if (options.focusTarget) {
                    this._focusTarget = options.focusTarget
                }
                this._handler = options.handler;
                this._context = options.context;
                this._childProcessors = [];
                if (this._element) {
                    this._processFunction = function(e) {
                        _this.process(e)
                    };
                    eventsEngine.on(this._element, this._keydown, this._processFunction)
                }
            },
            dispose: function() {
                if (this._element) {
                    eventsEngine.off(this._element, this._keydown, this._processFunction)
                }
                this._element = void 0;
                this._handler = void 0;
                this._context = void 0;
                this._childProcessors = void 0
            },
            clearChildren: function() {
                this._childProcessors = []
            },
            push: function(child) {
                if (!this._childProcessors) {
                    this.clearChildren()
                }
                this._childProcessors.push(child);
                return child
            },
            attachChildProcessor: function() {
                var childProcessor = new KeyboardProcessor;
                this._childProcessors.push(childProcessor);
                return childProcessor
            },
            reinitialize: function(childHandler, childContext) {
                this._context = childContext;
                this._handler = childHandler;
                return this
            },
            process: function(e) {
                if (this._focusTarget && this._focusTarget !== e.target && inArray(e.target, this._focusTarget) < 0) {
                    return false
                }
                var args = {
                    key: this.codes[e.which] || e.which,
                    ctrl: e.ctrlKey,
                    shift: e.shiftKey,
                    alt: e.altKey,
                    originalEvent: e
                };
                var handlerResult = this._handler && this._handler.call(this._context, args);
                if (handlerResult && this._childProcessors) {
                    each(this._childProcessors, function(index, childProcessor) {
                        childProcessor.process(e)
                    })
                }
            }
        });
        module.exports = KeyboardProcessor
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/ui/validation/validation_mixin.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var ValidationMixin = {
            _findGroup: function() {
                var $dxGroup, group = this.option("validationGroup");
                if (!group) {
                    $dxGroup = this.$element().parents(".dx-validationgroup").first();
                    if ($dxGroup.length) {
                        group = $dxGroup.dxValidationGroup("instance")
                    } else {
                        group = this._modelByElement(this.$element())
                    }
                }
                return group
            }
        };
        module.exports = ValidationMixin
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/ui/drop_down_menu.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            window = __webpack_require__( /*! ../core/utils/window */ 6).getWindow(),
            devices = __webpack_require__( /*! ../core/devices */ 16),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            Widget = __webpack_require__( /*! ./widget/ui.widget */ 28),
            Button = __webpack_require__( /*! ./button */ 36),
            Popover = __webpack_require__( /*! ./popover */ 134),
            DataHelperMixin = __webpack_require__( /*! ../data_helper */ 116),
            List = __webpack_require__( /*! ./list */ 109),
            themes = __webpack_require__( /*! ./themes */ 20),
            ChildDefaultTemplate = __webpack_require__( /*! ./widget/child_default_template */ 102);
        var DROP_DOWN_MENU_CLASS = "dx-dropdownmenu",
            DROP_DOWN_MENU_POPUP_CLASS = "dx-dropdownmenu-popup",
            DROP_DOWN_MENU_POPUP_WRAPPER_CLASS = "dx-dropdownmenu-popup-wrapper",
            DROP_DOWN_MENU_LIST_CLASS = "dx-dropdownmenu-list",
            DROP_DOWN_MENU_BUTTON_CLASS = "dx-dropdownmenu-button";
        var POPUP_OPTION_MAP = {
            popupWidth: "width",
            popupHeight: "height",
            popupMaxHeight: "maxHeight"
        };
        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,
                    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
                })
            },
            _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.callBase();
                this._defaultTemplates.item = new ChildDefaultTemplate("item", this);
                this._defaultTemplates.content = new ChildDefaultTemplate("content", this)
            },
            _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),
                    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()),
                    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")
                }
            },
            _renderList: function(contentElement) {
                var $content = $(contentElement),
                    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 {
                    _keyboardProcessor: this._listProcessor,
                    pageLoadMode: "scrollBottom",
                    indicateLoading: false,
                    noDataText: "",
                    itemTemplate: this._getTemplateByOption("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
            },
            _attachKeyboardEvents: function() {
                this.callBase.apply(this, arguments);
                this._listProcessor = this._keyboardProcessor && this._keyboardProcessor.attachChildProcessor();
                if (this._list) {
                    this._list.option("_keyboardProcessor", this._listProcessor)
                }
            },
            _cleanFocusState: function() {
                this.callBase.apply(this, arguments);
                delete this._listProcessor
            },
            _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":
                        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 "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;
                    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/form.js ***!
      \*****************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./form/ui.form */ 526)
    },
    /*!**********************************************!*\
      !*** ./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),
            dataUtils = __webpack_require__( /*! ../core/element_data */ 37),
            Class = __webpack_require__( /*! ../core/class */ 10),
            devices = __webpack_require__( /*! ../core/devices */ 16),
            registerEvent = __webpack_require__( /*! ./core/event_registrator */ 67),
            eventUtils = __webpack_require__( /*! ./utils */ 9),
            pointerEvents = __webpack_require__( /*! ./pointer */ 27);
        var HOVERSTART_NAMESPACE = "dxHoverStart",
            HOVERSTART = "dxhoverstart",
            POINTERENTER_NAMESPACED_EVENT_NAME = eventUtils.addNamespace(pointerEvents.enter, HOVERSTART_NAMESPACE),
            HOVEREND_NAMESPACE = "dxHoverEnd",
            HOVEREND = "dxhoverend",
            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,
                    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/data/custom_store.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            dataUtils = __webpack_require__( /*! ./utils */ 39),
            arrayUtils = __webpack_require__( /*! ./array_utils */ 136),
            isFunction = __webpack_require__( /*! ../core/utils/type */ 1).isFunction,
            config = __webpack_require__( /*! ../core/config */ 25),
            errors = __webpack_require__( /*! ./errors */ 35).errors,
            Store = __webpack_require__( /*! ./abstract_store */ 100),
            arrayQuery = __webpack_require__( /*! ./array_query */ 153),
            queryByOptions = __webpack_require__( /*! ./store_helper */ 83).queryByOptions,
            deferredUtils = __webpack_require__( /*! ../core/utils/deferred */ 7),
            Deferred = deferredUtils.Deferred,
            when = deferredUtils.when,
            fromPromise = deferredUtils.fromPromise;
        var TOTAL_COUNT = "totalCount",
            LOAD = "load",
            BY_KEY = "byKey",
            INSERT = "insert",
            UPDATE = "update",
            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],
                    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 userResult, userFunc = store._loadFunc;
            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 userResult, userFunc = store._totalCountFunc;
            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 userResult, userFunc = store._byKeyFunc;
            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 {
                invokeUserLoad(store, userFuncOptions).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 itemsQuery, totalCountQuery, rawDataQuery = arrayQuery(rawData, {
                        errorHandler: store._errorHandler
                    }),
                    waitList = [];
                var items, 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 item, keyExpr = store.key();
                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 userResult, that = this,
                    userFunc = that._insertFunc,
                    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 userResult, userFunc = this._updateFunc,
                    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 userResult, userFunc = this._removeFunc,
                    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/list/ui.list.base.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            iconUtils = __webpack_require__( /*! ../../core/utils/icon */ 87),
            getPublicElement = __webpack_require__( /*! ../../core/utils/dom */ 12).getPublicElement,
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            compileGetter = __webpack_require__( /*! ../../core/utils/data */ 23).compileGetter,
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            fx = __webpack_require__( /*! ../../animation/fx */ 31),
            clickEvent = __webpack_require__( /*! ../../events/click */ 17),
            swipeEvents = __webpack_require__( /*! ../../events/swipe */ 125),
            support = __webpack_require__( /*! ../../core/utils/support */ 44),
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14),
            inkRipple = __webpack_require__( /*! ../widget/utils.ink_ripple */ 72),
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            ListItem = __webpack_require__( /*! ./item */ 485),
            Button = __webpack_require__( /*! ../button */ 36),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            themes = __webpack_require__( /*! ../themes */ 20),
            windowUtils = __webpack_require__( /*! ../../core/utils/window */ 6),
            ScrollView = __webpack_require__( /*! ../scroll_view */ 193),
            deviceDependentOptions = __webpack_require__( /*! ../scroll_view/ui.scrollable */ 96).deviceDependentOptions,
            CollectionWidget = __webpack_require__( /*! ../collection/ui.collection_widget.live_update */ 194).default,
            BindableTemplate = __webpack_require__( /*! ../widget/bindable_template */ 60),
            Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7).Deferred;
        var LIST_CLASS = "dx-list",
            LIST_ITEM_CLASS = "dx-list-item",
            LIST_ITEM_SELECTOR = "." + LIST_ITEM_CLASS,
            LIST_ITEM_ICON_CONTAINER_CLASS = "dx-list-item-icon-container",
            LIST_ITEM_ICON_CLASS = "dx-list-item-icon",
            LIST_GROUP_CLASS = "dx-list-group",
            LIST_GROUP_HEADER_CLASS = "dx-list-group-header",
            LIST_GROUP_BODY_CLASS = "dx-list-group-body",
            LIST_COLLAPSIBLE_GROUPS_CLASS = "dx-list-collapsible-groups",
            LIST_GROUP_COLLAPSED_CLASS = "dx-list-group-collapsed",
            LIST_GROUP_HEADER_INDICATOR_CLASS = "dx-list-group-header-indicator",
            LIST_HAS_NEXT_CLASS = "dx-has-next",
            LIST_NEXT_BUTTON_CLASS = "dx-list-next-button",
            SELECT_ALL_SELECTOR = ".dx-list-select-all",
            LIST_ITEM_DATA_KEY = "dxListItemData",
            LIST_FEEDBACK_SHOW_TIMEOUT = 70;
        var groupItemsGetter = compileGetter("items");
        var ListBase = CollectionWidget.inherit({
            _activeStateUnit: [LIST_ITEM_SELECTOR, SELECT_ALL_SELECTOR].join(","),
            _supportedKeys: function() {
                var that = this;
                var moveFocusPerPage = function(direction) {
                    var $item = getEdgeVisibleItem(direction),
                        isFocusedItem = $item.is(that.option("focusedElement"));
                    if (isFocusedItem) {
                        scrollListTo($item, direction);
                        $item = getEdgeVisibleItem(direction)
                    }
                    that.option("focusedElement", getPublicElement($item));
                    that.scrollToItem($item)
                };
                var getEdgeVisibleItem = function(direction) {
                    var scrollTop = that.scrollTop(),
                        containerHeight = that.$element().height();
                    var $item = $(that.option("focusedElement")),
                        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
                };
                var scrollListTo = function($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"
                    },
                    useInkRipple: 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() && "generic" === devices.real().platform && "generic" === _device.platform
                    },
                    options: {
                        showScrollbar: "onHover",
                        pageLoadMode: "nextButton"
                    }
                }, {
                    device: function() {
                        return "desktop" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }, {
                    device: function() {
                        return themes.isAndroid5(themeName)
                    },
                    options: {
                        useInkRipple: true
                    }
                }, {
                    device: function() {
                        return "win" === devices.current().platform && devices.isSimulator()
                    },
                    options: {
                        bounceEnabled: false
                    }
                }, {
                    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())
                }
            },
            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();
                this.setAria("role", "listbox")
            },
            _scrollBottomMode: function() {
                return "scrollBottom" === this.option("pageLoadMode")
            },
            _nextButtonMode: function() {
                return "nextButton" === this.option("pageLoadMode")
            },
            _dataSourceOptions: function() {
                var scrollBottom = this._scrollBottomMode(),
                    nextButton = this._nextButtonMode();
                return extend(this.callBase(), {
                    paginate: commonUtils.ensureDefined(scrollBottom || nextButton, true)
                })
            },
            _dataSourceFromUrlLoadMode: function() {
                return "raw"
            },
            _initScrollView: function() {
                var scrollingEnabled = this.option("scrollingEnabled"),
                    pullRefreshEnabled = scrollingEnabled && this.option("pullRefreshEnabled"),
                    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());
                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.callBase();
                this._defaultTemplates.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"))
            },
            _prepareDefaultItemTemplate: function(data, $container) {
                this.callBase(data, $container);
                if (data.icon) {
                    var $icon = iconUtils.getImageContainer(data.icon).addClass(LIST_ITEM_ICON_CLASS),
                        $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(),
                    scrollBottomMode = this._scrollBottomMode(),
                    stopLoading = isDataLoaded || !scrollBottomMode,
                    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),
                    selector = "." + LIST_GROUP_HEADER_CLASS,
                    $element = this.$element(),
                    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()
            },
            _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() {
                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"),
                    groupTemplate = this._getTemplate(group.template || groupTemplateName, group, index, $groupHeaderElement),
                    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
                })
            },
            attachGroupHeaderInkRippleEvents: function() {
                var that = this,
                    selector = "." + LIST_GROUP_HEADER_CLASS,
                    $element = this.$element();
                eventsEngine.on($element, "dxpointerdown", selector, function(e) {
                    that._toggleActiveState($(e.currentTarget), true, e)
                });
                eventsEngine.on($element, "dxpointerup dxhoverend", selector, function(e) {
                    that._toggleActiveState($(e.currentTarget), false)
                })
            },
            _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,
                    $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 "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;
                    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,
                    $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,
                    $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,
                    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)
            }
        });
        ListBase.ItemClass = ListItem;
        module.exports = ListBase;
        module.exports.mockScrollView = function(Mock) {
            ScrollView = Mock
        }
    },
    /*!*********************************************************************!*\
      !*** ./artifacts/transpiled/ui/scroll_view/ui.scrollable.native.js ***!
      \*********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            Class = __webpack_require__( /*! ../../core/class */ 10),
            Scrollbar = __webpack_require__( /*! ./ui.scrollbar */ 300);
        var SCROLLABLE_NATIVE = "dxNativeScrollable",
            SCROLLABLE_NATIVE_CLASS = "dx-scrollable-native",
            SCROLLABLE_SCROLLBAR_SIMULATED = "dx-scrollable-scrollbar-simulated",
            SCROLLABLE_SCROLLBARS_HIDDEN = "dx-scrollable-scrollbars-hidden",
            VERTICAL = "vertical",
            HORIZONTAL = "horizontal",
            HIDE_SCROLLBAR_TIMEOUT = 500;
        var NativeStrategy = Class.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 = devices.real(),
                    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: 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 Scrollbar($("<div>").appendTo(this._$element), {
                    direction: direction,
                    expandable: this._component.option("scrollByThumb")
                })
            },
            handleInit: 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: noop,
            handleStop: noop,
            _eachScrollbar: function(callback) {
                callback = callback.bind(this);
                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();
                return {
                    event: this._eventForUserAction,
                    scrollOffset: {
                        top: -location.top,
                        left: -location.left
                    },
                    reachedLeft: this._isDirection(HORIZONTAL) ? location.left >= 0 : void 0,
                    reachedRight: this._isDirection(HORIZONTAL) ? location.left <= this._containerSize.width - this._componentContentSize.width : void 0,
                    reachedTop: this._isDirection(VERTICAL) ? location.top >= 0 : void 0,
                    reachedBottom: this._isDirection(VERTICAL) ? location.top <= this._containerSize.height - this._componentContentSize.height : 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,
                    scrollTopPos = this._$container.scrollTop(),
                    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(),
                    lastLocation = this._lastLocation || {},
                    isTopChanged = lastLocation.top !== currentLocation.top,
                    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: 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(" "))
                }
                eventsEngine.off(this._$element, "." + SCROLLABLE_NATIVE);
                eventsEngine.off(this._$container, "." + SCROLLABLE_NATIVE);
                this._removeScrollbars();
                clearTimeout(this._gestureEndTimer);
                clearTimeout(this._hideScrollbarTimeout)
            },
            _removeScrollbars: function() {
                this._eachScrollbar(function(scrollbar) {
                    scrollbar.$element().remove()
                })
            },
            scrollBy: function(distance) {
                var location = this.location();
                this._$container.scrollTop(-location.top - distance.top + this.option("pushBackValue"));
                this._$container.scrollLeft(-location.left - distance.left)
            },
            validate: function() {
                return !this.option("disabled") && this._allowedDirection()
            },
            getDirection: function() {
                return this._allowedDirection()
            },
            verticalOffset: function() {
                return this.option("pushBackValue")
            }
        });
        module.exports = NativeStrategy
    },
    /*!****************************************!*\
      !*** ./artifacts/transpiled/ui/box.js ***!
      \****************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            Class = __webpack_require__( /*! ../core/class */ 10),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            noop = __webpack_require__( /*! ../core/utils/common */ 4).noop,
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6),
            inflector = __webpack_require__( /*! ../core/utils/inflector */ 34),
            isDefined = __webpack_require__( /*! ../core/utils/type */ 1).isDefined,
            styleUtils = __webpack_require__( /*! ../core/utils/style */ 85),
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            browser = __webpack_require__( /*! ../core/utils/browser */ 38),
            CollectionWidgetItem = __webpack_require__( /*! ./collection/item */ 154),
            devices = __webpack_require__( /*! ../core/devices */ 16),
            CollectionWidget = __webpack_require__( /*! ./collection/ui.collection_widget.edit */ 47);
        var BOX_CLASS = "dx-box",
            BOX_SELECTOR = ".dx-box",
            BOX_ITEM_CLASS = "dx-box-item",
            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 BoxItem = CollectionWidgetItem.inherit({
            _renderVisible: function(value, oldValue) {
                this.callBase(value);
                if (isDefined(oldValue)) {
                    this._options.fireItemStateChangedAction({
                        name: "visible",
                        state: value,
                        oldState: oldValue
                    })
                }
            }
        });
        var setFlexProp = function(element, prop, value) {
            value = styleUtils.normalizeStyleProp(prop, value);
            element.style[styleUtils.styleProp(prop)] = value;
            if (!windowUtils.hasWindow()) {
                if ("" === value || !isDefined(value)) {
                    return
                }
                var cssName = inflector.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 FlexLayoutStrategy = Class.inherit({
            ctor: function($element, option) {
                this._$element = $element;
                this._option = option
            },
            renderBox: function() {
                this._$element.css({
                    display: styleUtils.stylePropPrefix("flexDirection") + "flex"
                });
                setFlexProp(this._$element.get(0), "flexDirection", FLEX_DIRECTION_MAP[this._option("direction")])
            },
            renderAlign: function() {
                this._$element.css({
                    justifyContent: this._normalizedAlign()
                })
            },
            _normalizedAlign: function() {
                var align = this._option("align");
                return align in FLEX_JUSTIFY_CONTENT_MAP ? FLEX_JUSTIFY_CONTENT_MAP[align] : align
            },
            renderCrossAlign: function() {
                this._$element.css({
                    alignItems: this._normalizedCrossAlign()
                })
            },
            _normalizedCrossAlign: function() {
                var crossAlign = this._option("crossAlign");
                return crossAlign in FLEX_ALIGN_ITEMS_MAP ? FLEX_ALIGN_ITEMS_MAP[crossAlign] : crossAlign
            },
            renderItems: function($items) {
                var flexPropPrefix = styleUtils.stylePropPrefix("flexDirection");
                var direction = this._option("direction");
                each($items, function() {
                    var $item = $(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", isDefined(item.shrink) ? item.shrink : SHRINK);
                    $item.children().each(function(_, itemContent) {
                        $(itemContent).css({
                            width: "auto",
                            height: "auto",
                            display: styleUtils.stylePropPrefix("flexDirection") + "flex",
                            flexBasis: 0
                        });
                        setFlexProp(itemContent, "flexGrow", 1);
                        setFlexProp(itemContent, "flexDirection", $(itemContent)[0].style.flexDirection || "column")
                    })
                })
            },
            initSize: noop,
            update: noop
        });
        var BOX_EVENTNAMESPACE = "dxBox",
            UPDATE_EVENT = "dxupdate." + BOX_EVENTNAMESPACE,
            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 FallbackLayoutStrategy = Class.inherit({
            ctor: function($element, option) {
                this._$element = $element;
                this._option = option
            },
            renderBox: function() {
                this._$element.css({
                    fontSize: 0,
                    whiteSpace: FALLBACK_WRAP_MAP[this._option("direction")],
                    verticalAlign: "top"
                });
                eventsEngine.off(this._$element, UPDATE_EVENT);
                eventsEngine.on(this._$element, UPDATE_EVENT, this.update.bind(this))
            },
            renderAlign: function() {
                var $items = this._$items;
                if (!$items) {
                    return
                }
                var align = this._option("align"),
                    shift = 0,
                    totalItemSize = this.totalItemSize,
                    direction = this._option("direction"),
                    boxSize = this._$element[FALLBACK_MAIN_SIZE_MAP[direction]](),
                    freeSpace = boxSize - totalItemSize;
                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)
                }
            },
            _setItemsMargins: function($items, direction, shift) {
                $items.css(this._chooseMarginSide(FALLBACK_PRE_MARGIN_MAP[direction]), shift).css(this._chooseMarginSide(FALLBACK_POST_MARGIN_MAP[direction]), shift)
            },
            renderCrossAlign: function() {
                var $items = this._$items;
                if (!$items) {
                    return
                }
                var crossAlign = this._option("crossAlign"),
                    direction = this._option("direction"),
                    size = this._$element[FALLBACK_CROSS_SIZE_MAP[direction]]();
                var that = this;
                switch (crossAlign) {
                    case "start":
                        break;
                    case "end":
                        each($items, function() {
                            var $item = $(this),
                                itemSize = $item[FALLBACK_CROSS_SIZE_MAP[direction]](),
                                shift = size - itemSize;
                            $item.css(that._chooseMarginSide(FALLBACK_CROSS_PRE_MARGIN_MAP[direction]), shift)
                        });
                        break;
                    case "center":
                        each($items, function() {
                            var $item = $(this),
                                itemSize = $item[FALLBACK_CROSS_SIZE_MAP[direction]](),
                                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%")
                }
            },
            _chooseMarginSide: function(value) {
                if (!this._option("rtlEnabled")) {
                    return value
                }
                return MARGINS_RTL_FLIP_MAP[value] || value
            },
            renderItems: function($items) {
                this._$items = $items;
                var direction = this._option("direction"),
                    totalRatio = 0,
                    totalWeightedShrink = 0,
                    totalBaseSize = 0;
                each($items, function(_, item) {
                    var $item = $(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),
                        ratio = itemData.ratio || 0,
                        size = this._baseSize($item),
                        shrink = isDefined(itemData.shrink) ? itemData.shrink : SHRINK;
                    totalRatio += ratio;
                    totalWeightedShrink += shrink * size;
                    totalBaseSize += size
                }.bind(this));
                var freeSpaceSize = this._boxSize() - totalBaseSize;
                var itemSize = function($item) {
                    var itemData = $item.data(BOX_ITEM_DATA_KEY),
                        size = this._baseSize($item),
                        factor = freeSpaceSize >= 0 ? itemData.ratio || 0 : (isDefined(itemData.shrink) ? itemData.shrink : SHRINK) * size,
                        totalFactor = freeSpaceSize >= 0 ? totalRatio : totalWeightedShrink,
                        shift = totalFactor ? Math.round(freeSpaceSize * factor / totalFactor) : 0;
                    return size + shift
                }.bind(this);
                var totalItemSize = 0;
                each($items, function(_, item) {
                    var $item = $(item),
                        itemData = $(item).data(BOX_ITEM_DATA_KEY),
                        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
            },
            _baseSize: function(item) {
                var itemData = $(item).data(BOX_ITEM_DATA_KEY);
                return null == itemData.baseSize ? 0 : "auto" === itemData.baseSize ? this._contentSize(item) : this._parseSize(itemData.baseSize)
            },
            _contentSize: function(item) {
                return $(item)[FALLBACK_MAIN_SIZE_MAP[this._option("direction")]]()
            },
            _parseSize: function(size) {
                return String(size).match(/.+%$/) ? .01 * parseFloat(size) * this._boxSizeValue : size
            },
            _boxSize: function(value) {
                if (!arguments.length) {
                    this._boxSizeValue = this._boxSizeValue || this._totalBaseSize();
                    return this._boxSizeValue
                }
                this._boxSizeValue = value
            },
            _totalBaseSize: function() {
                var result = 0;
                each(this._$items, function(_, item) {
                    result += this._baseSize(item)
                }.bind(this));
                return result
            },
            initSize: function() {
                this._boxSize(this._$element[FALLBACK_MAIN_SIZE_MAP[this._option("direction")]]())
            },
            update: 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 === $(this).parent().closest(BOX_SELECTOR).get(0)) {
                        eventsEngine.triggerHandler(this, UPDATE_EVENT)
                    }
                })
            }
        });
        var Box = CollectionWidget.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    direction: "row",
                    align: "start",
                    crossAlign: "stretch",
                    activeStateEnabled: false,
                    focusStateEnabled: false,
                    onItemStateChanged: void 0,
                    _layoutStrategy: "flex",
                    _queue: void 0
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function device() {
                        var device = devices.real();
                        var isOldAndroid = "android" === device.platform && (device.version[0] < 4 || 4 === device.version[0] && device.version[1] < 4),
                            isOldIos = "ios" === device.platform && device.version[0] < 7;
                        return "win" === device.platform || browser.msie || isOldAndroid || isOldIos
                    },
                    options: {
                        _layoutStrategy: "fallback"
                    }
                }])
            },
            _itemClass: function() {
                return BOX_ITEM_CLASS
            },
            _itemDataKey: function() {
                return BOX_ITEM_DATA_KEY
            },
            _itemElements: function() {
                return this._itemContainer().children(this._itemSelector())
            },
            _init: function() {
                this.callBase();
                this.$element().addClass(BOX_CLASS + "-" + this.option("_layoutStrategy"));
                this._initLayout();
                this._initBoxQueue()
            },
            _initLayout: function() {
                this._layout = "fallback" === this.option("_layoutStrategy") ? new FallbackLayoutStrategy(this.$element(), this.option.bind(this)) : new FlexLayoutStrategy(this.$element(), this.option.bind(this))
            },
            _initBoxQueue: function() {
                this._queue = this.option("_queue") || []
            },
            _queueIsNotEmpty: function() {
                return this.option("_queue") ? false : !!this._queue.length
            },
            _pushItemToQueue: function($item, config) {
                this._queue.push({
                    $item: $item,
                    config: config
                })
            },
            _shiftItemFromQueue: function() {
                return this._queue.shift()
            },
            _initMarkup: function() {
                this.$element().addClass(BOX_CLASS);
                this._layout.renderBox();
                this.callBase();
                this._renderAlign();
                this._renderActions()
            },
            _renderActions: function() {
                this._onItemStateChanged = this._createActionByOption("onItemStateChanged")
            },
            _renderAlign: function() {
                this._layout.renderAlign();
                this._layout.renderCrossAlign()
            },
            _renderItems: function(items) {
                this._layout.initSize();
                this.callBase(items);
                while (this._queueIsNotEmpty()) {
                    var item = this._shiftItemFromQueue();
                    this._createComponent(item.$item, Box, 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 (!this._isUpdated) {
                        this._layout.update()
                    }
                    this._isUpdated = false;
                    this._updateTimer = null
                }.bind(this))
            },
            _renderItemContent: function(args) {
                var $itemNode = args.itemData && args.itemData.node;
                if ($itemNode) {
                    return this._renderItemContentByNode(args, $itemNode)
                }
                return this.callBase(args)
            },
            _postprocessRenderItem: function(args) {
                var boxConfig = args.itemData.box;
                if (!boxConfig) {
                    return
                }
                this._pushItemToQueue(args.itemContent, boxConfig)
            },
            _createItemByTemplate: function(itemTemplate, args) {
                if (args.itemData.box) {
                    return itemTemplate.source ? itemTemplate.source() : $()
                }
                return this.callBase(itemTemplate, args)
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._dimensionChanged()
                }
            },
            _dimensionChanged: function() {
                if (this._updateTimer) {
                    return
                }
                this._isUpdated = true;
                this._layout.update()
            },
            _dispose: function() {
                clearTimeout(this._updateTimer);
                this.callBase.apply(this, arguments)
            },
            _itemOptionChanged: function(item, property, value, oldValue) {
                if ("visible" === property) {
                    this._onItemStateChanged({
                        name: property,
                        state: value,
                        oldState: false !== oldValue
                    })
                }
                this.callBase(item, property, value)
            },
            _optionChanged: 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:
                        this.callBase(args)
                }
            },
            _itemOptions: function() {
                var that = this,
                    options = this.callBase();
                options.fireItemStateChangedAction = function(e) {
                    that._onItemStateChanged(e)
                };
                return options
            },
            repaint: function() {
                this._dimensionChanged()
            }
        });
        Box.ItemClass = BoxItem;
        registerComponent("dxBox", Box);
        module.exports = Box
    },
    /*!******************************************************************!*\
      !*** ./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),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            Class = __webpack_require__( /*! ../../core/class */ 10),
            dateLocalization = __webpack_require__( /*! ../../localization/date */ 32);
        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,
            attachKeyboardEvents: function(keyboardProcessor) {
                this._widgetKeyboardProcessor = keyboardProcessor.attachChildProcessor()
            },
            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())
            },
            _valueChangedHandler: function(args) {
                if (this.dateBox.option("opened") && "instantly" === this.dateBox.option("applyValueMode")) {
                    this.dateBoxValue(args.value)
                }
            },
            useCurrentDateByDefault: noop,
            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__) {
        var _createClass = function() {
            function defineProperties(target, props) {
                for (var i = 0; i < props.length; i++) {
                    var descriptor = props[i];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) {
                        descriptor.writable = true
                    }
                    Object.defineProperty(target, descriptor.key, descriptor)
                }
            }
            return function(Constructor, protoProps, staticProps) {
                if (protoProps) {
                    defineProperties(Constructor.prototype, protoProps)
                }
                if (staticProps) {
                    defineProperties(Constructor, staticProps)
                }
                return Constructor
            }
        }();
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _fx = __webpack_require__( /*! ../../animation/fx */ 31);
        var _fx2 = _interopRequireDefault(_fx);

        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")
            }
        }
        var animation = {
            moveTo: function(config) {
                var $element = config.$element,
                    position = config.position,
                    direction = config.direction || "left",
                    toConfig = {},
                    animationType = void 0;
                if ("right" === direction) {
                    toConfig.transform = "translate(" + position + "px, 0px)";
                    animationType = "custom"
                }
                if ("left" === direction) {
                    toConfig.left = position;
                    animationType = "slide"
                }
                if ("top" === direction || "bottom" === direction) {
                    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,
                    margin = config.margin,
                    direction = config.direction || "left",
                    toConfig = {};
                toConfig["margin" + direction.charAt(0).toUpperCase() + direction.substr(1)] = 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,
                    size = config.size,
                    direction = config.direction || "left",
                    marginTop = config.marginTop || 0,
                    duration = config.duration,
                    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: "renderPanel",
                value: function(template, whenPanelRendered) {
                    template && template.render({
                        container: this.getDrawerInstance().content(),
                        onRendered: function() {
                            whenPanelRendered.resolve()
                        }
                    })
                }
            }, {
                key: "renderPosition",
                value: function(offset, animate) {
                    var _this = this;
                    this._drawer._animations.push(new Promise(function(resolve) {
                        _this._contentAnimationResolve = resolve
                    }));
                    this._drawer._animations.push(new Promise(function(resolve) {
                        _this._panelAnimationResolve = resolve
                    }));
                    this._drawer._animations.push(new Promise(function(resolve) {
                        _this._shaderAnimationResolve = resolve
                    }));
                    if (animate) {
                        Promise.all(this._drawer._animations).then(function() {
                            _this._drawer._animationCompleteHandler()
                        })
                    }
                }
            }, {
                key: "_getPanelOffset",
                value: function(offset) {
                    var drawer = this.getDrawerInstance();
                    var size = drawer.isHorizontalDirection() ? drawer.getRealPanelWidth() : drawer.getRealPanelHeight();
                    if (offset) {
                        return -(size - drawer.getMaxSize())
                    } else {
                        return -(size - drawer.getMinSize())
                    }
                }
            }, {
                key: "_getPanelSize",
                value: function(offset) {
                    return offset ? this.getDrawerInstance().getMaxSize() : this.getDrawerInstance().getMinSize()
                }
            }, {
                key: "renderShaderVisibility",
                value: function(offset, animate, duration) {
                    var _this2 = this;
                    var fadeConfig = this._getFadeConfig(offset);
                    var drawer = this.getDrawerInstance();
                    if (animate) {
                        animation.fade((0, _renderer2.default)(drawer._$shader), fadeConfig, duration, function() {
                            _this2._drawer._toggleShaderVisibility(offset);
                            _this2._shaderAnimationResolve()
                        })
                    } else {
                        drawer._toggleShaderVisibility(offset);
                        drawer._$shader.css("opacity", fadeConfig.to)
                    }
                }
            }, {
                key: "_getFadeConfig",
                value: function(offset) {
                    if (offset) {
                        return {
                            to: .5,
                            from: 0
                        }
                    } else {
                        return {
                            to: 0,
                            from: .5
                        }
                    }
                }
            }, {
                key: "getPanelContent",
                value: function() {
                    return (0, _renderer2.default)(this.getDrawerInstance().content())
                }
            }, {
                key: "getWidth",
                value: function() {
                    return this.getDrawerInstance().$element().get(0).getBoundingClientRect().width
                }
            }, {
                key: "setPanelSize",
                value: function(keepMaxSize) {
                    var drawer = this.getDrawerInstance();
                    var panelSize = this._getPanelSize(drawer.option("opened"));
                    if (drawer.isHorizontalDirection()) {
                        (0, _renderer2.default)(drawer.content()).css("width", keepMaxSize ? drawer.getRealPanelWidth() : panelSize)
                    } else {
                        (0, _renderer2.default)(drawer.content()).css("height", keepMaxSize ? drawer.getRealPanelHeight() : panelSize)
                    }
                }
            }]);
            return DrawerStrategy
        }();
        module.exports = DrawerStrategy;
        module.exports.animation = animation
    },
    /*!******************************************!*\
      !*** ./artifacts/transpiled/exporter.js ***!
      \******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var fileSaver = __webpack_require__( /*! ./exporter/file_saver */ 231).fileSaver,
            excelCreator = __webpack_require__( /*! ./exporter/excel_creator */ 325),
            imageCreator = __webpack_require__( /*! ./exporter/image_creator */ 241),
            svgCreator = __webpack_require__( /*! ./exporter/svg_creator */ 332),
            _isFunction = __webpack_require__( /*! ./core/utils/type */ 1).isFunction;
        exports.export = function(data, options, getData) {
            if (!data) {
                return
            }
            var exportingAction = options.exportingAction,
                exportedAction = options.exportedAction,
                fileSavingAction = options.fileSavingAction,
                eventArgs = {
                    fileName: options.fileName,
                    format: options.format,
                    cancel: false
                };
            _isFunction(exportingAction) && exportingAction(eventArgs);
            if (!eventArgs.cancel) {
                getData(data, options, 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, void 0, options.forceProxy)
                    }
                })
            }
        };
        exports.fileSaver = fileSaver;
        exports.excel = {
            creator: excelCreator.ExcelCreator,
            getData: excelCreator.getData,
            formatConverter: __webpack_require__( /*! ./exporter/excel_format_converter */ 235)
        };
        exports.excel.__internals = excelCreator.__internals;
        exports.image = {
            creator: imageCreator.imageCreator,
            getData: imageCreator.getData,
            testFormats: imageCreator.testFormats
        };
        exports.pdf = {
            getData: __webpack_require__( /*! ./exporter/pdf_creator */ 334).getData
        };
        exports.svg = {
            creator: svgCreator.svgCreator,
            getData: svgCreator.getData
        }
    },
    /*!*********************************************************!*\
      !*** ./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 */ 11).inArray,
            windowUtils = __webpack_require__( /*! ../../core/utils/window */ 6),
            weakMap = windowUtils.hasWindow() ? windowUtils.getWindow().WeakMap : WeakMap;
        if (!weakMap) {
            weakMap = function() {
                var keys = [],
                    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__) {
        var each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            Callbacks = __webpack_require__( /*! ./utils/callbacks */ 21);
        var MemorizedCallbacks = function() {
            var memory = [];
            var callbacks = Callbacks();
            this.add = function(fn) {
                each(memory, function(_, item) {
                    fn.apply(fn, item)
                });
                callbacks.add(fn)
            };
            this.remove = function(fn) {
                callbacks.remove(fn)
            };
            this.fire = function() {
                memory.push(arguments);
                callbacks.fire.apply(callbacks, arguments)
            }
        };
        module.exports = MemorizedCallbacks
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/core/utils/queue.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var errors = __webpack_require__( /*! ../errors */ 19),
            when = __webpack_require__( /*! ../../core/utils/deferred */ 7).when;

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

            function exec() {
                while (_tasks.length) {
                    _busy = true;
                    var task = _tasks.shift(),
                        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/framework/command.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ../integration/jquery */ 46);
        var $ = __webpack_require__( /*! jquery */ 29),
            errors = __webpack_require__( /*! ./errors */ 68),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            typeUtils = __webpack_require__( /*! ../core/utils/type */ 1),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            DOMComponent = __webpack_require__( /*! ../core/dom_component */ 59),
            isFunction = typeUtils.isFunction,
            isPlainObject = typeUtils.isPlainObject,
            noop = __webpack_require__( /*! ../core/utils/common */ 4).noop;
        __webpack_require__( /*! ../integration/knockout */ 121);
        var Command = DOMComponent.inherit({
            ctor: function(element, options) {
                if (isPlainObject(element)) {
                    options = element;
                    element = $("<div>")
                }
                this.callBase(element, options)
            },
            _setDeprecatedOptions: function() {
                this.callBase();
                extend(this._deprecatedOptions, {
                    iconSrc: {
                        since: "15.1",
                        alias: "icon"
                    }
                })
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    onExecute: null,
                    id: null,
                    title: "",
                    icon: "",
                    visible: true,
                    disabled: false,
                    renderStage: "onViewShown"
                })
            },
            execute: function() {
                var isDisabled = this._options.disabled;
                if (isFunction(isDisabled)) {
                    isDisabled = !!isDisabled.apply(this, arguments)
                }
                if (isDisabled) {
                    throw errors.Error("E3004", this._options.id)
                }
                this.fireEvent("beforeExecute", arguments);
                this._createActionByOption("onExecute").apply(this, arguments);
                this.fireEvent("afterExecute", arguments)
            },
            _render: function() {
                this.callBase();
                this.$element().addClass("dx-command")
            },
            _renderDisabledState: noop,
            _dispose: function() {
                this.callBase();
                this.$element().removeData(this.NAME)
            }
        });
        registerComponent("dxCommand", Command);
        module.exports = Command
    },
    /*!*********************************************************!*\
      !*** ./artifacts/transpiled/framework/state_manager.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ../core/class */ 10),
            inArray = __webpack_require__( /*! ../core/utils/array */ 11).inArray,
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each;
        var MemoryKeyValueStorage = Class.inherit({
            ctor: function() {
                this.storage = {}
            },
            getItem: function(key) {
                return this.storage[key]
            },
            setItem: function(key, value) {
                this.storage[key] = value
            },
            removeItem: function(key) {
                delete this.storage[key]
            }
        });
        var StateManager = Class.inherit({
            ctor: function(options) {
                options = options || {};
                this.storage = options.storage || new MemoryKeyValueStorage;
                this.stateSources = options.stateSources || []
            },
            addStateSource: function(stateSource) {
                this.stateSources.push(stateSource)
            },
            removeStateSource: function(stateSource) {
                var index = inArray(stateSource, this.stateSources);
                if (index > -1) {
                    this.stateSources.splice(index, 1);
                    stateSource.removeState(this.storage)
                }
            },
            saveState: function() {
                var that = this;
                each(this.stateSources, function(index, stateSource) {
                    stateSource.saveState(that.storage)
                })
            },
            restoreState: function() {
                var that = this;
                each(this.stateSources, function(index, stateSource) {
                    stateSource.restoreState(that.storage)
                })
            },
            clearState: function() {
                var that = this;
                each(this.stateSources, function(index, stateSource) {
                    stateSource.removeState(that.storage)
                })
            }
        });
        module.exports = StateManager;
        module.exports.MemoryKeyValueStorage = MemoryKeyValueStorage
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/framework/html/command_container.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ../../integration/jquery */ 46);
        var $ = __webpack_require__( /*! jquery */ 29),
            MarkupComponent = __webpack_require__( /*! ./markup_component */ 186).MarkupComponent,
            isPlainObject = __webpack_require__( /*! ../../core/utils/type */ 1).isPlainObject,
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8);
        __webpack_require__( /*! ../../integration/knockout */ 121);
        var CommandContainer = MarkupComponent.inherit({
            ctor: function(element, options) {
                if (isPlainObject(element)) {
                    options = element;
                    element = $("<div>")
                }
                this.callBase(element, options)
            },
            _setDefaultOptions: function() {
                this.callBase();
                this.option({
                    id: null
                })
            },
            _render: function() {
                this.callBase();
                this.element().addClass("dx-command-container")
            }
        });
        registerComponent("dxCommandContainer", CommandContainer);
        module.exports = CommandContainer
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/framework/html/markup_component.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ../../integration/jquery */ 46);
        var $ = __webpack_require__( /*! jquery */ 29),
            Class = __webpack_require__( /*! ../../core/class */ 10),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            publicComponentUtils = __webpack_require__( /*! ../../core/utils/public_component */ 107);
        var MarkupComponent = Class.inherit({
            ctor: function(element, options) {
                this.NAME = publicComponentUtils.name(this.constructor);
                options = options || {};
                this._$element = $(element);
                publicComponentUtils.attachInstanceToElement(this._$element, this, this._dispose);
                if (options.fromCache) {
                    this._options = options
                } else {
                    this._options = {};
                    this._setDefaultOptions();
                    if (options) {
                        this.option(options)
                    }
                    this._render()
                }
            },
            _setDefaultOptions: noop,
            _render: noop,
            _dispose: noop,
            element: function() {
                return this._$element
            },
            option: function(name, value) {
                if (0 === arguments.length) {
                    return this._options
                } else {
                    if (1 === arguments.length) {
                        if ("string" === typeof name) {
                            return this._options[name]
                        } else {
                            value = name;
                            extend(this._options, value)
                        }
                    } else {
                        this._options[name] = value
                    }
                }
            },
            instance: function() {
                return this
            }
        });
        MarkupComponent.getInstance = function($element) {
            return publicComponentUtils.getInstanceByElement($($element), this)
        };
        exports.MarkupComponent = MarkupComponent
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/framework/command_mapping.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ../core/class */ 10),
            grep = __webpack_require__( /*! ../core/utils/common */ 4).grep,
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            inArray = __webpack_require__( /*! ../core/utils/array */ 11).inArray,
            errors = __webpack_require__( /*! ./errors */ 68);
        var CommandMapping = Class.inherit({
            ctor: function() {
                this._commandMappings = {};
                this._containerDefaults = {}
            },
            setDefaults: function(containerId, defaults) {
                this._containerDefaults[containerId] = defaults;
                return this
            },
            mapCommands: function(containerId, commandMappings) {
                var that = this;
                each(commandMappings, function(index, commandMapping) {
                    if ("string" === typeof commandMapping) {
                        commandMapping = {
                            id: commandMapping
                        }
                    }
                    var commandId = commandMapping.id;
                    var mappings = that._commandMappings[containerId] || {};
                    mappings[commandId] = extend({
                        showIcon: true,
                        showText: true
                    }, that._containerDefaults[containerId] || {}, commandMapping);
                    that._commandMappings[containerId] = mappings
                });
                this._initExistingCommands();
                return this
            },
            unmapCommands: function(containerId, commandIds) {
                var that = this;
                each(commandIds, function(index, commandId) {
                    var mappings = that._commandMappings[containerId] || {};
                    if (mappings) {
                        delete mappings[commandId]
                    }
                });
                this._initExistingCommands()
            },
            getCommandMappingForContainer: function(commandId, containerId) {
                return (this._commandMappings[containerId] || {})[commandId]
            },
            checkCommandsExist: function(commands) {
                var that = this,
                    result = grep(commands, function(commandName, index) {
                        return inArray(commandName, that._existingCommands) < 0 && inArray(commandName, commands) === index
                    });
                if (0 !== result.length) {
                    throw errors.Error("E3005", result.join("', '"), 1 === result.length ? " is" : "s are")
                }
            },
            load: function(config) {
                if (!config) {
                    return
                }
                var that = this;
                each(config, function(name, container) {
                    that.setDefaults(name, container.defaults);
                    that.mapCommands(name, container.commands)
                });
                return this
            },
            _initExistingCommands: function() {
                var that = this;
                this._existingCommands = [];
                each(that._commandMappings, function(name, _commands) {
                    each(_commands, function(index, command) {
                        if (inArray(command.id, that._existingCommands) < 0) {
                            that._existingCommands.push(command.id)
                        }
                    })
                })
            }
        });
        CommandMapping.defaultMapping = {
            "global-navigation": {
                defaults: {
                    showIcon: true,
                    showText: true
                },
                commands: []
            },
            "ios-header-toolbar": {
                defaults: {
                    showIcon: false,
                    showText: true,
                    location: "after"
                },
                commands: ["edit", "save", {
                    id: "back",
                    location: "before"
                }, {
                    id: "cancel",
                    location: "before"
                }, {
                    id: "create",
                    showIcon: true,
                    showText: false
                }]
            },
            "ios-action-sheet": {
                defaults: {
                    showIcon: false,
                    showText: true
                },
                commands: []
            },
            "ios-view-footer": {
                defaults: {
                    showIcon: false,
                    showText: true
                },
                commands: [{
                    id: "delete",
                    type: "danger"
                }]
            },
            "android-header-toolbar": {
                defaults: {
                    showIcon: true,
                    showText: false,
                    location: "after"
                },
                commands: [{
                    id: "back",
                    showIcon: false,
                    location: "before"
                }, "create", {
                    id: "save",
                    showText: true,
                    showIcon: false,
                    location: "after"
                }, {
                    id: "edit",
                    showText: false,
                    location: "after"
                }, {
                    id: "cancel",
                    showText: false,
                    location: "before"
                }, {
                    id: "delete",
                    showText: false,
                    location: "after"
                }]
            },
            "android-simple-toolbar": {
                defaults: {
                    showIcon: true,
                    showText: false,
                    location: "after"
                },
                commands: [{
                    id: "back",
                    showIcon: false,
                    location: "before"
                }, {
                    id: "create"
                }, {
                    id: "save",
                    showText: true,
                    showIcon: false,
                    location: "after"
                }, {
                    id: "edit",
                    showText: false,
                    location: "after"
                }, {
                    id: "cancel",
                    showText: false,
                    location: "before"
                }, {
                    id: "delete",
                    showText: false,
                    location: "after"
                }]
            },
            "android-footer-toolbar": {
                defaults: {
                    location: "after"
                },
                commands: [{
                    id: "create",
                    showText: false,
                    location: "center"
                }, {
                    id: "edit",
                    showText: false,
                    location: "before"
                }, {
                    id: "delete",
                    locateInMenu: "always"
                }, {
                    id: "save",
                    showIcon: false,
                    location: "before"
                }]
            },
            "generic-header-toolbar": {
                defaults: {
                    showIcon: false,
                    showText: true,
                    location: "after"
                },
                commands: ["edit", "save", {
                    id: "back",
                    location: "before"
                }, {
                    id: "cancel",
                    location: "before"
                }, {
                    id: "create",
                    showIcon: true,
                    showText: false
                }]
            },
            "generic-view-footer": {
                defaults: {
                    showIcon: false,
                    showText: true
                },
                commands: [{
                    id: "delete",
                    type: "danger"
                }]
            },
            "win8-appbar": {
                defaults: {
                    location: "after"
                },
                commands: ["edit", "cancel", "save", "delete", {
                    id: "create",
                    location: "before"
                }, {
                    id: "refresh",
                    location: "before"
                }]
            },
            "win8-toolbar": {
                defaults: {
                    showText: false,
                    location: "before"
                },
                commands: [{
                    id: "previousPage"
                }]
            },
            "win8-phone-appbar": {
                defaults: {
                    location: "center"
                },
                commands: ["create", "edit", "cancel", "save", "refresh", {
                    id: "delete",
                    locateInMenu: "always"
                }]
            },
            "win8-split-toolbar": {
                defaults: {
                    showIcon: true,
                    showText: false,
                    location: "after"
                },
                commands: [{
                    id: "back",
                    showIcon: false,
                    location: "before"
                }, {
                    id: "create"
                }, {
                    id: "save",
                    showText: true,
                    location: "before"
                }, {
                    id: "edit",
                    showText: true,
                    locateInMenu: "always"
                }, {
                    id: "cancel",
                    showText: true,
                    locateInMenu: "always"
                }, {
                    id: "delete",
                    showText: true,
                    locateInMenu: "always"
                }]
            },
            "win8-master-detail-toolbar": {
                defaults: {
                    showText: false,
                    location: "before"
                },
                commands: ["back"]
            },
            "win10-appbar": {
                defaults: {
                    showText: false,
                    location: "after"
                },
                commands: [{
                    id: "back",
                    location: "before"
                }, "edit", "cancel", "save", "delete", "create", "refresh"]
            },
            "win10-phone-appbar": {
                defaults: {
                    location: "after"
                },
                commands: ["create", "edit", "cancel", "save", "refresh", {
                    id: "delete",
                    locateInMenu: "always"
                }]
            },
            "desktop-toolbar": {
                defaults: {
                    showIcon: false,
                    showText: true,
                    location: "after"
                },
                commands: ["cancel", "create", "edit", "save", {
                    id: "delete",
                    type: "danger"
                }]
            }
        };
        module.exports = CommandMapping
    },
    /*!******************************************************************!*\
      !*** ./artifacts/transpiled/framework/html/layout_controller.js ***!
      \******************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ../../integration/jquery */ 46);
        var $ = __webpack_require__( /*! jquery */ 29),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            Class = __webpack_require__( /*! ../../core/class */ 10),
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            iteratorUtils = __webpack_require__( /*! ../../core/utils/iterator */ 3),
            frameworkUtils = __webpack_require__( /*! ../utils */ 122),
            layoutSets = __webpack_require__( /*! ./presets */ 152).layoutSets,
            EventsMixin = __webpack_require__( /*! ../../core/events_mixin */ 54),
            errors = __webpack_require__( /*! ../errors */ 68),
            domUtils = __webpack_require__( /*! ../../core/utils/dom */ 12),
            when = __webpack_require__( /*! ../../core/utils/deferred */ 7).when,
            HIDDEN_BAG_ID = "__hidden-bag",
            TRANSITION_SELECTOR = ".dx-transition",
            CONTENT_SELECTOR = ".dx-content",
            DEFAULT_COMMAND_RENDER_STAGE = "onViewShown",
            CONTENT_RENDERED_EVENT_NAME = "dxcontentrendered.layoutController",
            PENDING_RENDERING_SELECTOR = ".dx-pending-rendering",
            PENDING_RENDERING_MANUAL_SELECTOR = ".dx-pending-rendering-manual",
            TransitionExecutorModule = __webpack_require__( /*! ../../animation/transition_executor/transition_executor */ 129);
        __webpack_require__( /*! ./command_container */ 185);
        __webpack_require__( /*! ./view_engine_components */ 69);
        var transitionSelector = function(transitionName) {
            return ".dx-transition-" + transitionName
        };
        var DefaultLayoutController = Class.inherit({
            ctor: function(options) {
                options = options || {};
                this.name = options.name || "";
                this._layoutModel = options.layoutModel || {};
                this._defaultPaneName = options.defaultPaneName || "content";
                this._transitionDuration = void 0 === options.transitionDuration ? 400 : options.transitionDuration;
                this._showViewFired = false
            },
            init: function(options) {
                options = options || {};
                this._visibleViews = {};
                this._$viewPort = options.$viewPort || $("body");
                this._commandManager = options.commandManager;
                this._viewEngine = options.viewEngine;
                this.transitionExecutor = new TransitionExecutorModule.TransitionExecutor;
                this._prepareTemplates();
                this._$viewPort.append(this.element());
                this._hideElements(this.element());
                if (options.templateContext) {
                    this._templateContext = options.templateContext;
                    this._proxiedTemplateContextChangedHandler = this._templateContextChangedHandler.bind(this)
                }
            },
            ensureActive: function(targetNode) {
                if (this._disabledState) {
                    return this.enable()
                } else {
                    return this.activate(targetNode)
                }
            },
            activate: function() {
                this._showViewFired = false;
                var $rootElement = this.element();
                this._showElements($rootElement);
                this._attachRefreshViewRequiredHandler();
                return $.Deferred().resolve().promise()
            },
            deactivate: function() {
                this._disabledState = false;
                this._showViewFired = false;
                this._releaseVisibleViews();
                this._hideElements(this.element());
                this._detachRefreshViewRequiredHandler();
                return $.Deferred().resolve().promise()
            },
            enable: function() {
                this._disabledState = false;
                if (!this._showViewFired) {
                    this._notifyShowing()
                }
                this._showViewFired = false;
                return $.Deferred().resolve().promise()
            },
            disable: function() {
                this._disabledState = true;
                this._showViewFired = false;
                this._notifyHidden()
            },
            activeViewInfo: function() {
                return this._visibleViews[this._defaultPaneName]
            },
            _fireViewEvents: function(eventName, views) {
                var that = this;
                views = views || this._visibleViews;
                iteratorUtils.each(views, function(index, viewInfo) {
                    that.fireEvent(eventName, [viewInfo])
                })
            },
            _notifyShowing: function(views) {
                this._fireViewEvents("viewShowing", views)
            },
            _notifyShown: function(views) {
                this._fireViewEvents("viewShown", views)
            },
            _notifyHidden: function(views) {
                this._fireViewEvents("viewHidden", views)
            },
            _applyTemplate: function($elements, model) {
                $elements.each(function(i, element) {
                    frameworkUtils.templateProvider.applyTemplate(element, model)
                })
            },
            _releaseVisibleViews: function() {
                var that = this;
                iteratorUtils.each(this._visibleViews, function(index, viewInfo) {
                    that._hideView(viewInfo);
                    that._releaseView(viewInfo)
                });
                this._visibleViews = {}
            },
            _templateContextChangedHandler: function() {
                var that = this,
                    viewsToShow = [];
                iteratorUtils.each(that._visibleViews, function(index, viewInfo) {
                    if (viewInfo.currentViewTemplateId !== that._getViewTemplateId(viewInfo)) {
                        viewsToShow.push(viewInfo)
                    }
                });
                when.apply($, iteratorUtils.map(viewsToShow, function(viewInfo) {
                    return that.showView(viewInfo)
                })).done(function() {
                    that._notifyShown(viewsToShow)
                })
            },
            _attachRefreshViewRequiredHandler: function() {
                if (this._templateContext) {
                    this._templateContext.on("optionChanged", this._proxiedTemplateContextChangedHandler)
                }
            },
            _detachRefreshViewRequiredHandler: function() {
                if (this._templateContextChanged) {
                    this._templateContext.off("optionChanged", this._proxiedTemplateContextChangedHandler)
                }
            },
            _getPreviousViewInfo: function(viewInfo) {
                return this._visibleViews[this._getViewPaneName(viewInfo.viewTemplateInfo)]
            },
            _prepareTemplates: function() {
                var that = this;
                var $layoutTemplate = that._viewEngine.getLayoutTemplate(this._getLayoutTemplateName());
                that._$layoutTemplate = $layoutTemplate;
                that._$mainLayout = that._createEmptyLayout();
                that._showElements(that._$mainLayout);
                that._applyTemplate(that._$mainLayout, that._layoutModel);
                that._$navigationWidget = that._createNavigationWidget()
            },
            renderNavigation: function(navigationCommands) {
                this._clearNavigationWidget();
                this._renderNavigationImpl(navigationCommands)
            },
            _renderNavigationImpl: function(navigationCommands) {
                this._renderCommands(this._$mainLayout, navigationCommands)
            },
            _createNavigationWidget: function() {
                var result, containers = this._findCommandContainers(this._$mainLayout);
                iteratorUtils.each(containers, function(k, container) {
                    if ("global-navigation" === container.option("id")) {
                        result = container.element();
                        return false
                    }
                });
                return result
            },
            _clearNavigationWidget: function() {
                if (this._$navigationWidget) {
                    this._commandManager.clearContainer(this._$navigationWidget.dxCommandContainer("instance"))
                }
            },
            element: function() {
                return this._$mainLayout
            },
            _getViewFrame: function(viewInfo) {
                return this._$mainLayout
            },
            _getLayoutTemplateName: function() {
                return this.name
            },
            _applyModelToTransitionElements: function($markup, model) {
                var that = this;
                this._getTransitionElements($markup).each(function(i, item) {
                    that._applyTemplate($(item).children(), model)
                })
            },
            _createViewLayoutTemplate: function() {
                var that = this;
                var $viewLayoutTemplate = that._$layoutTemplate.clone();
                this._hideElements($viewLayoutTemplate);
                return $viewLayoutTemplate
            },
            _createEmptyLayout: function() {
                var that = this;
                var $result = that._$layoutTemplate.clone();
                this._hideElements($result);
                this._getTransitionElements($result).empty();
                $result.children(CONTENT_SELECTOR).remove();
                return $result
            },
            _getTransitionElements: function($markup) {
                var $items = $markup.find(TRANSITION_SELECTOR).add($markup.filter(TRANSITION_SELECTOR)),
                    result = [];
                for (var i = 0; i < $items.length; i++) {
                    var $item = $items.eq(i);
                    if (0 === $item.parents(TRANSITION_SELECTOR).length) {
                        result.push($item.get(0))
                    }
                }
                return $(result)
            },
            showView: function(viewInfo, direction) {
                direction = direction || "forward";
                var result, that = this,
                    previousViewInfo = that._getPreviousViewInfo(viewInfo),
                    previousViewTemplateId = previousViewInfo === viewInfo ? previousViewInfo.currentViewTemplateId : void 0;
                this._showViewFired = true;
                this._updateCurrentViewTemplateId(viewInfo);
                if (previousViewTemplateId && previousViewTemplateId === viewInfo.currentViewTemplateId && viewInfo === previousViewInfo) {
                    that.fireEvent("viewShowing", [viewInfo, direction]);
                    result = $.Deferred().resolve().promise()
                } else {
                    that._ensureViewRendered(viewInfo);
                    that.fireEvent("viewShowing", [viewInfo, direction]);
                    result = this._showViewImpl(viewInfo, direction, previousViewTemplateId).done(function() {
                        that._onViewShown(viewInfo)
                    })
                }
                return result
            },
            disposeView: function(viewInfo) {
                this._clearRenderResult(viewInfo)
            },
            _clearRenderResult: function(viewInfo) {
                if (viewInfo.renderResult) {
                    viewInfo.renderResult.$markup.remove();
                    viewInfo.renderResult.$viewItems.remove();
                    delete viewInfo.renderResult
                }
            },
            _renderViewImpl: function($viewTemplate, viewInfo) {
                var $viewItems, that = this,
                    allowedChildrenSelector = ".dx-command,.dx-content,script",
                    $layout = this._createViewLayoutTemplate(),
                    isSimplifiedMarkup = true,
                    outOfContentItems = $();
                if (0 === $viewTemplate.children(allowedChildrenSelector).length) {
                    this._viewEngine._wrapViewDefaultContent($viewTemplate)
                }
                $viewItems = $viewTemplate.children();
                this._applyModelToTransitionElements($layout, viewInfo.model);
                this._viewEngine.applyLayout($viewTemplate, $layout);
                $viewItems.each(function(i, item) {
                    var $item = $(item);
                    that._applyTemplate($item, viewInfo.model);
                    if ($item.is(allowedChildrenSelector)) {
                        isSimplifiedMarkup = false
                    } else {
                        outOfContentItems = outOfContentItems.add($item)
                    }
                });
                if (outOfContentItems.length && !isSimplifiedMarkup) {
                    throw errors.Error("E3014", outOfContentItems[0].outerHTML)
                }
                viewInfo.renderResult = viewInfo.renderResult || {};
                viewInfo.renderResult.$viewItems = $viewItems;
                viewInfo.renderResult.$markup = $layout
            },
            _renderCommands: function($markup, commands) {
                var commandContainers = this._findCommandContainers($markup);
                return this._commandManager.renderCommandsToContainers(commands, commandContainers)
            },
            _prepareViewCommands: function(viewInfo) {
                var $viewItems = viewInfo.renderResult.$viewItems,
                    viewCommands = this._commandManager.findCommands($viewItems),
                    commandsToRenderMap = {};
                viewInfo.commands = frameworkUtils.utils.mergeCommands(viewInfo.commands || [], viewCommands);
                viewInfo.commandsToRenderMap = commandsToRenderMap;
                iteratorUtils.each(viewInfo.commands, function(index, command) {
                    var renderStage = command.option("renderStage") || DEFAULT_COMMAND_RENDER_STAGE,
                        targetArray = commandsToRenderMap[renderStage] = commandsToRenderMap[renderStage] || [];
                    targetArray.push(command)
                })
            },
            _applyViewCommands: function(viewInfo, renderStage) {
                renderStage = renderStage || DEFAULT_COMMAND_RENDER_STAGE;
                var result, commandsToRender = viewInfo.commandsToRenderMap[renderStage],
                    $markup = viewInfo.renderResult.$markup;
                if (commandsToRender) {
                    result = this._renderCommands($markup, commandsToRender);
                    delete viewInfo.commandsToRenderMap[renderStage]
                } else {
                    result = $.Deferred().resolve().promise()
                }
                return result
            },
            _findCommandContainers: function($markup) {
                return domUtils.createComponents($markup, ["dxCommandContainer"])
            },
            _getViewTemplateId: function(viewInfo) {
                var viewTemplateInstance = viewInfo.$viewTemplate ? viewInfo.$viewTemplate.dxView("instance") : this._viewEngine.getViewTemplateInfo(viewInfo.viewName);
                return viewTemplateInstance.getId()
            },
            _updateCurrentViewTemplateId: function(viewInfo) {
                viewInfo.currentViewTemplateId = this._getViewTemplateId(viewInfo)
            },
            _ensureViewRendered: function(viewInfo) {
                var $cachedMarkup = viewInfo.renderResult && viewInfo.renderResult.markupCache[viewInfo.currentViewTemplateId];
                if ($cachedMarkup) {
                    viewInfo.renderResult.$markup = $cachedMarkup
                } else {
                    this._renderView(viewInfo);
                    viewInfo.renderResult.markupCache = viewInfo.renderResult.markupCache || {};
                    viewInfo.renderResult.markupCache[viewInfo.currentViewTemplateId] = viewInfo.renderResult.$markup
                }
            },
            _renderView: function(viewInfo) {
                var $viewTemplate = viewInfo.$viewTemplate || this._viewEngine.getViewTemplate(viewInfo.viewName);
                this._renderViewImpl($viewTemplate, viewInfo);
                this._prepareViewCommands(viewInfo);
                this._applyViewCommands(viewInfo, "onViewRendering");
                this._appendViewToLayout(viewInfo);
                $viewTemplate.remove();
                this._onRenderComplete(viewInfo);
                this.fireEvent("viewRendered", [viewInfo])
            },
            _prepareTransition: function($element, targetPlaceholderName) {
                if (0 === $element.children(".dx-content").length) {
                    $element.wrapInner("<div>");
                    $element.children().dxContent({
                        targetPlaceholder: targetPlaceholderName
                    })
                }
            },
            _appendViewToLayout: function(viewInfo) {
                var that = this,
                    $viewFrame = that._getViewFrame(viewInfo),
                    $markup = viewInfo.renderResult.$markup,
                    $transitionContentElements = $(),
                    animationItems = [];
                iteratorUtils.each($markup.find(".dx-content-placeholder"), function(index, el) {
                    that._prepareTransition($(el), $(el).attr("data-dx-content-placeholder-name"))
                });
                iteratorUtils.each(that._getTransitionElements($viewFrame), function(index, transitionElement) {
                    var $transition = $(transitionElement),
                        $viewElement = $markup.find(transitionSelector($transition.attr("data-dx-transition-name"))).children(),
                        animationItem = {
                            $element: $viewElement,
                            animation: $transition.attr("data-dx-transition-type")
                        };
                    animationItems.push(animationItem);
                    $transition.append($viewElement);
                    that._showViewElements($viewElement);
                    domUtils.triggerShownEvent($viewElement);
                    $transitionContentElements = $transitionContentElements.add($viewElement)
                });
                that._$mainLayout.append(viewInfo.renderResult.$viewItems.filter(".dx-command"));
                $markup.remove();
                viewInfo.renderResult.$markup = $transitionContentElements;
                viewInfo.renderResult.animationItems = animationItems
            },
            _onRenderComplete: function(viewInfo) {},
            _onViewShown: function(viewInfo) {
                eventsEngine.trigger(domAdapter.getDocument(), "dx.viewchanged")
            },
            _enter: function(animationItems, animationModifier) {
                var transitionExecutor = this.transitionExecutor;
                iteratorUtils.each(animationItems, function(index, item) {
                    transitionExecutor.enter(item.$element, item.animation, animationModifier)
                })
            },
            _leave: function(animationItems, animationModifier) {
                var transitionExecutor = this.transitionExecutor;
                iteratorUtils.each(animationItems, function(index, item) {
                    transitionExecutor.leave(item.$element, item.animation, animationModifier)
                })
            },
            _doTransition: function(oldViewInfo, newViewInfo, animationModifier) {
                if (oldViewInfo) {
                    this._leave(oldViewInfo.renderResult.animationItems, animationModifier)
                }
                this._enter(newViewInfo.renderResult.animationItems, animationModifier);
                this._showView(newViewInfo);
                return this.transitionExecutor.start()
            },
            _showViewImpl: function(viewInfo, direction, previousViewTemplateId) {
                var that = this,
                    previousViewInfo = this._getPreviousViewInfo(viewInfo),
                    animationModifier = {
                        direction: direction
                    };
                if (previousViewInfo === viewInfo) {
                    previousViewInfo = void 0
                }
                if (!previousViewInfo) {
                    animationModifier.duration = 0;
                    animationModifier.delay = 0
                }
                var d = $.Deferred();
                that._doTransition(previousViewInfo, viewInfo, animationModifier).done(function() {
                    that._changeView(viewInfo, previousViewTemplateId).done(function(result) {
                        d.resolve(result)
                    })
                });
                return d.promise()
            },
            _releaseView: function(viewInfo) {
                this.fireEvent("viewReleased", [viewInfo])
            },
            _getReadyForRenderDeferredItems: function(viewInfo) {
                return $.Deferred().resolve().promise()
            },
            _changeView: function(viewInfo, previousViewTemplateId) {
                var that = this;
                if (previousViewTemplateId) {
                    that._hideView(viewInfo, previousViewTemplateId)
                } else {
                    var previousViewInfo = that._getPreviousViewInfo(viewInfo);
                    if (previousViewInfo && previousViewInfo !== viewInfo) {
                        that._hideView(previousViewInfo);
                        that._releaseView(previousViewInfo)
                    }
                    this._visibleViews[this._getViewPaneName(viewInfo.viewTemplateInfo)] = viewInfo
                }
                this._subscribeToDeferredItems(viewInfo);
                var d = $.Deferred();
                this._getReadyForRenderDeferredItems(viewInfo).done(function() {
                    that._applyViewCommands(viewInfo).done(function() {
                        that._renderDeferredItems(viewInfo.renderResult.$markup).done(function() {
                            d.resolve()
                        })
                    })
                });
                return d.promise()
            },
            _subscribeToDeferredItems: function(viewInfo) {
                var that = this,
                    $markup = viewInfo.renderResult.$markup;
                $markup.find(PENDING_RENDERING_SELECTOR).add($markup.filter(PENDING_RENDERING_SELECTOR)).each(function() {
                    var eventData = {
                        viewInfo: viewInfo,
                        context: that
                    };
                    $(this).on(CONTENT_RENDERED_EVENT_NAME, eventData, that._onDeferredContentRendered)
                })
            },
            _onDeferredContentRendered: function(event) {
                var $element = $(event.target),
                    viewInfo = event.data.viewInfo,
                    that = event.data.context;
                $element.off(CONTENT_RENDERED_EVENT_NAME, that._onDeferredContentRendered);
                that._renderCommands($element, viewInfo.commands)
            },
            _renderDeferredItems: function($items) {
                var that = this,
                    result = $.Deferred();
                var $pendingItem = $items.find(PENDING_RENDERING_MANUAL_SELECTOR).add($items.filter(PENDING_RENDERING_MANUAL_SELECTOR)).first();
                if ($pendingItem.length) {
                    var render = $pendingItem.data("dx-render-delegate");
                    commonUtils.executeAsync(function() {
                        render().done(function() {
                            that._renderDeferredItems($items).done(function() {
                                result.resolve()
                            })
                        })
                    })
                } else {
                    result.resolve()
                }
                return result.promise()
            },
            _getViewPaneName: function(viewTemplateInfo) {
                return this._defaultPaneName
            },
            _hideElements: function($elements) {
                $elements.addClass("dx-fast-hidden")
            },
            _showElements: function($elements) {
                $elements.removeClass("dx-fast-hidden")
            },
            _hideViewElements: function($elements) {
                this._patchIds($elements);
                this._disableInputs($elements);
                $elements.removeClass("dx-active-view").addClass("dx-inactive-view")
            },
            _hideView: function(viewInfo, templateId) {
                if (viewInfo.renderResult) {
                    var $markupToHide = void 0 === templateId ? viewInfo.renderResult.$markup : viewInfo.renderResult.markupCache[templateId];
                    this._hideViewElements($markupToHide);
                    this.fireEvent("viewHidden", [viewInfo])
                }
            },
            _showViewElements: function($elements) {
                this._unPatchIds($elements);
                this._enableInputs($elements);
                $elements.removeClass("dx-inactive-view").addClass("dx-active-view");
                this._skipAnimation($elements)
            },
            _showView: function(viewInfo) {
                if (viewInfo.renderResult) {
                    this._showViewElements(viewInfo.renderResult.$markup)
                }
            },
            _skipAnimation: function($elements) {
                $elements.addClass("dx-skip-animation");
                for (var i = 0; i < $elements.length; i++) {
                    $elements.eq(i).css("transform")
                }
                $elements.removeClass("dx-skip-animation")
            },
            _patchIds: function($markup) {
                this._processIds($markup, function(id) {
                    var result = id;
                    if (id.indexOf(HIDDEN_BAG_ID) === -1) {
                        result = HIDDEN_BAG_ID + "-" + id
                    }
                    return result
                })
            },
            _unPatchIds: function($markup) {
                this._processIds($markup, function(id) {
                    var result = id;
                    if (0 === id.indexOf(HIDDEN_BAG_ID)) {
                        result = id.substr(HIDDEN_BAG_ID.length + 1)
                    }
                    return result
                })
            },
            _processIds: function($markup, process) {
                var elementsWithIds = $markup.find("[id]");
                iteratorUtils.each(elementsWithIds, function(index, element) {
                    var $el = $(element),
                        id = $el.attr("id");
                    $el.attr("id", process(id))
                })
            },
            _enableInputs: function($markup) {
                var $inputs = this._getInputs($markup).filter("[data-disabled='true']");
                iteratorUtils.each($inputs, function(index, input) {
                    $(input).removeAttr("disabled").removeAttr("data-disabled")
                })
            },
            _disableInputs: function($markup) {
                var $inputs = this._getInputs($markup);
                $inputs = $inputs.filter(":not([disabled])").add($inputs.filter("[disabled=true]"));
                iteratorUtils.each($inputs, function(index, input) {
                    $(input).attr({
                        disabled: true,
                        "data-disabled": true
                    })
                })
            },
            _getInputs: function($markup) {
                return $markup.find("input, button, select, textarea")
            }
        }).include(EventsMixin);
        layoutSets.default = layoutSets.default || [];
        layoutSets.default.push({
            controller: new DefaultLayoutController
        });
        exports.DefaultLayoutController = DefaultLayoutController;
        exports.layoutSets = layoutSets
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/integration/angular/module.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var angular = __webpack_require__( /*! angular */ 258);
        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__) {
        var _typeof = "function" === typeof Symbol && "symbol" === typeof Symbol.iterator ? function(obj) {
            return typeof obj
        } : function(obj) {
            return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
        };
        var inArray = __webpack_require__( /*! ../../core/utils/array */ 11).inArray,
            EditStrategy = __webpack_require__( /*! ./ui.collection_widget.edit.strategy */ 365);
        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,
                    keys = cache && cache.keys || this.getKeysByItems(this._getPlainItems());
                if (cache && !cache.keys) {
                    cache.keys = keys
                }
                if ("object" === ("undefined" === typeof key ? "undefined" : _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(),
                    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__) {
        var _typeof = "function" === typeof Symbol && "symbol" === typeof Symbol.iterator ? function(obj) {
            return typeof obj
        } : function(obj) {
            return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
        };
        __webpack_require__( /*! ./core */ 124);
        var Globalize = __webpack_require__( /*! globalize */ 70),
            numberLocalization = __webpack_require__( /*! ../number */ 49),
            errors = __webpack_require__( /*! ../../core/errors */ 19);
        __webpack_require__( /*! globalize/number */ 70);
        if (Globalize && Globalize.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: "×",
                                perMille: "‰",
                                infinity: "∞",
                                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: " "
                                    },
                                    afterCurrency: {
                                        currencyMatch: "[:^S:]",
                                        surroundingMatch: "[:digit:]",
                                        insertBetween: " "
                                    }
                                },
                                standard: "¤#,##0.00",
                                accounting: "¤#,##0.00;(¤#,##0.00)",
                                "short": {
                                    standard: {
                                        "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"
                                    }
                                },
                                "unitPattern-count-one": "{0} {1}",
                                "unitPattern-count-other": "{0} {1}"
                            },
                            "miscPatterns-numberSystem-latn": {
                                atLeast: "{0}+",
                                range: "{0}–{1}"
                            }
                        }
                    }
                }
            };
            if ("en" === Globalize.locale().locale) {
                Globalize.load(enNumbers);
                Globalize.locale("en")
            }
            var formattersCache = {};
            var getFormatter = function(format) {
                var formatter, formatCacheKey;
                if ("object" === ("undefined" === typeof format ? "undefined" : _typeof(format))) {
                    formatCacheKey = Globalize.locale().locale + ":" + JSON.stringify(format)
                } else {
                    formatCacheKey = Globalize.locale().locale + ":" + format
                }
                formatter = formattersCache[formatCacheKey];
                if (!formatter) {
                    formatter = formattersCache[formatCacheKey] = Globalize.numberFormatter(format)
                }
                return formatter
            };
            var globalizeNumberLocalization = {
                _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) {
                        errors.log("W0011")
                    }
                    var result = Globalize.parseNumber(text);
                    if (isNaN(result)) {
                        result = this.callBase.apply(this, arguments)
                    }
                    return result
                }
            };
            numberLocalization.inject(globalizeNumberLocalization)
        }
    },
    /*!************************************************!*\
      !*** ./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 */ 486)
    },
    /*!********************************************************************************!*\
      !*** ./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 */ 47);
        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 */ 136);
        var _array_utils2 = _interopRequireDefault(_array_utils);
        var _utils = __webpack_require__( /*! ../../data/utils */ 39);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7);
        var _array_compare = __webpack_require__( /*! ../../core/utils/array_compare */ 318);
        var _dom_adapter = __webpack_require__( /*! ../../core/dom_adapter */ 13);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        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) {
                    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),
                        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) {
                return JSON.stringify(item1) === JSON.stringify(item2)
            },
            _partialRefresh: function() {
                if (this.option("repaintChangesOnly")) {
                    var result = (0, _array_compare.findChanges)(this._itemsCache, this._editStrategy.itemsGetter(), this.keyOf.bind(this), this._isItemEquals);
                    if (result) {
                        this._modifyByChanges(result, true);
                        return true
                    } else {
                        this._refreshItemsCache()
                    }
                }
                return false
            },
            _refreshItemsCache: function() {
                if (this.option("repaintChangesOnly")) {
                    this._itemsCache = (0, _extend.extend)(true, [], this._editStrategy.itemsGetter())
                }
            },
            _dispose: function() {
                this._dataSource && this._dataSource.off("customizeStoreLoadOptions", this._customizeStoreLoadOptions);
                this.callBase()
            },
            _updateByChange: function(keyInfo, items, change, isPartialRefresh) {
                var _this3 = 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() {
                            _this3._renderItem(items.indexOf(changedItem), changedItem, null, _this3._findItemElementByKey(change.key))
                        })
                    }
                }
            },
            _insertByChange: function(keyInfo, items, change, isPartialRefresh) {
                var _this4 = this;
                (0, _deferred.when)(isPartialRefresh || _array_utils2.default.insert(keyInfo, items, change.data, change.index)).done(function() {
                    _this4._renderItem((0, _type.isDefined)(change.index) ? change.index : items.length, change.data);
                    _this4._correctionIndex++
                })
            },
            _removeByChange: function(keyInfo, items, change, isPartialRefresh) {
                var _this5 = this;
                var index = isPartialRefresh ? change.index : _array_utils2.default.indexByKey(keyInfo, items, change.key),
                    removedItem = isPartialRefresh ? change.oldItem : items[index];
                if (removedItem) {
                    var $removedItemElement = this._findItemElementByKey(change.key),
                        deletedActionArgs = this._extendActionArgs($removedItemElement);
                    this._waitDeletingPrepare($removedItemElement).done(function() {
                        if (isPartialRefresh) {
                            _this5._updateIndicesAfterIndex(index - 1);
                            _this5._afterItemElementDeleted($removedItemElement, deletedActionArgs);
                            _this5._normalizeSelectedItems()
                        } else {
                            _this5._deleteItemElementByIndex(index);
                            _this5._afterItemElementDeleted($removedItemElement, deletedActionArgs)
                        }
                    });
                    this._correctionIndex--
                }
            },
            _modifyByChanges: function(changes, isPartialRefresh) {
                var _this6 = this;
                var items = this._editStrategy.itemsGetter(),
                    keyInfo = {
                        key: this.key.bind(this),
                        keyOf: this.keyOf.bind(this)
                    };
                changes.forEach(function(change) {
                    return _this6["_" + change.type + "ByChange"](keyInfo, items, change, isPartialRefresh)
                });
                this._renderedItemsCount = items.length;
                this._refreshItemsCache()
            },
            _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/validator.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var dataUtils = __webpack_require__( /*! ../core/element_data */ 37),
            Callbacks = __webpack_require__( /*! ../core/utils/callbacks */ 21),
            errors = __webpack_require__( /*! ./widget/ui.errors */ 18),
            DOMComponent = __webpack_require__( /*! ../core/dom_component */ 59),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            map = __webpack_require__( /*! ../core/utils/iterator */ 3).map,
            ValidationMixin = __webpack_require__( /*! ./validation/validation_mixin */ 169),
            ValidationEngine = __webpack_require__( /*! ./validation_engine */ 94),
            DefaultAdapter = __webpack_require__( /*! ./validation/default_adapter */ 528),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8);
        var VALIDATOR_CLASS = "dx-validator";
        var Validator = DOMComponent.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    validationRules: []
                })
            },
            _init: function() {
                this.callBase();
                this._initGroupRegistration();
                this.focused = Callbacks();
                this._initAdapter()
            },
            _initGroupRegistration: function() {
                var group = this._findGroup();
                if (!this._groupWasInit) {
                    this.on("disposing", function(args) {
                        ValidationEngine.removeRegisteredValidator(args.component._validationGroup, args.component)
                    })
                }
                if (!this._groupWasInit || this._validationGroup !== group) {
                    ValidationEngine.removeRegisteredValidator(this._validationGroup, this);
                    this._groupWasInit = true;
                    this._validationGroup = group;
                    ValidationEngine.registerValidatorInGroup(group, this)
                }
            },
            _setOptionsByReference: function() {
                this.callBase();
                extend(this._optionsByReference, {
                    validationGroup: true
                })
            },
            _initAdapter: function() {
                var that = this,
                    element = that.$element()[0],
                    dxStandardEditor = dataUtils.data(element, "dx-validation-target"),
                    adapter = that.option("adapter");
                if (!adapter) {
                    if (dxStandardEditor) {
                        adapter = new DefaultAdapter(dxStandardEditor, this);
                        adapter.validationRequestsCallbacks.add(function() {
                            that.validate()
                        });
                        this.option("adapter", adapter);
                        return
                    }
                    throw errors.Error("E0120")
                }
                var callbacks = adapter.validationRequestsCallbacks;
                if (callbacks) {
                    if (Array.isArray(callbacks)) {
                        callbacks.push(function() {
                            that.validate()
                        })
                    } else {
                        errors.log("W0014", "validationRequestsCallbacks", "jQuery.Callbacks", "17.2", "Use the array instead");
                        callbacks.add(function() {
                            that.validate()
                        })
                    }
                }
            },
            _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;
                    default:
                        this.callBase(args)
                }
            },
            _getValidationRules: function() {
                if (!this._validationRules) {
                    this._validationRules = map(this.option("validationRules"), function(rule) {
                        return extend({}, rule, {
                            validator: this
                        })
                    }.bind(this))
                }
                return this._validationRules
            },
            _resetValidationRules: function() {
                delete this._validationRules
            },
            validate: function() {
                var result, that = this,
                    adapter = that.option("adapter"),
                    name = that.option("name"),
                    bypass = adapter.bypass && adapter.bypass(),
                    value = adapter.getValue(),
                    currentError = adapter.getCurrentValidationError && adapter.getCurrentValidationError(),
                    rules = this._getValidationRules();
                if (bypass) {
                    result = {
                        isValid: true
                    }
                } else {
                    if (currentError && currentError.editorSpecific) {
                        currentError.validator = this;
                        result = {
                            isValid: false,
                            brokenRule: currentError
                        }
                    } else {
                        result = ValidationEngine.validate(value, rules, name)
                    }
                }
                this._applyValidationResult(result, adapter);
                return result
            },
            reset: function() {
                var that = this,
                    adapter = that.option("adapter"),
                    result = {
                        isValid: true,
                        brokenRule: null
                    };
                adapter.reset();
                this._resetValidationRules();
                this._applyValidationResult(result, adapter)
            },
            _applyValidationResult: function(result, adapter) {
                var validatedAction = this._createActionByOption("onValidated");
                result.validator = this;
                adapter.applyValidationResults && adapter.applyValidationResults(result);
                this.option({
                    isValid: result.isValid
                });
                validatedAction(result)
            },
            focus: function() {
                var adapter = this.option("adapter");
                adapter && adapter.focus && adapter.focus()
            }
        }).include(ValidationMixin);
        registerComponent("dxValidator", Validator);
        module.exports = Validator
    },
    /*!*****************************************!*\
      !*** ./artifacts/transpiled/ui/tabs.js ***!
      \*****************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            devices = __webpack_require__( /*! ../core/devices */ 16),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            Button = __webpack_require__( /*! ./button */ 36),
            inkRipple = __webpack_require__( /*! ./widget/utils.ink_ripple */ 72),
            eventUtils = __webpack_require__( /*! ../events/utils */ 9),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            isPlainObject = __webpack_require__( /*! ../core/utils/type */ 1).isPlainObject,
            pointerEvents = __webpack_require__( /*! ../events/pointer */ 27),
            TabsItem = __webpack_require__( /*! ./tabs/item */ 310),
            themes = __webpack_require__( /*! ./themes */ 20),
            holdEvent = __webpack_require__( /*! ../events/hold */ 95),
            Scrollable = __webpack_require__( /*! ./scroll_view/ui.scrollable */ 96),
            CollectionWidget = __webpack_require__( /*! ./collection/ui.collection_widget.live_update */ 194).default,
            iconUtils = __webpack_require__( /*! ../core/utils/icon */ 87),
            BindableTemplate = __webpack_require__( /*! ./widget/bindable_template */ 60);
        var TABS_CLASS = "dx-tabs",
            TABS_WRAPPER_CLASS = "dx-tabs-wrapper",
            TABS_EXPANDED_CLASS = "dx-tabs-expanded",
            TABS_SCROLLABLE_CLASS = "dx-tabs-scrollable",
            TABS_NAV_BUTTONS_CLASS = "dx-tabs-nav-buttons",
            OVERFLOW_HIDDEN_CLASS = "dx-overflow-hidden",
            TABS_ITEM_CLASS = "dx-tab",
            TABS_ITEM_SELECTED_CLASS = "dx-tab-selected",
            TABS_NAV_BUTTON_CLASS = "dx-tabs-nav-button",
            TABS_LEFT_NAV_BUTTON_CLASS = "dx-tabs-nav-button-left",
            TABS_RIGHT_NAV_BUTTON_CLASS = "dx-tabs-nav-button-right",
            TABS_ITEM_TEXT_CLASS = "dx-tab-text",
            TABS_ITEM_DATA_KEY = "dxTabData",
            BUTTON_NEXT_ICON = "chevronnext",
            BUTTON_PREV_ICON = "chevronprev",
            FEEDBACK_HIDE_TIMEOUT = 100,
            FEEDBACK_DURATION_INTERVAL = 5,
            FEEDBACK_SCROLL_TIMEOUT = 300,
            TAB_OFFSET = 30;
        var Tabs = CollectionWidget.inherit({
            _activeStateUnit: "." + TABS_ITEM_CLASS,
            _getDefaultOptions: function() {
                return 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 = themes.current();
                return this.callBase().concat([{
                    device: function() {
                        return "generic" !== devices.real().platform
                    },
                    options: {
                        showNavButtons: false
                    }
                }, {
                    device: {
                        platform: "generic"
                    },
                    options: {
                        scrollByContent: false
                    }
                }, {
                    device: function() {
                        return "desktop" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }, {
                    device: function() {
                        return themes.isAndroid5(themeName)
                    },
                    options: {
                        useInkRipple: true
                    }
                }, {
                    device: function() {
                        return themes.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._defaultTemplates.item = new BindableTemplate(function($container, data) {
                    if (isPlainObject(data)) {
                        this._prepareDefaultItemTemplate(data, $container)
                    } else {
                        $container.text(String(data))
                    }
                    var $iconElement = iconUtils.getImageContainer(data.icon);
                    $container.wrapInner($("<span>").addClass(TABS_ITEM_TEXT_CLASS));
                    $iconElement && $iconElement.prependTo($container)
                }.bind(this), ["text", "html", "icon"], this.option("integrationOptions.watchMethod"))
            },
            _itemClass: function() {
                return TABS_ITEM_CLASS
            },
            _selectedItemClass: function() {
                return TABS_ITEM_SELECTED_CLASS
            },
            _itemDataKey: function() {
                return TABS_ITEM_DATA_KEY
            },
            _initMarkup: function() {
                this.callBase();
                this.setAria("role", "tab", this.itemElements());
                this.option("useInkRipple") && this._renderInkRipple();
                this.$element().addClass(OVERFLOW_HIDDEN_CLASS)
            },
            _render: function() {
                this.callBase();
                this._renderScrolling()
            },
            _renderScrolling: function() {
                this.$element().removeClass(TABS_EXPANDED_CLASS);
                this.$element().removeClass(OVERFLOW_HIDDEN_CLASS);
                if (this._allowScrolling()) {
                    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._allowScrolling()) {
                    this._cleanScrolling();
                    this.$element().removeClass(TABS_NAV_BUTTONS_CLASS).addClass(TABS_EXPANDED_CLASS)
                }
            },
            _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 = inkRipple.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 = $("<div>").addClass(TABS_WRAPPER_CLASS);
                this.$element().append(this._$wrapper)
            },
            _itemContainer: function() {
                return this._$wrapper
            },
            _renderScrollable: function() {
                var $itemContainer = this.$element().wrapInner($("<div>").addClass(TABS_SCROLLABLE_CLASS)).children();
                this._scrollable = this._createComponent($itemContainer, Scrollable, {
                    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)
            },
            _allowScrolling: function() {
                if (!this.option("scrollingEnabled")) {
                    return false
                }
                var tabItemsWidth = this._getSummaryItemsWidth(this._getAvailableItems(), true);
                return tabItemsWidth - 1 > this.$element().width()
            },
            _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)
                    }),
                    holdEventName = eventUtils.addNamespace(holdEvent.name, "dxNavButton"),
                    pointerUpEventName = eventUtils.addNamespace(pointerEvents.up, "dxNavButton"),
                    pointerOutEventName = eventUtils.addNamespace(pointerEvents.out, "dxNavButton");
                var navButton = this._createComponent($("<div>").addClass(TABS_NAV_BUTTON_CLASS), Button, {
                    focusStateEnabled: false,
                    icon: icon,
                    onClick: function() {
                        that._updateScrollPosition(offset, 1)
                    },
                    integrationOptions: {}
                });
                var $navButton = navButton.$element();
                eventsEngine.on($navButton, holdEventName, {
                    timeout: FEEDBACK_SCROLL_TIMEOUT
                }, function(e) {
                    holdAction({
                        event: e
                    })
                }.bind(this));
                eventsEngine.on($navButton, pointerUpEventName, function() {
                    that._clearInterval()
                });
                eventsEngine.on($navButton, pointerOutEventName, function() {
                    that._clearInterval()
                });
                return navButton
            },
            _clearInterval: function() {
                if (this._holdInterval) {
                    clearInterval(this._holdInterval)
                }
            },
            _renderSelection: 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() {
                if (this.option("scrollingEnabled")) {
                    this._renderScrolling()
                }
            },
            _itemSelectHandler: function(e) {
                if ("single" === this.option("selectionMode") && this.isItemSelected(e.currentTarget)) {
                    return
                }
                this.callBase(e)
            },
            _clean: function() {
                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 "selectionMode":
                        this._renderMultiple();
                        this.callBase(args);
                        break;
                    case "badgeExpr":
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        Tabs.ItemClass = TabsItem;
        registerComponent("dxTabs", Tabs);
        module.exports = Tabs;
        module.exports.getTabsExpandedClass = TABS_EXPANDED_CLASS
    }, , , , ,
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/localization/ldml/date.format.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var ARABIC_COMMA = "،",
            FORMAT_SEPARATORS = " .,:;/\\<>()-[]" + ARABIC_COMMA,
            ARABIC_ZERO_CODE = 1632;
        var checkDigit = function(char) {
            var code = char && char.charCodeAt(0);
            return char >= "0" && char <= "9" || code >= ARABIC_ZERO_CODE && code < ARABIC_ZERO_CODE + 10
        };
        var checkPatternContinue = function(text, index, isDigit) {
            var char = text[index],
                prevChar = text[index - 1],
                nextChar = text[index + 1];
            if (!isDigit) {
                if ("." === char || " " === char && "." === prevChar) {
                    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,
                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] || "٠" === 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("٠" + char, char + char)
            }
            return pattern
        };
        var replaceChars = function(pattern, indexes, char, patternPositions) {
            var i, index, 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,
                    isCurrentCharEscaped = escapeIndexes.indexOf(index) >= 0,
                    isPrevCharEscaped = index > 0 && escapeIndexes.indexOf(index - 1) >= 0,
                    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 = [],
                defaultPattern = formatValue(new Date(2009, 8, 8, 6, 5, 4), formatter),
                patternPositions = defaultPattern.split("").map(function(_, index) {
                    return index
                }),
                result = defaultPattern,
                replacedPatterns = {},
                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),
                    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/ui/load_panel.js ***!
      \***********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            noop = __webpack_require__( /*! ../core/utils/common */ 4).noop,
            messageLocalization = __webpack_require__( /*! ../localization/message */ 14),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            LoadIndicator = __webpack_require__( /*! ./load_indicator */ 89),
            Overlay = __webpack_require__( /*! ./overlay */ 64),
            Deferred = __webpack_require__( /*! ../core/utils/deferred */ 7).Deferred,
            themes = __webpack_require__( /*! ./themes */ 20);
        var LOADPANEL_CLASS = "dx-loadpanel",
            LOADPANEL_WRAPPER_CLASS = "dx-loadpanel-wrapper",
            LOADPANEL_INDICATOR_CLASS = "dx-loadpanel-indicator",
            LOADPANEL_MESSAGE_CLASS = "dx-loadpanel-message",
            LOADPANEL_CONTENT_CLASS = "dx-loadpanel-content",
            LOADPANEL_CONTENT_WRAPPER_CLASS = "dx-loadpanel-content-wrapper",
            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,
                    closeOnBackButton: false,
                    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/date_box.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./date_box/ui.date_box */ 507)
    },
    /*!********************************************!*\
      !*** ./artifacts/transpiled/ui/tooltip.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./tooltip/tooltip */ 317);
        module.exports.show = __webpack_require__( /*! ./tooltip/ui.tooltip */ 205).show;
        module.exports.hide = __webpack_require__( /*! ./tooltip/ui.tooltip */ 205).hide
    },
    /*!*******************************************************!*\
      !*** ./artifacts/transpiled/ui/tooltip/ui.tooltip.js ***!
      \*******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            Tooltip = __webpack_require__( /*! ./tooltip */ 317),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7).Deferred,
            viewPortUtils = __webpack_require__( /*! ../../core/utils/view_port */ 66);
        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/core/utils/svg.js ***!
      \************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13),
            window = __webpack_require__( /*! ./window */ 6).getWindow();

        function getMarkup(element) {
            var temp = domAdapter.createElement("div");
            temp.appendChild(element.cloneNode(true));
            return temp.innerHTML
        }

        function fixIENamespaces(markup) {
            var first = true;
            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) {
            return fixIENamespaces(decodeHtmlEntities(getMarkup(element)))
        };
        exports.getSvgElement = function(markup) {
            return domAdapter.isNode(markup) ? markup : (new window.DOMParser).parseFromString(markup, "image/svg+xml").childNodes[0]
        }
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/events/contextmenu.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            support = __webpack_require__( /*! ../core/utils/support */ 44),
            devices = __webpack_require__( /*! ../core/devices */ 16),
            Class = __webpack_require__( /*! ../core/class */ 10),
            registerEvent = __webpack_require__( /*! ./core/event_registrator */ 67),
            eventUtils = __webpack_require__( /*! ./utils */ 9),
            holdEvent = __webpack_require__( /*! ./hold */ 95);
        var CONTEXTMENU_NAMESPACE = "dxContexMenu",
            CONTEXTMENU_NAMESPACED_EVENT_NAME = eventUtils.addNamespace("contextmenu", CONTEXTMENU_NAMESPACE),
            HOLD_NAMESPACED_EVENT_NAME = eventUtils.addNamespace(holdEvent.name, CONTEXTMENU_NAMESPACE),
            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/resizable.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            stringUtils = __webpack_require__( /*! ../core/utils/string */ 40),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            inArray = __webpack_require__( /*! ../core/utils/array */ 11).inArray,
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            typeUtils = __webpack_require__( /*! ../core/utils/type */ 1),
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6),
            translator = __webpack_require__( /*! ../animation/translator */ 24),
            fitIntoRange = __webpack_require__( /*! ../core/utils/math */ 30).fitIntoRange,
            DOMComponent = __webpack_require__( /*! ../core/dom_component */ 59),
            eventUtils = __webpack_require__( /*! ../events/utils */ 9),
            dragEvents = __webpack_require__( /*! ../events/drag */ 65),
            isPlainObject = typeUtils.isPlainObject,
            isFunction = typeUtils.isFunction,
            domUtils = __webpack_require__( /*! ../core/utils/dom */ 12);
        var RESIZABLE = "dxResizable",
            RESIZABLE_CLASS = "dx-resizable",
            RESIZABLE_RESIZING_CLASS = "dx-resizable-resizing",
            RESIZABLE_HANDLE_CLASS = "dx-resizable-handle",
            RESIZABLE_HANDLE_TOP_CLASS = "dx-resizable-handle-top",
            RESIZABLE_HANDLE_BOTTOM_CLASS = "dx-resizable-handle-bottom",
            RESIZABLE_HANDLE_LEFT_CLASS = "dx-resizable-handle-left",
            RESIZABLE_HANDLE_RIGHT_CLASS = "dx-resizable-handle-right",
            RESIZABLE_HANDLE_CORNER_CLASS = "dx-resizable-handle-corner",
            DRAGSTART_START_EVENT_NAME = eventUtils.addNamespace(dragEvents.start, RESIZABLE),
            DRAGSTART_EVENT_NAME = eventUtils.addNamespace(dragEvents.move, RESIZABLE),
            DRAGSTART_END_EVENT_NAME = eventUtils.addNamespace(dragEvents.end, RESIZABLE);
        var SIDE_BORDER_WIDTH_STYLES = {
            left: "borderLeftWidth",
            top: "borderTopWidth",
            right: "borderRightWidth",
            bottom: "borderBottomWidth"
        };
        var Resizable = DOMComponent.inherit({
            _getDefaultOptions: function() {
                return 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
                })
            },
            _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() {
                var handles = this.option("handles");
                if ("none" === handles) {
                    return
                }
                var directions = "all" === handles ? ["top", "bottom", "left", "right"] : handles.split(" ");
                each(directions, function(index, handleName) {
                    this._renderHandle(handleName)
                }.bind(this));
                inArray("bottom", directions) + 1 && inArray("right", directions) + 1 && this._renderHandle("corner-bottom-right");
                inArray("bottom", directions) + 1 && inArray("left", directions) + 1 && this._renderHandle("corner-bottom-left");
                inArray("top", directions) + 1 && inArray("right", directions) + 1 && this._renderHandle("corner-top-right");
                inArray("top", directions) + 1 && inArray("left", directions) + 1 && this._renderHandle("corner-top-left")
            },
            _renderHandle: function(handleName) {
                var $element = this.$element(),
                    $handle = $("<div>");
                $handle.addClass(RESIZABLE_HANDLE_CLASS).addClass(RESIZABLE_HANDLE_CLASS + "-" + handleName).appendTo($element);
                this._attachEventHandlers($handle)
            },
            _attachEventHandlers: function($handle) {
                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);
                eventsEngine.on($handle, handlers, {
                    direction: "both",
                    immediate: true
                })
            },
            _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 = translator.locate($element);
                var elementRect = $element.get(0).getBoundingClientRect();
                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 = $(e.target).closest("." + RESIZABLE_HANDLE_CLASS),
                    handleWidth = $handle.outerWidth(),
                    handleHeight = $handle.outerHeight(),
                    handleOffset = $handle.offset(),
                    areaOffset = area.offset;
                e.maxLeftOffset = handleOffset.left - areaOffset.left;
                e.maxRightOffset = areaOffset.left + area.width - handleOffset.left - handleWidth;
                e.maxTopOffset = handleOffset.top - areaOffset.top;
                e.maxBottomOffset = areaOffset.top + area.height - handleOffset.top - handleHeight
            },
            _getBorderWidth: function($element, direction) {
                if (typeUtils.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(),
                    sides = this._movingSides;
                var location = this._elementLocation,
                    size = this._elementSize,
                    offset = this._getOffset(e);
                var width = size.width + offset.x * (sides.left ? -1 : 1),
                    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 = $element.get(0).getBoundingClientRect(),
                    offsetTop = offset.y - ((elementRect.height || height) - height),
                    offsetLeft = offset.x - ((elementRect.width || width) - width);
                translator.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
                });
                domUtils.triggerResizeEvent($element)
            },
            _getOffset: function(e) {
                var offset = e.offset,
                    steps = stringUtils.pairToObject(this.option("step")),
                    sides = this._getMovingSides(e),
                    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,
                    size = this._elementSize,
                    xPos = sides.left ? location.left : location.left + size.width,
                    yPos = sides.top ? location.top : location.top + size.height,
                    newXShift = (xPos + offset.x) % steps.h,
                    newYShift = (yPos + offset.y) % steps.v,
                    sign = Math.sign || function(x) {
                        x = +x;
                        if (0 === x || isNaN(x)) {
                            return x
                        }
                        return x > 0 ? 1 : -1
                    },
                    separatorOffset = function(steps, offset) {
                        return (1 + .2 * sign(offset)) % 1 * steps
                    },
                    isSmallOffset = function(offset, steps) {
                        return Math.abs(offset) < .2 * steps
                    };
                var newOffsetX = offset.x - newXShift,
                    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 = $(e.target),
                    hasCornerTopLeftClass = $target.hasClass(RESIZABLE_HANDLE_CORNER_CLASS + "-top-left"),
                    hasCornerTopRightClass = $target.hasClass(RESIZABLE_HANDLE_CORNER_CLASS + "-top-right"),
                    hasCornerBottomLeftClass = $target.hasClass(RESIZABLE_HANDLE_CORNER_CLASS + "-bottom-left"),
                    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)
            },
            _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 result, $area = $(area);
                if ($area.length) {
                    result = {
                        width: $area.innerWidth(),
                        height: $area.innerHeight(),
                        offset: extend({
                            top: 0,
                            left: 0
                        }, typeUtils.isWindow($area[0]) ? {} : $area.offset())
                    };
                    this._correctAreaGeometry(result, $area)
                }
                return result
            },
            _correctAreaGeometry: function(result, $area) {
                var areaBorderLeft = $area ? this._getBorderWidth($area, "left") : 0,
                    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", fitIntoRange(width, this.option("minWidth"), this.option("maxWidth")))
            },
            _renderHeight: function(height) {
                this.option("height", fitIntoRange(height, this.option("minHeight"), this.option("maxHeight")))
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "disabled":
                    case "handles":
                        this._invalidate();
                        break;
                    case "minWidth":
                    case "maxWidth":
                        windowUtils.hasWindow() && this._renderWidth(this.$element().outerWidth());
                        break;
                    case "minHeight":
                    case "maxHeight":
                        windowUtils.hasWindow() && this._renderHeight(this.$element().outerHeight());
                        break;
                    case "onResize":
                    case "onResizeStart":
                    case "onResizeEnd":
                        this._renderActions();
                        break;
                    case "area":
                    case "stepPrecision":
                    case "step":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _clean: function() {
                this.$element().find("." + RESIZABLE_HANDLE_CLASS).remove()
            }
        });
        registerComponent(RESIZABLE, Resizable);
        module.exports = Resizable
    }, ,
    /*!************************************************************!*\
      !*** ./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 */ 66);
        var SWATCH_CONTAINER_CLASS_PREFIX = "dx-swatch-";
        var getSwatchContainer = function(element) {
            var $element = $(element);
            var swatchContainer = $element.closest('[class^="' + SWATCH_CONTAINER_CLASS_PREFIX + '"], [class*=" ' + SWATCH_CONTAINER_CLASS_PREFIX + '"]');
            var viewport = viewPortUtils.value();
            if (!swatchContainer.length) {
                return viewport
            }
            var swatchClassRegex = new RegExp("(\\s|^)(" + 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
    },
    /*!*****************************************************!*\
      !*** ./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),
            domUtils = __webpack_require__( /*! ../core/utils/dom */ 12),
            domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 13),
            Class = __webpack_require__( /*! ../core/class */ 10),
            registerEvent = __webpack_require__( /*! ./core/event_registrator */ 67),
            clickEvent = __webpack_require__( /*! ./click */ 17),
            eventUtils = __webpack_require__( /*! ./utils */ 9);
        var DBLCLICK_EVENT_NAME = "dxdblclick",
            DBLCLICK_NAMESPACE = "dxDblClick",
            NAMESPACED_CLICK_EVENT = eventUtils.addNamespace(clickEvent.name, DBLCLICK_NAMESPACE),
            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/ui/action_sheet.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            window = __webpack_require__( /*! ../core/utils/window */ 6).getWindow(),
            noop = __webpack_require__( /*! ../core/utils/common */ 4).noop,
            messageLocalization = __webpack_require__( /*! ../localization/message */ 14),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            Button = __webpack_require__( /*! ./button */ 36),
            CollectionWidget = __webpack_require__( /*! ./collection/ui.collection_widget.edit */ 47),
            Popup = __webpack_require__( /*! ./popup */ 55),
            Popover = __webpack_require__( /*! ./popover */ 134),
            BindableTemplate = __webpack_require__( /*! ./widget/bindable_template */ 60),
            Deferred = __webpack_require__( /*! ../core/utils/deferred */ 7).Deferred;
        var ACTION_SHEET_CLASS = "dx-actionsheet",
            ACTION_SHEET_CONTAINER_CLASS = "dx-actionsheet-container",
            ACTION_SHEET_POPUP_WRAPPER_CLASS = "dx-actionsheet-popup-wrapper",
            ACTION_SHEET_POPOVER_WRAPPER_CLASS = "dx-actionsheet-popover-wrapper",
            ACTION_SHEET_CANCEL_BUTTON_CLASS = "dx-actionsheet-cancel",
            ACTION_SHEET_ITEM_CLASS = "dx-actionsheet-item",
            ACTION_SHEET_ITEM_DATA_KEY = "dxActionSheetItemData",
            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._defaultTemplates.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,
                        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,
                    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__) {
        var _typeof = "function" === typeof Symbol && "symbol" === typeof Symbol.iterator ? function(obj) {
            return typeof obj
        } : function(obj) {
            return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
        };
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            window = __webpack_require__( /*! ../../core/utils/window */ 6).getWindow(),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            Guid = __webpack_require__( /*! ../../core/guid */ 48),
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            inArray = __webpack_require__( /*! ../../core/utils/array */ 11).inArray,
            DropDownEditor = __webpack_require__( /*! ./ui.drop_down_editor */ 157),
            List = __webpack_require__( /*! ../list */ 109),
            errors = __webpack_require__( /*! ../widget/ui.errors */ 18),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            DataExpressionMixin = __webpack_require__( /*! ../editor/ui.data_expression */ 214),
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14),
            themes = __webpack_require__( /*! ../themes */ 20),
            ChildDefaultTemplate = __webpack_require__( /*! ../widget/child_default_template */ 102),
            Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7).Deferred;
        var LIST_ITEM_SELECTOR = ".dx-list-item",
            LIST_ITEM_DATA_KEY = "dxListItemData",
            DROPDOWNLIST_POPUP_WRAPPER_CLASS = "dx-dropdownlist-popup-wrapper",
            SKIP_GESTURE_EVENT_CLASS = "dx-skip-gesture-event",
            SEARCH_EVENT = "input",
            SEARCH_MODES = ["startswith", "contains", "endwith", "notcontains"];
        var DropDownList = DropDownEditor.inherit({
            _supportedKeys: function() {
                var parent = this.callBase();
                return extend({}, parent, {
                    tab: function(e) {
                        if (this.option("opened") && "instantly" === this.option("applyValueMode")) {
                            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
                })
            },
            _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"
                    },
                    popupWidthExtension: 0
                }))
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function(_device) {
                        return "win" === _device.platform && _device.version && 8 === _device.version[0]
                    },
                    options: {
                        popupPosition: {
                            offset: {
                                v: -6
                            }
                        }
                    }
                }, {
                    device: function() {
                        return themes.isAndroid5()
                    },
                    options: {
                        popupWidthExtension: 32
                    }
                }, {
                    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._defaultTemplates.item = new ChildDefaultTemplate("item", this)
            },
            _saveFocusOnWidget: function(e) {
                if (this._list && this._list.initialOption("focusStateEnabled")) {
                    this._focusInput()
                }
            },
            _createPopup: function() {
                this.callBase();
                this._popup._wrapper().addClass(this._popupWrapperClass());
                var $popupContent = this._popup.$content();
                eventsEngine.off($popupContent, "mouseup");
                eventsEngine.on($popupContent, "mouseup", this._saveFocusOnWidget.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)
            },
            _loadItem: function(value, cache) {
                var plainItems, selectedItem;
                if (cache && "object" !== ("undefined" === typeof value ? "undefined" : _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 void 0 !== selectedItem ? (new Deferred).resolve(selectedItem).promise() : this._loadValue(value)
            },
            _getPlainItems: function(items) {
                var plainItems = [];
                items = items || this.option("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"),
                    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() {
                var that = this;
                return extend(this.callBase(), {
                    templatesRenderAsynchronously: false,
                    width: this.option("width"),
                    onShowing: function() {
                        that.$element().addClass(SKIP_GESTURE_EVENT_CLASS)
                    },
                    onHidden: function() {
                        that.$element().removeClass(SKIP_GESTURE_EVENT_CLASS)
                    },
                    height: "auto",
                    maxHeight: this._getMaxHeight.bind(this)
                })
            },
            _renderPopupContent: function() {
                this._renderList()
            },
            _attachChildKeyboardEvents: function() {
                this._childKeyboardProcessor = this._keyboardProcessor.attachChildProcessor();
                this._setListOption("_keyboardProcessor", this._childKeyboardProcessor)
            },
            _fireContentReadyAction: commonUtils.noop,
            _setAriaTargetForList: function() {
                this._list._getAriaTarget = this._getAriaTarget.bind(this);
                this._list.setAria("role", "combobox")
            },
            _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._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(),
                    owns: opened && this._listId
                })
            },
            _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
            },
            _getListKeyExpr: function() {
                var valueExpr = this.option("valueExpr"),
                    isValueExprField = typeUtils.isString(valueExpr) && "this" !== valueExpr;
                return isValueExprField ? valueExpr : null
            },
            _listConfig: function() {
                var options = {
                    selectionMode: "single",
                    _templates: this.option("_templates"),
                    templateProvider: this.option("templateProvider"),
                    noDataText: this.option("noDataText"),
                    grouped: this.option("grouped"),
                    onContentReady: this._listContentReadyHandler.bind(this),
                    itemTemplate: this._getTemplateByOption("itemTemplate"),
                    indicateLoading: false,
                    keyExpr: this._getListKeyExpr(),
                    groupTemplate: this.option("groupTemplate"),
                    tabIndex: null,
                    onItemClick: this._listItemClickAction.bind(this),
                    dataSource: this._getDataSource(),
                    _keyboardProcessor: this._childKeyboardProcessor,
                    hoverStateEnabled: this._isDesktopDevice() ? this.option("hoverStateEnabled") : false,
                    focusStateEnabled: this._isDesktopDevice() ? this.option("focusStateEnabled") : false
                };
                return options
            },
            _getDataSource: function() {
                return this._needPassDataSourceToList() ? this._dataSource : null
            },
            _dataSourceOptions: function() {
                return {
                    paginate: false
                }
            },
            _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")
            },
            _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._needPassDataSourceToList()) {
                    this._filterDataSource(null)
                }
                this._refreshList()
            },
            _searchDataSource: function() {
                this._filterDataSource(this._searchValue())
            },
            _filterDataSource: function(searchValue) {
                this._clearSearchTimer();
                var dataSource = this._dataSource;
                dataSource.searchExpr(this.option("searchExpr") || this._displayGetterExpr());
                dataSource.searchOperation(this.option("searchMode"));
                dataSource.searchValue(searchValue);
                return dataSource.load().done(this._dataSourceFiltered.bind(this, searchValue))
            },
            _clearFilter: function() {
                var dataSource = this._dataSource;
                dataSource && dataSource.searchValue() && dataSource.searchValue(null)
            },
            _dataSourceFiltered: function() {
                this._refreshList();
                this._refreshPopupVisibility()
            },
            _refreshPopupVisibility: function() {
                if (this.option("readOnly")) {
                    return
                }
                this.option("opened", this._hasItemsToShow());
                if (this.option("opened")) {
                    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(),
                    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(),
                    offset = $element.offset(),
                    windowHeight = $(window).height(),
                    maxHeight = Math.max(offset.top, windowHeight - offset.top - $element.outerHeight());
                return Math.min(.5 * windowHeight, maxHeight)
            },
            _clean: function() {
                if (this._list) {
                    delete this._list
                }
                this.callBase()
            },
            _dispose: function() {
                this._clearSearchTimer();
                this.callBase()
            },
            _setCollectionWidgetOption: function() {
                this._setListOption.apply(this, arguments)
            },
            _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._getListKeyExpr());
                        break;
                    case "displayExpr":
                        this._renderValue();
                        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 "noDataText":
                        this._setListOption(args.name);
                        break;
                    case "displayValue":
                        this.option("text", args.value);
                        break;
                    case "itemTemplate":
                    case "searchTimeout":
                    case "popupWidthExtension":
                        break;
                    case "selectedItem":
                        this._selectionChangedAction({
                            selectedItem: args.value
                        });
                        break;
                    default:
                        this.callBase(args)
                }
            }
        }).include(DataExpressionMixin);
        registerComponent("dxDropDownList", DropDownList);
        module.exports = DropDownList
    },
    /*!**************************************************************!*\
      !*** ./artifacts/transpiled/ui/editor/ui.data_expression.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _typeof = "function" === typeof Symbol && "symbol" === typeof Symbol.iterator ? function(obj) {
            return typeof obj
        } : function(obj) {
            return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
        };
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            variableWrapper = __webpack_require__( /*! ../../core/utils/variable_wrapper */ 74),
            dataCoreUtils = __webpack_require__( /*! ../../core/utils/data */ 23),
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            FunctionTemplate = __webpack_require__( /*! ../widget/function_template */ 99),
            DataHelperMixin = __webpack_require__( /*! ../../data_helper */ 116),
            DataSourceModule = __webpack_require__( /*! ../../data/data_source/data_source */ 50),
            ArrayStore = __webpack_require__( /*! ../../data/array_store */ 80),
            Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7).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" === ("undefined" === typeof value ? "undefined" : _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: function() {
                if (this._displayGetterExpr()) {
                    this._originalItemTemplate = this._defaultTemplates.item;
                    this._defaultTemplates.item = new FunctionTemplate(function(options) {
                        return $("<div>").text(this._displayGetter(options.model)).html()
                    }.bind(this))
                } else {
                    if (this._originalItemTemplate) {
                        this._defaultTemplates.item = this._originalItemTemplate
                    }
                }
            },
            _setCollectionWidgetItemTemplate: function() {
                this._initDynamicTemplates();
                this._setCollectionWidgetOption("itemTemplate", this._getTemplateByOption("itemTemplate"))
            },
            _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._setCollectionWidgetItemTemplate()
                }
            }
        });
        module.exports = DataExpressionMixin
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/track_bar.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            Editor = __webpack_require__( /*! ./editor/editor */ 45),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6),
            fx = __webpack_require__( /*! ../animation/fx */ 31);
        var TRACKBAR_CLASS = "dx-trackbar",
            TRACKBAR_CONTAINER_CLASS = "dx-trackbar-container",
            TRACKBAR_RANGE_CLASS = "dx-trackbar-range",
            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"),
                    min = this.option("min"),
                    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/validation_summary.js ***!
      \*******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            grep = __webpack_require__( /*! ../core/utils/common */ 4).grep,
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 3),
            ValidationMixin = __webpack_require__( /*! ./validation/validation_mixin */ 169),
            ValidationEngine = __webpack_require__( /*! ./validation_engine */ 94),
            CollectionWidget = __webpack_require__( /*! ./collection/ui.collection_widget.edit */ 47);
        var VALIDATION_SUMMARY_CLASS = "dx-validationsummary",
            ITEM_CLASS = VALIDATION_SUMMARY_CLASS + "-item",
            ITEM_DATA_KEY = VALIDATION_SUMMARY_CLASS + "-item-data";
        var ValidationSummary = CollectionWidget.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    focusStateEnabled: false,
                    noDataText: null
                })
            },
            _setOptionsByReference: function() {
                this.callBase();
                extend(this._optionsByReference, {
                    validationGroup: true
                })
            },
            _init: function() {
                this.callBase();
                this._initGroupRegistration()
            },
            _initGroupRegistration: function() {
                var group = this._findGroup(),
                    groupConfig = ValidationEngine.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 = ValidationEngine.getGroupConfig(this._validationGroup);
                groupConfig && groupConfig.off("validated", this.groupSubscription)
            },
            _getOrderedItems: function(validators, items) {
                var orderedItems = [];
                iteratorUtils.each(validators, function(_, validator) {
                    var firstItem = grep(items, function(item) {
                        if (item.validator === validator) {
                            return true
                        }
                    })[0];
                    if (firstItem) {
                        orderedItems.push(firstItem)
                    }
                });
                return orderedItems
            },
            _groupValidationHandler: function(params) {
                var that = this,
                    items = that._getOrderedItems(params.validators, iteratorUtils.map(params.brokenRules, function(rule) {
                        return {
                            text: rule.message,
                            validator: rule.validator
                        }
                    }));
                that.validators = params.validators;
                iteratorUtils.each(that.validators, function(_, validator) {
                    if (validator._validationSummary !== this) {
                        var handler = that._itemValidationHandler.bind(that),
                            disposingHandler = function() {
                                validator.off("validated", handler);
                                validator._validationSummary = null;
                                handler = null
                            };
                        validator.on("validated", handler);
                        validator.on("disposing", disposingHandler);
                        validator._validationSummary = this
                    }
                });
                that.option("items", items)
            },
            _itemValidationHandler: function(itemValidationResult) {
                var elementIndex, items = this.option("items"),
                    isValid = itemValidationResult.isValid,
                    replacementFound = false,
                    newMessage = itemValidationResult.brokenRule && itemValidationResult.brokenRule.message,
                    validator = itemValidationResult.validator;
                iteratorUtils.each(items, function(index, item) {
                    if (item.validator === validator) {
                        if (isValid) {
                            elementIndex = index
                        } else {
                            item.text = newMessage
                        }
                        replacementFound = true;
                        return false
                    }
                });
                if (isValid ^ replacementFound) {
                    return
                }
                if (isValid) {
                    items.splice(elementIndex, 1)
                } else {
                    items.push({
                        text: newMessage,
                        validator: validator
                    })
                }
                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) {
                eventsEngine.on(params.itemElement, "click", function() {
                    params.itemData.validator && params.itemData.validator.focus && params.itemData.validator.focus()
                })
            },
            _dispose: function() {
                this.callBase();
                this._unsubscribeGroup()
            }
        }).include(ValidationMixin);
        registerComponent("dxValidationSummary", ValidationSummary);
        module.exports = ValidationSummary
    },
    /*!****************************************************************!*\
      !*** ./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),
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            errors = __webpack_require__( /*! ../../core/errors */ 19),
            compileGetter = __webpack_require__( /*! ../../core/utils/data */ 23).compileGetter,
            Class = __webpack_require__( /*! ../../core/class */ 10),
            Button = __webpack_require__( /*! ../button */ 36),
            abstract = Class.abstract;
        var TOOLBAR_MENU_CONTAINER_CLASS = "dx-toolbar-menu-container",
            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"),
                    result = false;
                var optionGetter = compileGetter("visible"),
                    overflowGetter = compileGetter("locateInMenu");
                var menuLocation = false;
                each(menuItems, function(index, item) {
                    var itemVisible = optionGetter(item, {
                            functionsAsIs: true
                        }),
                        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/converterController.js ***!
      \********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _createClass = function() {
            function defineProperties(target, props) {
                for (var i = 0; i < props.length; i++) {
                    var descriptor = props[i];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) {
                        descriptor.writable = true
                    }
                    Object.defineProperty(target, descriptor.key, descriptor)
                }
            }
            return function(Constructor, protoProps, staticProps) {
                if (protoProps) {
                    defineProperties(Constructor.prototype, protoProps)
                }
                if (staticProps) {
                    defineProperties(Constructor, staticProps)
                }
                return Constructor
            }
        }();

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }
        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/calendar.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./calendar/ui.calendar */ 496)
    },
    /*!********************************************!*\
      !*** ./artifacts/transpiled/ui/toolbar.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            themes = __webpack_require__( /*! ./themes */ 20),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            grep = __webpack_require__( /*! ../core/utils/common */ 4).grep,
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            arrayUtils = __webpack_require__( /*! ../core/utils/array */ 11),
            iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 3),
            ActionSheetStrategy = __webpack_require__( /*! ./toolbar/ui.toolbar.strategy.action_sheet */ 541),
            DropDownMenuStrategy = __webpack_require__( /*! ./toolbar/ui.toolbar.strategy.drop_down_menu */ 542),
            ListBottomStrategy = __webpack_require__( /*! ./toolbar/ui.toolbar.strategy.list_bottom */ 544),
            ListTopStrategy = __webpack_require__( /*! ./toolbar/ui.toolbar.strategy.list_top */ 545),
            ToolbarBase = __webpack_require__( /*! ./toolbar/ui.toolbar.base */ 294),
            ChildDefaultTemplate = __webpack_require__( /*! ./widget/child_default_template */ 102);
        var STRATEGIES = {
            actionSheet: ActionSheetStrategy,
            dropDownMenu: DropDownMenuStrategy,
            listBottom: ListBottomStrategy,
            listTop: ListTopStrategy
        };
        var TOOLBAR_AUTO_HIDE_ITEM_CLASS = "dx-toolbar-item-auto-hide",
            TOOLBAR_AUTO_HIDE_TEXT_CLASS = "dx-toolbar-text-auto-hide",
            TOOLBAR_HIDDEN_ITEM = "dx-toolbar-item-invisible";
        var Toolbar = ToolbarBase.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    menuItemTemplate: "menuItem",
                    submenuType: "dropDownMenu"
                })
            },
            _defaultOptionsRules: function() {
                var themeName = themes.current();
                return this.callBase().concat([{
                    device: function() {
                        return themes.isIos7(themeName)
                    },
                    options: {
                        submenuType: "actionSheet"
                    }
                }, {
                    device: function() {
                        return themes.isAndroid5(themeName)
                    },
                    options: {
                        submenuType: "dropDownMenu"
                    }
                }, {
                    device: function() {
                        return themes.isWin8(themeName)
                    },
                    options: {
                        submenuType: "listBottom"
                    }
                }, {
                    device: function() {
                        return themes.isWin10(themeName)
                    },
                    options: {
                        submenuType: "listTop"
                    }
                }])
            },
            _dimensionChanged: function(dimension) {
                if ("height" === dimension) {
                    return
                }
                this._menuStrategy.toggleMenuVisibility(false, true);
                this.callBase();
                this._menuStrategy.renderMenuItems()
            },
            _initTemplates: function() {
                this.callBase();
                this._defaultTemplates.actionSheetItem = new ChildDefaultTemplate("item", this)
            },
            _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),
                        $itemContainer = $(item).children(),
                        $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 strategyName = this.option("submenuType");
                if (("listBottom" === strategyName || "listTop" === strategyName) && "topToolbar" === this.option("renderAs")) {
                    return true
                }
                var items = this.option("items") || [],
                    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()
                    }
                }
            },
            _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;
                    default:
                        this.callBase.apply(this, arguments)
                }
            },
            _changeMenuOption: function(name, value) {
                this._menuStrategy.widgetOption(name, value)
            }
        });
        registerComponent("dxToolbar", Toolbar);
        module.exports = Toolbar
    },
    /*!*****************************************************!*\
      !*** ./artifacts/transpiled/exporter/file_saver.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 13),
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6),
            window = windowUtils.getWindow(),
            navigator = windowUtils.getNavigator(),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            errors = __webpack_require__( /*! ../ui/widget/ui.errors */ 18),
            typeUtils = __webpack_require__( /*! ../core/utils/type */ 1),
            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 = {
            _getDataUri: function(format, data) {
                return "data:" + MIME_TYPES[format] + ";base64," + data
            },
            _linkDownloader: function(fileName, href, clickHandler) {
                var exportLinkElement = domAdapter.createElement("a"),
                    attributes = {
                        download: fileName,
                        href: href
                    };
                eventsEngine.on($(exportLinkElement), "click", function() {
                    $(exportLinkElement).remove();
                    clickHandler && clickHandler.apply(this, arguments)
                });
                domAdapter.getBody().appendChild(exportLinkElement);
                $(exportLinkElement).css({
                    display: "none"
                }).text("load").attr(attributes)[0].click();
                return exportLinkElement
            },
            _formDownloader: function(proxyUrl, fileName, contentType, data) {
                var formAttributes = {
                        method: "post",
                        action: proxyUrl,
                        enctype: "multipart/form-data"
                    },
                    exportForm = $("<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");
                eventsEngine.trigger(exportForm, "submit");
                if (eventsEngine.trigger(exportForm, "submit")) {
                    exportForm.remove()
                }
                return exportForm
            },
            _saveByProxy: function(proxyUrl, fileName, format, data) {
                return this._formDownloader(proxyUrl, fileName, MIME_TYPES[format], data)
            },
            _winJSBlobSave: function(blob, fileName, format) {
                var savePicker = new Windows.Storage.Pickers.FileSavePicker;
                savePicker.suggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.documentsLibrary;
                savePicker.fileTypeChoices.insert(MIME_TYPES[format], ["." + FILE_EXTESIONS[format]]);
                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()
                                })
                            })
                        })
                    }
                })
            },
            _saveBlobAs: function(fileName, format, data, linkClick) {
                var that = this;
                that._blobSaved = false;
                if (typeUtils.isDefined(navigator.msSaveOrOpenBlob)) {
                    navigator.msSaveOrOpenBlob(data, fileName);
                    that._blobSaved = true
                } else {
                    if (typeUtils.isDefined(window.WinJS)) {
                        that._winJSBlobSave(data, fileName, format);
                        that._blobSaved = true
                    } else {
                        var URL = window.URL || window.webkitURL || window.mozURL || window.msURL || window.oURL;
                        if (typeUtils.isDefined(URL)) {
                            var objectURL = URL.createObjectURL(data),
                                clickHandler = function(e) {
                                    setTimeout(function() {
                                        URL.revokeObjectURL(objectURL);
                                        that._objectUrlRevoked = true
                                    });
                                    typeUtils.isFunction(linkClick) && linkClick.apply(this, arguments)
                                };
                            return that._linkDownloader(fileName, objectURL, clickHandler)
                        }
                    }
                }
            },
            saveAs: function(fileName, format, data, proxyURL, linkClick, forceProxy) {
                fileName += "." + FILE_EXTESIONS[format];
                if (forceProxy) {
                    this._saveByProxy(proxyURL, fileName, format, data)
                } else {
                    if (typeUtils.isFunction(window.Blob)) {
                        this._saveBlobAs(fileName, format, data)
                    } else {
                        if (typeUtils.isDefined(proxyURL) && !typeUtils.isDefined(navigator.userAgent.match(/iPad/i))) {
                            this._saveByProxy(proxyURL, fileName, format, data)
                        } else {
                            if (!typeUtils.isDefined(navigator.userAgent.match(/iPad/i))) {
                                errors.log("E1034")
                            }
                            this._linkDownloader(fileName, this._getDataUri(format, data), linkClick)
                        }
                    }
                }
            }
        }
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/core/renderer_base.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var dataUtils = __webpack_require__( /*! ./element_data */ 37);
        var domAdapter = __webpack_require__( /*! ./dom_adapter */ 13);
        var windowUtils = __webpack_require__( /*! ./utils/window */ 6);
        var window = windowUtils.getWindow();
        var typeUtils = __webpack_require__( /*! ./utils/type */ 1);
        var styleUtils = __webpack_require__( /*! ./utils/style */ 85);
        var sizeUtils = __webpack_require__( /*! ./utils/size */ 324);
        var htmlParser = __webpack_require__( /*! ./utils/html_parser */ 234);
        var renderer = function(selector, context) {
            return new initRender(selector, context)
        };
        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.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 {
                    if (this[0].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(),
                        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;
                    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],
                    container = this[0],
                    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
            }
            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) {
            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
            }
            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 i, nodes = [];
            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"),
                            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 = [],
                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 = [],
                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 = [],
                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),
                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 */ 11).merge,
            domAdapter = __webpack_require__( /*! ../dom_adapter */ 13);
        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/exporter/excel_format_converter.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var typeUtils = __webpack_require__( /*! ../core/utils/type */ 1),
            stringUtils = __webpack_require__( /*! ../core/utils/string */ 40),
            numberFormatter = __webpack_require__( /*! ../localization/number */ 49),
            dateLocalization = __webpack_require__( /*! ../localization/date */ 32),
            getDateLDMLFormat = __webpack_require__( /*! ../localization/ldml/date.format */ 201).getFormat,
            getLanguageID = __webpack_require__( /*! ../localization/language_codes */ 272).getLanguageId,
            UNSUPPORTED_FORMAT_MAPPING = {
                quarter: "shortDate",
                quarterAndYear: "shortDate",
                minute: "longTime",
                millisecond: "longTime"
            },
            ARABIC_ZERO_CODE = 1632,
            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,
            DAY_REGEXP = /E/g,
            DO_REGEXP = /dE+/g,
            STANDALONE_MONTH_REGEXP = /L/g,
            HOUR_REGEXP = /h/g,
            SLASH_REGEXP = /\//g,
            SQUARE_OPEN_BRACKET_REGEXP = /\[/g,
            SQUARE_CLOSE_BRACKET_REGEXP = /]/g,
            ANY_REGEXP = /./g;
        __webpack_require__( /*! ../localization/currency */ 146);
        var excelFormatConverter = module.exports = {
            _applyPrecision: function(format, precision) {
                var result, i;
                if (precision > 0) {
                    result = "decimal" !== format ? "." : "";
                    for (i = 0; i < precision; i++) {
                        result += "0"
                    }
                    return result
                }
                return ""
            },
            _getCurrencyFormat: function(currency) {
                return numberFormatter.getOpenXmlCurrencyFormat(currency)
            },
            _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) {
                format = UNSUPPORTED_FORMAT_MAPPING[format && format.type || format] || format;
                var that = this,
                    formattedValue = (dateLocalization.format(new Date(2009, 8, 8, 6, 5, 4), format) || "").toString(),
                    result = getDateLDMLFormat(function(value) {
                        return dateLocalization.format(value, format)
                    });
                if (result) {
                    result = that._convertDateFormatToOpenXml(result);
                    result = that._getLanguageInfo(formattedValue) + result
                }
                return result
            },
            _getLanguageInfo: function(defaultPattern) {
                var languageID = getLanguageID(),
                    languageIDStr = languageID ? languageID.toString(16) : "",
                    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, excelFormat = "currency" === format ? this._getCurrencyFormat(currency) : DEFINED_NUMBER_FORMTATS[format.toLowerCase()];
                if (excelFormat) {
                    result = stringUtils.format(excelFormat, this._applyPrecision(format, precision))
                }
                return result
            },
            convertFormat: function(format, precision, type, currency) {
                if (typeUtils.isDefined(format)) {
                    if ("date" === type) {
                        return excelFormatConverter._convertDateFormat(format)
                    } else {
                        if (typeUtils.isString(format) && DEFINED_NUMBER_FORMTATS[format.toLowerCase()]) {
                            return excelFormatConverter._convertNumberFormat(format, precision, currency)
                        }
                    }
                }
            }
        }
    },
    /*!******************************************************************!*\
      !*** ./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"](),
                    period = hours < 12 ? 0 : 1,
                    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(),
                    signPart = timezoneOffset > 0 ? "-" : "+",
                    timezoneOffsetAbs = Math.abs(timezoneOffset),
                    hours = Math.floor(timezoneOffsetAbs / 60),
                    minutes = timezoneOffsetAbs % 60,
                    hoursPart = leftPad(hours.toString(), 2),
                    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, formatter, char, isCurrentCharEqualsNext, charCount = 0,
                    separator = "'",
                    isEscaping = false,
                    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 iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 3);
        var MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
            DAYS = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
            PERIODS = ["AM", "PM"],
            QUARTERS = ["Q1", "Q2", "Q3", "Q4"];
        var cutCaptions = function(captions, format) {
            var lengthByFormat = {
                abbreviated: 3,
                "short": 2,
                narrow: 1
            };
            return iteratorUtils.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 */ 77);
        var _excel2 = _interopRequireDefault(_excel);
        var _excel3 = __webpack_require__( /*! ./excel.pattern_fill_helper */ 330);
        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 */ 77);
        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 = void 0;
                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 */ 77);
        var _excel2 = _interopRequireDefault(_excel);
        var _excel3 = __webpack_require__( /*! ./excel.color_helper */ 239);
        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 clipPaths, imageDeferreds, patterns, filters, $ = __webpack_require__( /*! ../core/renderer */ 2),
            Color = __webpack_require__( /*! ../color */ 91),
            isFunction = __webpack_require__( /*! ../core/utils/type */ 1).isFunction,
            svgUtils = __webpack_require__( /*! ../core/utils/svg */ 206),
            iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 3),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 13),
            domUtils = __webpack_require__( /*! ../core/utils/dom */ 12),
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6),
            window = windowUtils.getWindow(),
            camelize = __webpack_require__( /*! ../core/utils/inflector */ 34).camelize,
            deferredUtils = __webpack_require__( /*! ../core/utils/deferred */ 7),
            when = deferredUtils.when,
            Deferred = deferredUtils.Deferred,
            _math = Math,
            PI = _math.PI,
            _min = _math.min,
            _abs = _math.abs,
            _sqrt = _math.sqrt,
            _pow = _math.pow,
            _atan2 = _math.atan2,
            _cos = _math.cos,
            _sin = _math.sin,
            _each = iteratorUtils.each,
            _number = Number,
            IMAGE_QUALITY = 1,
            TEXT_DECORATION_LINE_WIDTH_COEFF = .05,
            DEFAULT_FONT_SIZE = "10px",
            DEFAULT_FONT_FAMILY = "sans-serif",
            DEFAULT_TEXT_COLOR = "#000";

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

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

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

        function getElementOptions(element) {
            var coords, attr = parseAttributes(element.attributes || {}),
                options = extend({}, attr, {
                    text: element.textContent.replace(/\s+/g, " "),
                    textAlign: "middle" === attr["text-anchor"] ? "center" : attr["text-anchor"]
                }),
                transform = attr.transform;
            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])
                }
            }
            parseStyles(element, options);
            return options
        }

        function drawRect(context, options) {
            var x = options.x,
                y = options.y,
                width = options.width,
                height = options.height,
                cornerRadius = options.rx;
            if (!cornerRadius) {
                context.rect(options.x, options.y, options.width, options.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) {
            var d = new Deferred,
                image = new window.Image;
            image.onload = function() {
                context.save();
                context.globalAlpha = options.globalAlpha;
                transformElement(context, options);
                clipElement(context, options);
                context.drawImage(image, options.x, options.y, options.width, options.height);
                context.restore();
                d.resolve()
            };
            image.onerror = function() {
                d.resolve()
            };
            imageDeferreds.push(d);
            image.setAttribute("crossOrigin", "anonymous");
            image.src = options["xlink:href"]
        }

        function drawPath(context, dAttr) {
            var param1, param2, dArray = dAttr.split(" "),
                i = 0;
            do {
                param1 = _number(dArray[i + 1]);
                param2 = _number(dArray[i + 2]);
                switch (dArray[i]) {
                    case "M":
                        context.moveTo(param1, param2);
                        i += 3;
                        break;
                    case "L":
                        context.lineTo(param1, param2);
                        i += 3;
                        break;
                    case "C":
                        context.bezierCurveTo(param1, param2, _number(dArray[i + 3]), _number(dArray[i + 4]), _number(dArray[i + 5]), _number(dArray[i + 6]));
                        i += 7;
                        break;
                    case "A":
                        arcTo(_number(dArray[i - 2]), _number(dArray[i - 1]), _number(dArray[i + 6]), _number(dArray[i + 7]), param1, _number(dArray[i + 4]), _number(dArray[i + 5]), context);
                        i += 8;
                        break;
                    case "Z":
                        context.closePath();
                        i += 1
                }
            } while (i < dArray.length)
        }

        function parseStyles(element, options) {
            var field, style = element.style || {};
            for (field in style) {
                if ("" !== style[field]) {
                    options[camelize(field)] = style[field]
                }
            }
            if (domAdapter.isElementNode(element) && domUtils.contains(domAdapter.getBody(), 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[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 = 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) {
            setFontStyle(context, options);
            options.text && context.fillText(options.text, options.x || 0, options.y || 0);
            strokeElement(context, options, true);
            drawTextDecoration(context, options)
        }

        function drawTextDecoration(context, options) {
            if (!options.textDecoration || "none" === options.textDecoration) {
                return
            }
            var x = options.x,
                textWidth = context.measureText(options.text).width,
                textHeight = parseInt(options.fontSize, 10),
                lineHeight = textHeight * TEXT_DECORATION_LINE_WIDTH_COEFF < 1 ? 1 : textHeight * TEXT_DECORATION_LINE_WIDTH_COEFF,
                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);
            strokeElement(context, options)
        }

        function createClipPath(element) {
            clipPaths[element.attributes.id.textContent] = element.childNodes[0]
        }

        function createPattern(element) {
            patterns[element.attributes.id.textContent] = element
        }

        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) {
            var line, lines = [],
                offset = 0;
            for (var i = 0; i < childNodes.length; i++) {
                var element = childNodes[i];
                if (void 0 === element.tagName) {
                    drawElement(element, context, options)
                } else {
                    if ("tspan" === element.tagName || "text" === element.tagName) {
                        var elementOptions = getElementOptions(element),
                            mergedOptions = extend({}, options, elementOptions);
                        if ("tspan" === element.tagName && hasTspan(element)) {
                            drawTextElement(element.childNodes, context, mergedOptions);
                            continue
                        }
                        mergedOptions.textAlign = "start";
                        if (!line || void 0 !== elementOptions.x) {
                            line = {
                                elements: [],
                                options: [],
                                widths: [],
                                offsets: []
                            };
                            lines.push(line)
                        }
                        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),
                    xDiff = 0,
                    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])
                })
            })
        }

        function drawElement(element, context, parentOptions) {
            var tagName = element.tagName,
                isText = "text" === tagName || "tspan" === tagName || void 0 === tagName,
                isImage = "image" === tagName,
                options = extend({}, parentOptions, getElementOptions(element));
            if ("hidden" === options.visibility) {
                return
            }
            context.save();
            !isImage && transformElement(context, options);
            clipElement(context, options);
            aggregateOpacity(options);
            context.beginPath();
            switch (element.tagName) {
                case void 0:
                    drawText(context, options);
                    break;
                case "text":
                case "tspan":
                    drawTextElement(element.childNodes, context, options);
                    break;
                case "image":
                    drawImage(context, options);
                    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)
            }
            applyFilter(context, options);
            if (!isText) {
                fillElement(context, options);
                strokeElement(context, options)
            }
            context.restore()
        }

        function applyFilter(context, options) {
            var filterOptions, id = parseUrl(options.filter);
            if (id) {
                filterOptions = filters && 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);
            delete options.translateX;
            delete options.translateY;
            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));
                delete options.rotationAngle;
                delete options.rotationX;
                delete options.rotationY
            }
        }

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

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

        function createFilter(element) {
            var color, opacity, filterOptions = {};
            _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)
                }
            });
            filters[element.id] = filterOptions
        }

        function drawCanvasElements(elements, context, parentOptions) {
            var options;
            _each(elements, function(_, element) {
                switch (element.tagName && element.tagName.toLowerCase()) {
                    case "g":
                        options = extend({}, parentOptions, getElementOptions(element));
                        context.save();
                        transformElement(context, options);
                        clipElement(context, options);
                        drawCanvasElements(element.childNodes, context, options);
                        context.restore();
                        break;
                    case "defs":
                        clipPaths = {};
                        patterns = {};
                        filters = {};
                        drawCanvasElements(element.childNodes, context);
                        break;
                    case "clippath":
                        createClipPath(element);
                        break;
                    case "pattern":
                        createPattern(element);
                        break;
                    case "filter":
                        createFilter(element);
                        break;
                    default:
                        drawElement(element, context, parentOptions)
                }
            })
        }

        function setLineDash(context, options) {
            var matches = options["stroke-dasharray"] && options["stroke-dasharray"].match(/(\d+)/g);
            if (matches && matches.length) {
                matches = iteratorUtils.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()
            }
        }

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

        function fillElement(context, options) {
            var fill = options.fill;
            if (fill && "none" !== fill) {
                context.fillStyle = fill.search(/url/) === -1 ? fill : getPattern(context, fill);
                context.globalAlpha = options.fillOpacity;
                context.fill()
            }
        }
        var parseAttributes = function(attributes) {
            var attr, newAttributes = {};
            iteratorUtils.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 getCanvasFromSvg(markup, width, height, backgroundColor, margin) {
            var canvas = createCanvas(width, height, margin),
                context = canvas.getContext("2d"),
                svgElem = svgUtils.getSvgElement(markup);
            context.translate(margin, margin);
            imageDeferreds = [];
            domAdapter.getBody().appendChild(canvas);
            if (svgElem.attributes.direction) {
                canvas.dir = svgElem.attributes.direction.textContent
            }
            drawBackground(context, width, height, backgroundColor, margin);
            drawCanvasElements(svgElem.childNodes, context, {});
            domAdapter.getBody().removeChild(canvas);
            return canvas
        }

        function resolveString(string, canvas, mimeType) {
            when.apply($, imageDeferreds).done(function() {
                var resultString = getStringFromCanvas(canvas, mimeType);
                string.resolve(resultString)
            })
        }
        exports.imageCreator = {
            getImageData: function(markup, options) {
                var mimeType = "image/" + options.format,
                    string = new Deferred,
                    width = options.width,
                    height = options.height,
                    backgroundColor = options.backgroundColor;
                if (isFunction(options.__parseAttributesFn)) {
                    parseAttributes = options.__parseAttributesFn
                }
                resolveString(string, getCanvasFromSvg(markup, width, height, backgroundColor, options.margin), mimeType);
                return string
            },
            getData: function(markup, options) {
                var that = this,
                    imageData = exports.imageCreator.getImageData(markup, options),
                    mimeType = "image/" + options.format,
                    data = new Deferred;
                when(imageData).done(function(binaryData) {
                    imageData = isFunction(window.Blob) && !options.forceProxy ? that._getBlob(binaryData, mimeType) : that._getBase64(binaryData);
                    data.resolve(imageData)
                });
                return data
            },
            _getBlob: function(binaryData, mimeType) {
                var i, 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, callback) {
            exports.imageCreator.getData(data, options).done(callback)
        };
        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/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),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13),
            windowUtils = __webpack_require__( /*! ../../core/utils/window */ 6),
            window = windowUtils.getWindow(),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            resizeCallbacks = __webpack_require__( /*! ../../core/utils/resize_callbacks */ 133),
            support = __webpack_require__( /*! ../../core/utils/support */ 44),
            styleUtils = __webpack_require__( /*! ../../core/utils/style */ 85),
            devices = __webpack_require__( /*! ../../core/devices */ 16);
        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"],
                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 && !("win" === realDevice.platform && 10 === realDevice.version[0])) {
                eventsEngine.off(domAdapter.getDocument(), ".dxInitMobileViewport");
                eventsEngine.on(domAdapter.getDocument(), "dxpointermove.dxInitMobileViewport", function(e) {
                    var count = e.pointers.length,
                        isTouchEvent = "touch" === e.pointerType,
                        zoomDisabled = !allowZoom && count > 1,
                        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/mobile/process_hardware_back_button.js ***!
      \*********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var hardwareBack = __webpack_require__( /*! ../core/utils/callbacks */ 21)();
        module.exports = function() {
            hardwareBack.fire()
        };
        module.exports.processCallback = hardwareBack
    },
    /*!**************************************************!*\
      !*** ./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,
            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,
                Bx = 3 * (x2 - x1) - Cx,
                Ax = 1 - Cx - Bx,
                Cy = 3 * y1,
                By = 3 * (y2 - y1) - Cy,
                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 findXFor = function(t) {
                var z, x = t,
                    i = 0;
                while (i < 14) {
                    z = bezierX(x) - t;
                    if (Math.abs(z) < .001) {
                        break
                    }
                    x -= z / derivativeX(x);
                    i++
                }
                return x
            };
            var derivativeX = function(t) {
                return Cx + t * (2 * Bx + 3 * t * Ax)
            };
            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 */ 16),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            BaseStrategy = __webpack_require__( /*! ./base */ 149);
        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 */ 3).each,
            readyCallbacks = __webpack_require__( /*! ../../core/utils/ready_callbacks */ 52),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13);
        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,
            BaseStrategy = __webpack_require__( /*! ./base */ 149),
            Observer = __webpack_require__( /*! ./observer */ 246);
        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/knockout/template.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13),
            ko = __webpack_require__( /*! knockout */ 61),
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            TemplateBase = __webpack_require__( /*! ../../ui/widget/ui.template_base */ 71),
            domUtils = __webpack_require__( /*! ../../core/utils/dom */ 12);
        var getParentContext = function(data) {
            var parentNode = domAdapter.createElement("div");
            ko.applyBindingsToNode(parentNode, null, data);
            var parentContext = ko.contextFor(parentNode);
            ko.cleanNode(parentNode);
            return parentContext
        };
        var KoTemplate = TemplateBase.inherit({
            ctor: function(element) {
                this._element = element;
                this._template = $("<div>").append(domUtils.normalizeTemplateElement(element));
                this._registerKoTemplate()
            },
            _registerKoTemplate: function() {
                var template = this._template.get(0);
                new ko.templateSources.anonymousTemplate(template).nodes(template)
            },
            _prepareDataForContainer: function(data, container) {
                if (container && container.length) {
                    var containerElement = container.get(0);
                    var containerContext = ko.contextFor(containerElement);
                    data = void 0 !== data ? data : ko.dataFor(containerElement) || {};
                    if (containerContext) {
                        return data === containerContext.$data ? containerContext : containerContext.createChildContext(data)
                    }
                }
                return getParentContext(data).createChildContext(data)
            },
            _renderCore: function(options) {
                var model = this._prepareDataForContainer(options.model, $(options.container));
                if (typeUtils.isDefined(options.index)) {
                    model.$index = options.index
                }
                var $placeholder = $("<div>").appendTo(options.container);
                var $result;
                ko.renderTemplate(this._template.get(0), model, {
                    afterRender: function(nodes) {
                        $result = $(nodes)
                    }
                }, $placeholder.get(0), "replaceNode");
                return $result
            },
            source: function() {
                return $(this._element).clone()
            },
            dispose: function() {
                this._template.remove()
            }
        });
        module.exports = KoTemplate
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/core/utils/locker.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var errors = __webpack_require__( /*! ../errors */ 19);
        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/themes_callback.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Callbacks = __webpack_require__( /*! ../core/utils/callbacks */ 21);
        module.exports = new Callbacks
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/framework/html/html_application.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ../../integration/jquery */ 46);
        var $ = __webpack_require__( /*! jquery */ 29),
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            window = __webpack_require__( /*! ../../core/utils/window */ 6).getWindow(),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13),
            Component = __webpack_require__( /*! ../../core/component */ 128),
            extendUtils = __webpack_require__( /*! ../../core/utils/extend */ 0),
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            errors = __webpack_require__( /*! ../errors */ 68),
            Application = __webpack_require__( /*! ../application */ 252).Application,
            ConditionalViewCacheDecorator = __webpack_require__( /*! ../view_cache */ 88).ConditionalViewCacheDecorator,
            html = __webpack_require__( /*! ./presets */ 152),
            CommandManager = __webpack_require__( /*! ./command_manager */ 255),
            ViewEngine = __webpack_require__( /*! ./view_engine */ 257).ViewEngine,
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14),
            viewPort = __webpack_require__( /*! ../../core/utils/view_port */ 66).value,
            initMobileViewportModule = __webpack_require__( /*! ../../mobile/init_mobile_viewport/init_mobile_viewport */ 242),
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            feedbackEvents = __webpack_require__( /*! ../../events/core/emitter.feedback */ 103),
            TransitionExecutorModule = __webpack_require__( /*! ../../animation/transition_executor/transition_executor */ 129),
            animationPresetsModule = __webpack_require__( /*! ../../animation/presets/presets */ 148),
            when = __webpack_require__( /*! ../../core/utils/deferred */ 7).when;
        __webpack_require__( /*! ./layout_controller */ 188);
        __webpack_require__( /*! ../../ui/themes */ 20);
        var VIEW_PORT_CLASSNAME = "dx-viewport",
            LAYOUT_CHANGE_ANIMATION_NAME = "layout-change";
        var HtmlApplication = Application.inherit({
            ctor: function(options) {
                options = options || {};
                this.callBase(options);
                this._$root = $(options.rootNode || domAdapter.getBody());
                this._initViewport(options.viewPort);
                if ("mobileApp" === this._applicationMode) {
                    initMobileViewportModule.initMobileViewport(options.viewPort)
                }
                this.device = options.device || devices.current();
                this.commandManager = options.commandManager || new CommandManager({
                    commandMapping: this.commandMapping
                });
                this._initTemplateContext();
                this.viewEngine = options.viewEngine || new ViewEngine({
                    $root: this._$root,
                    device: this.device,
                    templateCacheStorage: options.templateCacheStorage || window.localStorage,
                    templatesVersion: options.templatesVersion,
                    templateContext: this._templateContext
                });
                this.components.push(this.viewEngine);
                this._initMarkupFilters(this.viewEngine);
                this._layoutSet = options.layoutSet || html.layoutSets.default;
                this._animationSet = options.animationSet || html.animationSets.default;
                this._availableLayoutControllers = [];
                this._activeLayoutControllersStack = [];
                this.transitionExecutor = new TransitionExecutorModule.TransitionExecutor;
                this._initAnimations(this._animationSet)
            },
            _initAnimations: function(animationSet) {
                if (!animationSet) {
                    return
                }
                each(animationSet, function(name, configs) {
                    each(configs, function(index, config) {
                        animationPresetsModule.presets.registerPreset(name, config)
                    })
                });
                animationPresetsModule.presets.applyChanges()
            },
            _localizeMarkup: function($markup) {
                messageLocalization.localizeNode($markup)
            },
            _notifyIfBadMarkup: function($markup) {
                $markup.each(function() {
                    var html = $(this).html();
                    if (/href="#/.test(html)) {
                        errors.log("W3005", html)
                    }
                })
            },
            _initMarkupFilters: function(viewEngine) {
                var filters = [];
                filters.push(this._localizeMarkup);
                if ("mobileApp" === this._applicationMode) {
                    filters.push(this._notifyIfBadMarkup)
                }
                if (viewEngine.markupLoaded) {
                    viewEngine.markupLoaded.add(function(args) {
                        each(filters, function(_, filter) {
                            filter(args.markup)
                        })
                    })
                }
            },
            _createViewCache: function(options) {
                var result = this.callBase(options);
                if (!options.viewCache) {
                    result = new ConditionalViewCacheDecorator({
                        filter: function(key, viewInfo) {
                            return !viewInfo.viewTemplateInfo.disableCache
                        },
                        viewCache: result
                    })
                }
                return result
            },
            _initViewport: function() {
                this._$viewPort = this._getViewPort();
                viewPort(this._$viewPort)
            },
            _getViewPort: function() {
                var $viewPort = $("." + VIEW_PORT_CLASSNAME);
                if (!$viewPort.length) {
                    $viewPort = $("<div>").addClass(VIEW_PORT_CLASSNAME).appendTo(this._$root)
                }
                return $viewPort
            },
            _initTemplateContext: function() {
                this._templateContext = new Component({
                    orientation: devices.orientation()
                });
                devices.on("orientationChanged", function(args) {
                    this._templateContext.option("orientation", args.orientation)
                }.bind(this))
            },
            _showViewImpl: function(viewInfo, direction) {
                var that = this,
                    deferred = $.Deferred(),
                    result = deferred.promise(),
                    layoutController = viewInfo.layoutController;
                that._obtainViewLink(viewInfo);
                layoutController.showView(viewInfo, direction).done(function() {
                    that._activateLayoutController(layoutController, that._getTargetNode(viewInfo), direction).done(function() {
                        deferred.resolve()
                    })
                });
                feedbackEvents.lock(result);
                return result
            },
            _resolveLayoutController: function(viewInfo) {
                var args = {
                    viewInfo: viewInfo,
                    layoutController: null,
                    availableLayoutControllers: this._availableLayoutControllers
                };
                this._processEvent("resolveLayoutController", args, viewInfo.model);
                this._checkLayoutControllerIsInitialized(args.layoutController);
                return args.layoutController || this._resolveLayoutControllerImpl(viewInfo)
            },
            _checkLayoutControllerIsInitialized: function(layoutController) {
                if (layoutController) {
                    var isControllerInited = false;
                    each(this._layoutSet, function(_, controllerInfo) {
                        if (controllerInfo.controller === layoutController) {
                            isControllerInited = true;
                            return false
                        }
                    });
                    if (!isControllerInited) {
                        throw errors.Error("E3024")
                    }
                }
            },
            _ensureOneLayoutControllerFound: function(target, matches) {
                var toJSONInterceptor = function(key, value) {
                    if ("controller" === key) {
                        return "[controller]: { name:" + value.name + " }"
                    }
                    return value
                };
                if (!matches.length) {
                    errors.log("W3003", JSON.stringify(target, null, 4), JSON.stringify(this._availableLayoutControllers, toJSONInterceptor, 4));
                    throw errors.Error("E3011")
                }
                if (matches.length > 1) {
                    errors.log("W3004", JSON.stringify(target, null, 4), JSON.stringify(matches, toJSONInterceptor, 4));
                    throw errors.Error("E3012")
                }
            },
            _resolveLayoutControllerImpl: function(viewInfo) {
                var templateInfo = viewInfo.viewTemplateInfo || {},
                    navigateOptions = viewInfo.navigateOptions || {},
                    target = extendUtils.extend({
                        root: !viewInfo.canBack,
                        customResolveRequired: false,
                        pane: templateInfo.pane,
                        modal: void 0 !== navigateOptions.modal ? navigateOptions.modal : templateInfo.modal || false
                    }, devices.current());
                var matches = commonUtils.findBestMatches(target, this._availableLayoutControllers);
                this._ensureOneLayoutControllerFound(target, matches);
                return matches[0].controller
            },
            _onNavigatingBack: function(args) {
                this.callBase.apply(this, arguments);
                if (!args.cancel && !this.canBack() && this._activeLayoutControllersStack.length > 1) {
                    var previousActiveLayoutController = this._activeLayoutControllersStack[this._activeLayoutControllersStack.length - 2],
                        previousViewInfo = previousActiveLayoutController.activeViewInfo();
                    args.cancel = true;
                    this._activateLayoutController(previousActiveLayoutController, void 0, "backward");
                    this.navigationManager.currentItem(previousViewInfo.key)
                }
            },
            _activeLayoutController: function() {
                return this._activeLayoutControllersStack.length ? this._activeLayoutControllersStack[this._activeLayoutControllersStack.length - 1] : void 0
            },
            _getTargetNode: function(viewInfo) {
                var dxEvent = (viewInfo.navigateOptions || {}).event;
                return dxEvent ? $(dxEvent.target) : void 0
            },
            _activateLayoutController: function(layoutController, targetNode, direction) {
                var that = this,
                    previousLayoutController = that._activeLayoutController();
                if (previousLayoutController === layoutController) {
                    return $.Deferred().resolve().promise()
                }
                var d = $.Deferred();
                layoutController.ensureActive(targetNode).done(function(result) {
                    that._deactivatePreviousLayoutControllers(layoutController, direction, result).done(function() {
                        that._activeLayoutControllersStack.push(layoutController);
                        d.resolve()
                    })
                });
                return d.promise()
            },
            _deactivatePreviousLayoutControllers: function(layoutController, direction) {
                var that = this,
                    tasks = [],
                    controllerToDeactivate = that._activeLayoutControllersStack.pop();
                if (!controllerToDeactivate) {
                    return $.Deferred().resolve().promise()
                }
                if (layoutController.isOverlay) {
                    that._activeLayoutControllersStack.push(controllerToDeactivate);
                    tasks.push(controllerToDeactivate.disable())
                } else {
                    var transitionDeferred = $.Deferred(),
                        skipAnimation = false;
                    var getControllerDeactivator = function(controllerToDeactivate, d) {
                        return function() {
                            controllerToDeactivate.deactivate().done(function() {
                                d.resolve()
                            })
                        }
                    };
                    while (controllerToDeactivate && controllerToDeactivate !== layoutController) {
                        var d = $.Deferred();
                        if (controllerToDeactivate.isOverlay) {
                            skipAnimation = true
                        } else {
                            if (!skipAnimation) {
                                that.transitionExecutor.leave(controllerToDeactivate.element(), LAYOUT_CHANGE_ANIMATION_NAME, {
                                    direction: direction
                                })
                            }
                        }
                        transitionDeferred.promise().done(getControllerDeactivator(controllerToDeactivate, d));
                        tasks.push(d.promise());
                        controllerToDeactivate = that._activeLayoutControllersStack.pop()
                    }
                    if (skipAnimation) {
                        transitionDeferred.resolve()
                    } else {
                        that.transitionExecutor.enter(layoutController.element(), LAYOUT_CHANGE_ANIMATION_NAME, {
                            direction: direction
                        });
                        that.transitionExecutor.start().done(function() {
                            transitionDeferred.resolve()
                        })
                    }
                }
                return when.apply($, tasks)
            },
            init: function() {
                var that = this,
                    result = this.callBase();
                result.done(function() {
                    that._initLayoutControllers();
                    that.renderNavigation()
                });
                return result
            },
            _disposeView: function(viewInfo) {
                if (viewInfo.layoutController.disposeView) {
                    viewInfo.layoutController.disposeView(viewInfo)
                }
                this.callBase(viewInfo)
            },
            viewPort: function() {
                return this._$viewPort
            },
            _createViewInfo: function() {
                var viewInfo = this.callBase.apply(this, arguments),
                    templateInfo = this.getViewTemplateInfo(viewInfo.viewName);
                if (!templateInfo) {
                    throw errors.Error("E3013", "dxView", viewInfo.viewName)
                }
                viewInfo.viewTemplateInfo = templateInfo;
                viewInfo.layoutController = this._resolveLayoutController(viewInfo);
                return viewInfo
            },
            _createViewModel: function(viewInfo) {
                this.callBase(viewInfo);
                extendUtils.extendFromObject(viewInfo.model, viewInfo.viewTemplateInfo)
            },
            _initLayoutControllers: function() {
                var that = this;
                each(that._layoutSet, function(index, controllerInfo) {
                    var controller = controllerInfo.controller,
                        target = devices.current();
                    if (commonUtils.findBestMatches(target, [controllerInfo]).length) {
                        that._availableLayoutControllers.push(controllerInfo);
                        if (controller.init) {
                            controller.init({
                                app: that,
                                $viewPort: that._$viewPort,
                                navigationManager: that.navigationManager,
                                viewEngine: that.viewEngine,
                                templateContext: that._templateContext,
                                commandManager: that.commandManager
                            })
                        }
                        if (controller.on) {
                            controller.on("viewReleased", function(viewInfo) {
                                that._onViewReleased(viewInfo)
                            });
                            controller.on("viewHidden", function(viewInfo) {
                                that._onViewHidden(viewInfo)
                            });
                            controller.on("viewRendered", function(viewInfo) {
                                that._processEvent("viewRendered", {
                                    viewInfo: viewInfo
                                }, viewInfo.model)
                            });
                            controller.on("viewShowing", function(viewInfo, direction) {
                                that._processEvent("viewShowing", {
                                    viewInfo: viewInfo,
                                    direction: direction,
                                    params: viewInfo.routeData
                                }, viewInfo.model)
                            });
                            controller.on("viewShown", function(viewInfo, direction) {
                                that._processEvent("viewShown", {
                                    viewInfo: viewInfo,
                                    direction: direction,
                                    params: viewInfo.routeData
                                }, viewInfo.model)
                            })
                        }
                    }
                })
            },
            _onViewReleased: function(viewInfo) {
                this._releaseViewLink(viewInfo)
            },
            renderNavigation: function() {
                var that = this;
                each(that._availableLayoutControllers, function(index, controllerInfo) {
                    var controller = controllerInfo.controller;
                    if (controller.renderNavigation) {
                        controller.renderNavigation(that.navigation)
                    }
                })
            },
            getViewTemplate: function(viewName) {
                return this.viewEngine.getViewTemplate(viewName)
            },
            getViewTemplateInfo: function(viewName) {
                var viewComponent = this.viewEngine.getViewTemplateInfo(viewName);
                return viewComponent && viewComponent.option()
            },
            loadTemplates: function(source) {
                return this.viewEngine.loadTemplates(source)
            },
            templateContext: function() {
                return this._templateContext
            }
        });
        module.exports = HtmlApplication
    },
    /*!*******************************************************!*\
      !*** ./artifacts/transpiled/framework/application.js ***!
      \*******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ../integration/jquery */ 46);
        var BACK_COMMAND_TITLE, $ = __webpack_require__( /*! jquery */ 29),
            Class = __webpack_require__( /*! ../core/class */ 10),
            window = __webpack_require__( /*! ../core/utils/window */ 6).getWindow(),
            abstract = Class.abstract,
            Action = __webpack_require__( /*! ../core/action */ 81),
            commonUtils = __webpack_require__( /*! ../core/utils/common */ 4),
            typeUtils = __webpack_require__( /*! ../core/utils/type */ 1),
            iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 3),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            mergeCommands = __webpack_require__( /*! ./utils */ 122).utils.mergeCommands,
            createActionExecutors = __webpack_require__( /*! ./action_executors */ 253).createActionExecutors,
            Router = __webpack_require__( /*! ./router */ 150),
            NavigationManager = __webpack_require__( /*! ./navigation_manager */ 123),
            StateManager = __webpack_require__( /*! ./state_manager */ 184),
            dxCommand = __webpack_require__( /*! ./command */ 183),
            messageLocalization = __webpack_require__( /*! ../localization/message */ 14),
            CommandMapping = __webpack_require__( /*! ./command_mapping */ 187),
            ViewCache = __webpack_require__( /*! ./view_cache */ 88),
            EventsMixin = __webpack_require__( /*! ../core/events_mixin */ 54),
            sessionStorage = __webpack_require__( /*! ../core/utils/storage */ 158).sessionStorage,
            dataUtils = __webpack_require__( /*! ../data/utils */ 39),
            errors = __webpack_require__( /*! ./errors */ 68),
            when = __webpack_require__( /*! ../core/utils/deferred */ 7).when,
            INIT_IN_PROGRESS = "InProgress",
            INIT_COMPLETE = "Inited";
        var Application = Class.inherit({
            ctor: function(options) {
                options = options || {};
                this._options = options;
                this.namespace = options.namespace || window;
                this._applicationMode = options.mode ? options.mode : "mobileApp";
                this.components = [];
                BACK_COMMAND_TITLE = messageLocalization.localizeString("@Back");
                this.router = options.router || new Router;
                var navigationManagers = {
                    mobileApp: NavigationManager.StackBasedNavigationManager,
                    webSite: NavigationManager.HistoryBasedNavigationManager
                };
                this.navigationManager = options.navigationManager || new navigationManagers[this._applicationMode]({
                    keepPositionInStack: "keepHistory" === options.navigateToRootViewMode
                });
                this.navigationManager.on("navigating", this._onNavigating.bind(this));
                this.navigationManager.on("navigatingBack", this._onNavigatingBack.bind(this));
                this.navigationManager.on("navigated", this._onNavigated.bind(this));
                this.navigationManager.on("navigationCanceled", this._onNavigationCanceled.bind(this));
                this.stateManager = options.stateManager || new StateManager({
                    storage: options.stateStorage || sessionStorage()
                });
                this.stateManager.addStateSource(this.navigationManager);
                this.viewCache = this._createViewCache(options);
                this.commandMapping = this._createCommandMapping(options.commandMapping);
                this.createNavigation(options.navigation);
                this._isNavigating = false;
                this._viewLinksHash = {};
                this._removedViewInfos = [];
                Action.registerExecutor(createActionExecutors(this));
                this.components.push(this.router);
                this.components.push(this.navigationManager)
            },
            _createViewCache: function(options) {
                var result;
                if (options.viewCache) {
                    result = options.viewCache
                } else {
                    if (options.disableViewCache) {
                        result = new ViewCache.NullViewCache
                    } else {
                        result = new ViewCache.CapacityViewCacheDecorator({
                            size: options.viewCacheSize,
                            viewCache: new ViewCache
                        })
                    }
                }
                result.on("viewRemoved", function(e) {
                    this._releaseViewLink(e.viewInfo)
                }.bind(this));
                return result
            },
            _createCommandMapping: function(commandMapping) {
                var result = commandMapping;
                if (!(commandMapping instanceof CommandMapping)) {
                    result = new CommandMapping;
                    result.load(CommandMapping.defaultMapping || {}).load(commandMapping || {})
                }
                return result
            },
            createNavigation: function(navigationConfig) {
                this.navigation = this._createNavigationCommands(navigationConfig);
                this._mapNavigationCommands(this.navigation, this.commandMapping)
            },
            _createNavigationCommands: function(commandConfig) {
                if (!commandConfig) {
                    return []
                }
                var generatedIdCount = 0;
                return iteratorUtils.map(commandConfig, function(item) {
                    var command;
                    if (item instanceof dxCommand) {
                        command = item
                    } else {
                        command = new dxCommand(extend({
                            root: true
                        }, item))
                    }
                    if (!command.option("id")) {
                        command.option("id", "navigation_" + generatedIdCount++)
                    }
                    return command
                })
            },
            _mapNavigationCommands: function(navigationCommands, commandMapping) {
                var navigationCommandIds = iteratorUtils.map(navigationCommands, function(command) {
                    return command.option("id")
                });
                commandMapping.mapCommands("global-navigation", navigationCommandIds)
            },
            _callComponentMethod: function(methodName, args) {
                var tasks = [];
                iteratorUtils.each(this.components, function(index, component) {
                    if (component[methodName] && typeUtils.isFunction(component[methodName])) {
                        var result = component[methodName](args);
                        if (result && result.done) {
                            tasks.push(result)
                        }
                    }
                });
                return when.apply($, tasks)
            },
            init: function() {
                var that = this;
                that._initState = INIT_IN_PROGRESS;
                return that._callComponentMethod("init").done(function() {
                    that._initState = INIT_COMPLETE;
                    that._processEvent("initialized")
                }).fail(function(error) {
                    throw error || errors.Error("E3022")
                })
            },
            _onNavigatingBack: function(args) {
                this._processEvent("navigatingBack", args)
            },
            _onNavigating: function(args) {
                var that = this;
                if (that._isNavigating) {
                    that._pendingNavigationArgs = args;
                    args.cancel = true;
                    return
                } else {
                    that._isNavigating = true;
                    delete that._pendingNavigationArgs
                }
                var routeData = this.router.parse(args.uri);
                if (!routeData) {
                    throw errors.Error("E3001", args.uri)
                }
                var uri = this.router.format(routeData);
                if (args.uri !== uri && uri) {
                    args.cancel = true;
                    args.cancelReason = "redirect";
                    commonUtils.executeAsync(function() {
                        that.navigate(uri, args.options)
                    })
                } else {
                    that._processEvent("navigating", args)
                }
            },
            _onNavigated: function(args) {
                var resultDeferred, that = this,
                    direction = args.options.direction,
                    viewInfo = that._acquireViewInfo(args.item, args.options);
                if (!viewInfo.model) {
                    this._processEvent("beforeViewSetup", {
                        viewInfo: viewInfo
                    });
                    that._createViewModel(viewInfo);
                    that._createViewCommands(viewInfo);
                    this._processEvent("afterViewSetup", {
                        viewInfo: viewInfo
                    })
                }
                that._highlightCurrentNavigationCommand(viewInfo);
                resultDeferred = that._showView(viewInfo, direction).always(function() {
                    that._isNavigating = false;
                    var pendingArgs = that._pendingNavigationArgs;
                    if (pendingArgs) {
                        commonUtils.executeAsync(function() {
                            that.navigate(pendingArgs.uri, pendingArgs.options)
                        })
                    }
                });
                return resultDeferred
            },
            _isViewReadyToShow: function(viewInfo) {
                return !!viewInfo.model
            },
            _onNavigationCanceled: function(args) {
                var that = this;
                if (!that._pendingNavigationArgs || that._pendingNavigationArgs.uri !== args.uri) {
                    var currentItem = that.navigationManager.currentItem();
                    if (currentItem) {
                        commonUtils.executeAsync(function() {
                            var viewInfo = that._acquireViewInfo(currentItem, args.options);
                            that._highlightCurrentNavigationCommand(viewInfo, true)
                        })
                    }
                    that._isNavigating = false
                }
            },
            _disposeRemovedViews: function() {
                var that = this;
                iteratorUtils.each(that._viewLinksHash, function(key, link) {
                    if (!link.linkCount) {
                        that._disposeRemovedView(link.viewInfo);
                        delete that._viewLinksHash[key]
                    }
                });
                this._removedViewInfos.forEach(function(viewInfo) {
                    that._disposeRemovedView(viewInfo)
                });
                this._removedViewInfos = []
            },
            _disposeRemovedView: function(viewInfo) {
                var args = {
                    viewInfo: viewInfo
                };
                this._processEvent("viewDisposing", args, viewInfo.model);
                this._disposeView(viewInfo);
                this._processEvent("viewDisposed", args, viewInfo.model)
            },
            _onViewHidden: function(viewInfo) {
                var args = {
                    viewInfo: viewInfo
                };
                this._processEvent("viewHidden", args, args.viewInfo.model)
            },
            _disposeView: function(viewInfo) {
                var commands = viewInfo.commands || [];
                iteratorUtils.each(commands, function(index, command) {
                    command._dispose()
                })
            },
            _acquireViewInfo: function(navigationItem, navigateOptions) {
                var routeData = this.router.parse(navigationItem.uri),
                    viewInfoKey = this._getViewInfoKey(navigationItem, routeData),
                    viewInfo = this.viewCache.getView(viewInfoKey);
                if (!viewInfo) {
                    viewInfo = this._createViewInfo(navigationItem, navigateOptions);
                    this._obtainViewLink(viewInfo);
                    this.viewCache.setView(viewInfoKey, viewInfo)
                } else {
                    this._updateViewInfo(viewInfo, navigationItem, navigateOptions)
                }
                return viewInfo
            },
            _getViewInfoKey: function(navigationItem, routeData) {
                var args = {
                    key: navigationItem.key,
                    navigationItem: navigationItem,
                    routeData: routeData
                };
                this._processEvent("resolveViewCacheKey", args);
                return args.key
            },
            _processEvent: function(eventName, args, model) {
                this._callComponentMethod(eventName, args);
                this.fireEvent(eventName, args && [args]);
                var modelMethod = (model || {})[eventName];
                if (modelMethod) {
                    modelMethod.call(model, args)
                }
            },
            _updateViewInfo: function(viewInfo, navigationItem, navigateOptions) {
                var uri = navigationItem.uri,
                    routeData = this.router.parse(uri);
                viewInfo.viewName = routeData.view;
                viewInfo.routeData = routeData;
                viewInfo.uri = uri;
                viewInfo.navigateOptions = navigateOptions;
                viewInfo.canBack = this.canBack(navigateOptions.stack);
                viewInfo.previousViewInfo = this._getPreviousViewInfo(navigateOptions)
            },
            _createViewInfo: function(navigationItem, navigateOptions) {
                var uri = navigationItem.uri,
                    routeData = this.router.parse(uri),
                    viewInfo = {
                        key: this._getViewInfoKey(navigationItem, routeData)
                    };
                this._updateViewInfo(viewInfo, navigationItem, navigateOptions);
                return viewInfo
            },
            _createViewModel: function(viewInfo) {
                viewInfo.model = viewInfo.model || this._callViewCodeBehind(viewInfo)
            },
            _createViewCommands: function(viewInfo) {
                viewInfo.commands = viewInfo.model.commands || [];
                if (viewInfo.canBack && "webSite" !== this._applicationMode) {
                    this._appendBackCommand(viewInfo)
                }
            },
            _callViewCodeBehind: function(viewInfo) {
                var setupFunc = commonUtils.noop,
                    routeData = viewInfo.routeData;
                if (routeData.view in this.namespace) {
                    setupFunc = this.namespace[routeData.view]
                }
                return setupFunc.call(this.namespace, routeData, viewInfo) || {}
            },
            _appendBackCommand: function(viewInfo) {
                var commands = viewInfo.commands,
                    that = this,
                    backTitle = BACK_COMMAND_TITLE;
                if (that._options.useViewTitleAsBackText) {
                    backTitle = ((viewInfo.previousViewInfo || {}).model || {}).title || backTitle
                }
                var toMergeTo = [new dxCommand({
                    id: "back",
                    title: backTitle,
                    behavior: "back",
                    onExecute: function() {
                        that.back({
                            stack: viewInfo.navigateOptions.stack
                        })
                    },
                    icon: "arrowleft",
                    type: "back",
                    renderStage: that._options.useViewTitleAsBackText ? "onViewRendering" : "onViewShown"
                })];
                var result = mergeCommands(toMergeTo, commands);
                commands.length = 0;
                commands.push.apply(commands, result)
            },
            _showView: function(viewInfo, direction) {
                var that = this;
                var eventArgs = {
                    viewInfo: viewInfo,
                    direction: direction,
                    params: viewInfo.routeData
                };
                dataUtils.processRequestResultLock.obtain();
                return that._showViewImpl(eventArgs.viewInfo, eventArgs.direction).done(function() {
                    commonUtils.executeAsync(function() {
                        dataUtils.processRequestResultLock.release();
                        that._processEvent("viewShown", eventArgs, viewInfo.model);
                        that._disposeRemovedViews()
                    })
                })
            },
            _highlightCurrentNavigationCommand: function(viewInfo, forceUpdate) {
                var selectedCommand, that = this,
                    currentNavigationItemId = viewInfo.model && viewInfo.model.currentNavigationItemId;
                if (void 0 !== currentNavigationItemId) {
                    iteratorUtils.each(this.navigation, function(index, command) {
                        if (command.option("id") === currentNavigationItemId) {
                            selectedCommand = command;
                            return false
                        }
                    })
                }
                if (!selectedCommand) {
                    iteratorUtils.each(this.navigation, function(index, command) {
                        var commandUri = command.option("onExecute");
                        if (typeUtils.isString(commandUri)) {
                            commandUri = commandUri.replace(/^#+/, "");
                            if (commandUri === that.navigationManager.rootUri()) {
                                selectedCommand = command;
                                return false
                            }
                        }
                    })
                }
                iteratorUtils.each(this.navigation, function(index, command) {
                    if (forceUpdate && command === selectedCommand && command.option("highlighted")) {
                        command.fireEvent("optionChanged", [{
                            name: "highlighted",
                            value: true,
                            previousValue: true
                        }])
                    }
                    command.option("highlighted", command === selectedCommand)
                })
            },
            _showViewImpl: abstract,
            _obtainViewLink: function(viewInfo) {
                var key = viewInfo.key,
                    viewLink = this._viewLinksHash[key];
                if (!viewLink) {
                    this._viewLinksHash[key] = {
                        viewInfo: viewInfo,
                        linkCount: 1
                    }
                } else {
                    if (viewLink.viewInfo !== viewInfo) {
                        this._removedViewInfos.push(viewLink.viewInfo);
                        viewLink.viewInfo = viewInfo
                    }
                    this._viewLinksHash[key].linkCount++
                }
            },
            _releaseViewLink: function(viewInfo) {
                if (void 0 === this._viewLinksHash[viewInfo.key]) {
                    errors.log("W3001", viewInfo.key)
                }
                if (0 === this._viewLinksHash[viewInfo.key].linkCount) {
                    errors.log("W3002", viewInfo.key)
                }
                this._viewLinksHash[viewInfo.key].linkCount--
            },
            navigate: function(uri, options) {
                var that = this;
                if (typeUtils.isPlainObject(uri)) {
                    uri = that.router.format(uri);
                    if (false === uri) {
                        throw errors.Error("E3002")
                    }
                }
                if (!that._initState) {
                    that.init().done(function() {
                        that.restoreState();
                        that.navigate(uri, options)
                    })
                } else {
                    if (that._initState === INIT_COMPLETE) {
                        if (!that._isNavigating || uri) {
                            that.navigationManager.navigate(uri, options)
                        }
                    } else {
                        throw errors.Error("E3003")
                    }
                }
            },
            canBack: function(stackKey) {
                return this.navigationManager.canBack(stackKey)
            },
            _getPreviousViewInfo: function(navigateOptions) {
                var result, previousNavigationItem = this.navigationManager.previousItem(navigateOptions.stack);
                if (previousNavigationItem) {
                    var routeData = this.router.parse(previousNavigationItem.uri);
                    result = this.viewCache.getView(this._getViewInfoKey(previousNavigationItem, routeData))
                }
                return result
            },
            back: function(options) {
                this.navigationManager.back(options)
            },
            saveState: function() {
                this.stateManager.saveState()
            },
            restoreState: function() {
                this.stateManager.restoreState()
            },
            clearState: function() {
                this.stateManager.clearState()
            }
        }).include(EventsMixin);
        exports.Application = Application
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/framework/action_executors.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ../integration/jquery */ 46);
        var $ = __webpack_require__( /*! jquery */ 29),
            location = __webpack_require__( /*! ../core/dom_adapter */ 13).getLocation(),
            dataCoreUtils = __webpack_require__( /*! ../core/utils/data */ 23),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            isPlainObject = __webpack_require__( /*! ../core/utils/type */ 1).isPlainObject,
            map = __webpack_require__( /*! ../core/utils/iterator */ 3).map,
            Route = __webpack_require__( /*! ./router */ 150).Route;

        function prepareNavigateOptions(options, actionArguments) {
            if (actionArguments.args) {
                var sourceEventArguments = actionArguments.args[0];
                options.event = sourceEventArguments.event
            }
            if ("dxCommand" === (actionArguments.component || {}).NAME) {
                extend(options, actionArguments.component.option())
            }
        }

        function preventDefaultLinkBehavior(e) {
            if (!e) {
                return
            }
            var $targetElement = $(e.target);
            if ($targetElement.attr("href")) {
                e.preventDefault()
            }
        }
        var createActionExecutors = function(app) {
            return {
                routing: {
                    execute: function(e) {
                        var routeValues, uri, action = e.action,
                            options = {};
                        if (isPlainObject(action)) {
                            routeValues = action.routeValues;
                            if (routeValues && isPlainObject(routeValues)) {
                                options = action.options
                            } else {
                                routeValues = action
                            }
                            uri = app.router.format(routeValues);
                            prepareNavigateOptions(options, e);
                            preventDefaultLinkBehavior(options.event);
                            app.navigate(uri, options);
                            e.handled = true
                        }
                    }
                },
                hash: {
                    execute: function(e) {
                        if ("string" !== typeof e.action || "#" !== e.action.charAt(0)) {
                            return
                        }
                        var uriTemplate = e.action.substr(1),
                            args = e.args[0],
                            uri = uriTemplate;
                        var defaultEvaluate = function(expr) {
                            var getter = dataCoreUtils.compileGetter(expr),
                                model = e.args[0].model;
                            return getter(model)
                        };
                        var evaluate = args.evaluate || defaultEvaluate;
                        uri = uriTemplate.replace(/\{([^}]+)\}/g, function(entry, expr) {
                            expr = expr.trim();
                            if (expr.indexOf(",") > -1) {
                                expr = map(expr.split(","), function(item) {
                                    return item.trim()
                                })
                            }
                            var value = evaluate(expr);
                            if (void 0 === value) {
                                value = ""
                            }
                            value = Route.prototype.formatSegment(value);
                            return value
                        });
                        var options = {};
                        prepareNavigateOptions(options, e);
                        preventDefaultLinkBehavior(options.event);
                        app.navigate(uri, options);
                        e.handled = true
                    }
                },
                url: {
                    execute: function(e) {
                        if ("string" === typeof e.action && "#" !== e.action.charAt(0)) {
                            location.href = e.action
                        }
                    }
                }
            }
        };
        exports.createActionExecutors = createActionExecutors
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/framework/browser_adapters.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ../integration/jquery */ 46);
        var $ = __webpack_require__( /*! jquery */ 29),
            Class = __webpack_require__( /*! ../core/class */ 10),
            Callbacks = __webpack_require__( /*! ../core/utils/callbacks */ 21),
            window = __webpack_require__( /*! ../core/utils/window */ 6).getWindow(),
            queue = __webpack_require__( /*! ../core/utils/queue */ 182);
        var ROOT_PAGE_URL = "__root__",
            BUGGY_ANDROID_BUFFER_PAGE_URL = "__buffer__";
        var DefaultBrowserAdapter = Class.inherit({
            ctor: function(options) {
                options = options || {};
                this._window = options.window || window;
                this.popState = Callbacks();
                $(this._window).on("hashchange", this._onHashChange.bind(this));
                this._tasks = queue.create();
                this.canWorkInPureBrowser = true
            },
            replaceState: function(uri) {
                var that = this;
                return this._addTask(function() {
                    uri = that._normalizeUri(uri);
                    that._window.history.replaceState(null, null, "#" + uri);
                    that._currentTask.resolve()
                })
            },
            pushState: function(uri) {
                var that = this;
                return this._addTask(function() {
                    uri = that._normalizeUri(uri);
                    that._window.history.pushState(null, null, "#" + uri);
                    that._currentTask.resolve()
                })
            },
            createRootPage: function() {
                return this.replaceState(ROOT_PAGE_URL)
            },
            _onHashChange: function() {
                if (this._currentTask) {
                    this._currentTask.resolve()
                }
                this.popState.fire()
            },
            back: function() {
                var that = this;
                return this._addTask(function() {
                    that._window.history.back()
                })
            },
            getHash: function() {
                return this._normalizeUri(this._window.location.hash)
            },
            isRootPage: function() {
                return this.getHash() === ROOT_PAGE_URL
            },
            _normalizeUri: function(uri) {
                return (uri || "").replace(/^#+/, "")
            },
            _addTask: function(task) {
                var that = this,
                    d = $.Deferred();
                this._tasks.add(function() {
                    that._currentTask = d;
                    task();
                    return d
                });
                return d.promise()
            }
        });
        var OldBrowserAdapter = DefaultBrowserAdapter.inherit({
            ctor: function() {
                this._innerEventCount = 0;
                this.callBase.apply(this, arguments);
                this._skipNextEvent = false
            },
            replaceState: function(uri) {
                var that = this;
                uri = that._normalizeUri(uri);
                if (that.getHash() !== uri) {
                    that._addTask(function() {
                        that._skipNextEvent = true;
                        that._window.history.back()
                    });
                    return that._addTask(function() {
                        that._skipNextEvent = true;
                        that._window.location.hash = uri
                    })
                }
                return $.Deferred().resolve().promise()
            },
            pushState: function(uri) {
                var that = this;
                uri = this._normalizeUri(uri);
                if (this.getHash() !== uri) {
                    return that._addTask(function() {
                        that._skipNextEvent = true;
                        that._window.location.hash = uri
                    })
                }
                return $.Deferred().resolve().promise()
            },
            createRootPage: function() {
                return this.pushState(ROOT_PAGE_URL)
            },
            _onHashChange: function() {
                var currentTask = this._currentTask;
                this._currentTask = null;
                if (this._skipNextEvent) {
                    this._skipNextEvent = false
                } else {
                    this.popState.fire()
                }
                if (currentTask) {
                    currentTask.resolve()
                }
            }
        });
        var BuggyAndroidBrowserAdapter = OldBrowserAdapter.inherit({
            createRootPage: function() {
                this.pushState(BUGGY_ANDROID_BUFFER_PAGE_URL);
                return this.callBase()
            }
        });
        var HistorylessBrowserAdapter = DefaultBrowserAdapter.inherit({
            ctor: function(options) {
                options = options || {};
                this._window = options.window || window;
                this.popState = Callbacks();
                $(this._window).on("dxback", this._onHashChange.bind(this));
                this._currentHash = this._window.location.hash
            },
            replaceState: function(uri) {
                this._currentHash = this._normalizeUri(uri);
                return $.Deferred().resolve().promise()
            },
            pushState: function(uri) {
                return this.replaceState(uri)
            },
            createRootPage: function() {
                return this.replaceState(ROOT_PAGE_URL)
            },
            getHash: function() {
                return this._normalizeUri(this._currentHash)
            },
            back: function() {
                return this.replaceState(ROOT_PAGE_URL)
            },
            _onHashChange: function() {
                var promise = this.back();
                this.popState.fire();
                return promise
            }
        });
        var BuggyCordovaWP81BrowserAdapter = DefaultBrowserAdapter.inherit({
            ctor: function(options) {
                this.callBase(options);
                this.canWorkInPureBrowser = false
            }
        });
        exports.DefaultBrowserAdapter = DefaultBrowserAdapter;
        exports.OldBrowserAdapter = OldBrowserAdapter;
        exports.BuggyAndroidBrowserAdapter = BuggyAndroidBrowserAdapter;
        exports.HistorylessBrowserAdapter = HistorylessBrowserAdapter;
        exports.BuggyCordovaWP81BrowserAdapter = BuggyCordovaWP81BrowserAdapter
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/framework/html/command_manager.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ../../integration/jquery */ 46);
        var $ = __webpack_require__( /*! jquery */ 29),
            Class = __webpack_require__( /*! ../../core/class */ 10),
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            iteratorUtils = __webpack_require__( /*! ../../core/utils/iterator */ 3),
            errors = __webpack_require__( /*! ../errors */ 68),
            CommandMapping = __webpack_require__( /*! ../command_mapping */ 187),
            commandToDXWidgetAdapters = __webpack_require__( /*! ./widget_command_adapters */ 256),
            when = __webpack_require__( /*! ../../core/utils/deferred */ 7).when;
        __webpack_require__( /*! ../command */ 183);
        __webpack_require__( /*! ./command_container */ 185);
        var CommandManager = Class.inherit({
            ctor: function(options) {
                options = options || {};
                this.defaultWidgetAdapter = options.defaultWidgetAdapter || this._getDefaultWidgetAdapter();
                this.commandMapping = options.commandMapping || new CommandMapping
            },
            _getDefaultWidgetAdapter: function() {
                return {
                    addCommand: noop,
                    clearContainer: noop
                }
            },
            _getContainerAdapter: function($container) {
                var componentNames = $container.data("dxComponents"),
                    adapters = commandToDXWidgetAdapters;
                if (componentNames) {
                    for (var index in componentNames) {
                        var widgetName = componentNames[index];
                        if (widgetName in adapters) {
                            return adapters[widgetName]
                        }
                    }
                }
                return this.defaultWidgetAdapter
            },
            findCommands: function($items) {
                var items = $items.find(".dx-command").add($items.filter(".dx-command"));
                var result = [].slice.call(items).map(function(element) {
                    return $(element).dxCommand("instance")
                });
                return result
            },
            findCommandContainers: function($markup) {
                var result = [].slice.call($markup.find(".dx-command-container")).map(function(element) {
                    return $(element).dxCommandContainer("instance")
                });
                return result
            },
            _checkCommandId: function(id, command) {
                if (null === id) {
                    throw errors.Error("E3010", command.$element().get(0).outerHTML)
                }
            },
            renderCommandsToContainers: function(commands, containers) {
                var that = this,
                    commandHash = {},
                    commandIds = [],
                    deferreds = [];
                iteratorUtils.each(commands, function(i, command) {
                    var id = command.option("id");
                    that._checkCommandId(id, command);
                    commandIds.push(id);
                    commandHash[id] = command
                });
                that.commandMapping.checkCommandsExist(commandIds);
                iteratorUtils.each(containers, function(k, container) {
                    var commandInfos = [];
                    iteratorUtils.each(commandHash, function(id, command) {
                        var commandId = id;
                        var commandOptions = that.commandMapping.getCommandMappingForContainer(commandId, container.option("id"));
                        if (commandOptions) {
                            commandInfos.push({
                                command: command,
                                options: commandOptions
                            })
                        }
                    });
                    if (commandInfos.length) {
                        var deferred = that._attachCommandsToContainer(container.element(), commandInfos);
                        if (deferred) {
                            deferreds.push(deferred)
                        }
                    }
                });
                return when.apply($, deferreds)
            },
            clearContainer: function(container) {
                var $container = container.element(),
                    adapter = this._getContainerAdapter($container);
                adapter.clearContainer($container)
            },
            _arrangeCommandsToContainers: function(commands, containers) {
                errors.log("W0002", "CommandManager", "_arrangeCommandsToContainers", "14.1", "Use the 'renderCommandsToContainers' method instead.");
                this.renderCommandsToContainers(commands, containers)
            },
            _attachCommandsToContainer: function($container, commandInfos) {
                var result, adapter = this._getContainerAdapter($container);
                if (adapter.beginUpdate) {
                    adapter.beginUpdate($container)
                }
                iteratorUtils.each(commandInfos, function(index, commandInfo) {
                    adapter.addCommand($container, commandInfo.command, commandInfo.options)
                });
                if (adapter.endUpdate) {
                    result = adapter.endUpdate($container)
                }
                return result
            }
        });
        module.exports = CommandManager
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/framework/html/widget_command_adapters.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ../../core/class */ 10),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            inArray = __webpack_require__( /*! ../../core/utils/array */ 11).inArray,
            iteratorUtils = __webpack_require__( /*! ../../core/utils/iterator */ 3),
            commandToContainer = __webpack_require__( /*! ../utils */ 122).utils.commandToContainer,
            fx = __webpack_require__( /*! ../../animation/fx */ 31),
            TransitionExecutorModule = __webpack_require__( /*! ../../animation/transition_executor/transition_executor */ 129),
            DX_COMMAND_TO_WIDGET_ADAPTER = "dxCommandToWidgetAdapter";
        var WidgetItemWrapperBase = Class.inherit({
            ctor: function(command, containerOptions) {
                this.command = command;
                this.widgetItem = this._createWidgetItem(command, containerOptions)
            },
            _createWidgetItem: function(command, containerOptions) {
                var result, itemOptions = extend({}, containerOptions, command.option()),
                    executeCommandCallback = function(e) {
                        command.execute(e)
                    };
                itemOptions.text = commandToContainer.resolveTextValue(command, containerOptions);
                itemOptions.icon = commandToContainer.resolveIconValue(command, containerOptions);
                itemOptions.type = commandToContainer.resolvePropertyValue(command, containerOptions, "type");
                itemOptions.location = commandToContainer.resolvePropertyValue(command, containerOptions, "location");
                itemOptions.locateInMenu = commandToContainer.resolvePropertyValue(command, containerOptions, "locateInMenu");
                itemOptions.showText = commandToContainer.resolvePropertyValue(command, containerOptions, "showText");
                result = this._createWidgetItemCore(itemOptions, executeCommandCallback);
                result.command = command;
                return result
            },
            _createWidgetItemCore: function(itemOptions, executeCommandCallback) {
                return itemOptions
            },
            dispose: function() {
                delete this.command;
                delete this.widgetItem
            }
        });
        var WidgetAdapterBase = Class.inherit({
            ctor: function($widgetElement) {
                this._commandToWidgetItemOptionNames = {};
                this.$widgetElement = $widgetElement;
                this.$widgetElement.data(DX_COMMAND_TO_WIDGET_ADAPTER, this);
                this.widget = this._getWidgetByElement($widgetElement);
                this._widgetWidgetContentReadyHandler = this._onWidgetContentReady.bind(this);
                this._widgetWidgetItemRenderedHandler = this._onWidgetItemRendered.bind(this);
                this._widgetDisposingHandler = this._onWidgetDisposing.bind(this);
                this.widget.on("itemRendered", this._widgetWidgetItemRenderedHandler);
                this.widget.on("contentReady", this._widgetWidgetContentReadyHandler);
                this.widget.on("disposing", this._widgetDisposingHandler);
                this.itemWrappers = [];
                this._transitionExecutor = new TransitionExecutorModule.TransitionExecutor
            },
            addCommand: function(command, containerOptions) {
                var itemWrapper = this._createItemWrapper(command, containerOptions);
                this.itemWrappers.push(itemWrapper);
                this._addItemToWidget(itemWrapper);
                this._commandChangedHandler = this._onCommandChanged.bind(this);
                itemWrapper.command.on("optionChanged", this._commandChangedHandler)
            },
            beginUpdate: function() {
                this.widget.beginUpdate()
            },
            endUpdate: function() {
                this.widget.endUpdate();
                return this.animationDeferred
            },
            _onWidgetItemRendered: function(e) {
                if (e.itemData.isJustAdded && e.itemData.command && e.itemData.command.option("visible") && this._commandRenderedAnimation) {
                    this._transitionExecutor.enter(e.itemElement, this._commandRenderedAnimation)
                }
                delete e.itemData.isJustAdded
            },
            _onWidgetContentReady: function(e) {
                this.animationDeferred = this._transitionExecutor.start()
            },
            _onWidgetDisposing: function() {
                this.dispose(true)
            },
            _setWidgetItemOption: function(optionName, optionValue, itemCommand) {
                var items = this.widget.option("items"),
                    itemIndex = inArray(itemCommand, iteratorUtils.map(items, function(item) {
                        return item.command || {}
                    }));
                if (itemIndex > -1) {
                    var optionPath = "items[" + itemIndex + "].";
                    if (!this._requireWidgetRefresh(optionName) && this.widget.option("items[" + itemIndex + "]").options) {
                        optionPath += "options."
                    }
                    optionPath += this._commandToWidgetItemOptionNames[optionName] || optionName;
                    this.widget.option(optionPath, optionValue)
                }
            },
            _requireWidgetRefresh: function(optionName) {
                return "visible" === optionName || "locateInMenu" === optionName || "location" === optionName
            },
            _onCommandChanged: function(args) {
                if ("highlighted" === args.name || args.component.isOptionDeprecated(args.name)) {
                    return
                }
                this._setWidgetItemOption(args.name, args.value, args.component)
            },
            _addItemToWidget: function(itemWrapper) {
                var items = this.widget.option("items");
                items.push(itemWrapper.widgetItem);
                if (this.widget.$element().is(":visible")) {
                    itemWrapper.widgetItem.isJustAdded = true
                }
                this.widget.option("items", items)
            },
            refresh: function() {
                var items = this.widget.option("items");
                this.widget.option("items", items)
            },
            clear: function(widgetDisposing) {
                var that = this;
                iteratorUtils.each(that.itemWrappers, function(index, itemWrapper) {
                    itemWrapper.command.off("optionChanged", that._commandChangedHandler);
                    itemWrapper.dispose()
                });
                this.itemWrappers.length = 0;
                if (!widgetDisposing) {
                    this._clearWidgetItems()
                }
            },
            _clearWidgetItems: function() {
                this.widget.option("items", [])
            },
            dispose: function(widgetDisposing) {
                this.clear(widgetDisposing);
                if (this.widget) {
                    this.widget.off("itemRendered", this._widgetWidgetItemRenderedHandler);
                    this.widget.off("contentReady", this._widgetContentReadyHandler);
                    this.widget.off("disposing", this._widgetDisposingHandler);
                    this.$widgetElement.removeData(DX_COMMAND_TO_WIDGET_ADAPTER);
                    delete this.widget;
                    delete this.$widgetElement
                }
            }
        });
        var CommandToWidgetAdapter = Class.inherit({
            ctor: function(createAdapter) {
                this.createAdapter = createAdapter
            },
            _getWidgetAdapter: function($container) {
                var widgetAdapter = $container.data(DX_COMMAND_TO_WIDGET_ADAPTER);
                if (!widgetAdapter) {
                    widgetAdapter = this.createAdapter($container)
                }
                return widgetAdapter
            },
            addCommand: function($container, command, containerOptions) {
                var widgetAdapter = this._getWidgetAdapter($container);
                widgetAdapter.addCommand(command, containerOptions)
            },
            clearContainer: function($container) {
                var widgetAdapter = this._getWidgetAdapter($container);
                widgetAdapter.clear()
            },
            beginUpdate: function($container) {
                var widgetAdapter = this._getWidgetAdapter($container);
                widgetAdapter.beginUpdate()
            },
            endUpdate: function($container) {
                var widgetAdapter = this._getWidgetAdapter($container);
                return widgetAdapter.endUpdate()
            }
        });
        var dxToolbarItemWrapper = WidgetItemWrapperBase.inherit({
            _createWidgetItemCore: function(itemOptions, executeCommandCallback) {
                var widgetItem;
                itemOptions.onClick = executeCommandCallback;
                if ("menu" === itemOptions.location || "always" === itemOptions.locateInMenu) {
                    widgetItem = itemOptions;
                    widgetItem.isAction = true
                } else {
                    widgetItem = {
                        locateInMenu: itemOptions.locateInMenu,
                        location: itemOptions.location,
                        visible: itemOptions.visible,
                        options: itemOptions,
                        widget: "dxButton"
                    };
                    if ("inMenu" === itemOptions.showText) {
                        widgetItem.showText = itemOptions.showText
                    }
                    itemOptions.visible = true;
                    delete itemOptions.location
                }
                return widgetItem
            }
        });
        var dxToolbarAdapter = WidgetAdapterBase.inherit({
            ctor: function($widgetElement) {
                this.callBase($widgetElement);
                this._commandToWidgetItemOptionNames = {
                    title: "text"
                };
                if ("topToolbar" === this.widget.option("renderAs")) {
                    this._commandRenderedAnimation = "command-rendered-top"
                } else {
                    this._commandRenderedAnimation = "command-rendered-bottom"
                }
            },
            _getWidgetByElement: function($element) {
                return $element.dxToolbar("instance")
            },
            _createItemWrapper: function(command, containerOptions) {
                return new dxToolbarItemWrapper(command, containerOptions)
            },
            addCommand: function(command, containerOptions) {
                this.widget.option("visible", true);
                this.callBase(command, containerOptions)
            }
        });
        var dxListItemWrapper = WidgetItemWrapperBase.inherit({
            _createWidgetItemCore: function(itemOptions, executeCommandCallback) {
                itemOptions.title = itemOptions.text;
                itemOptions.onClick = executeCommandCallback;
                return itemOptions
            }
        });
        var dxListAdapter = WidgetAdapterBase.inherit({
            _createItemWrapper: function(command, containerOptions) {
                return new dxListItemWrapper(command, containerOptions)
            },
            _getWidgetByElement: function($element) {
                return $element.dxList("instance")
            }
        });
        var dxNavBarItemWrapper = WidgetItemWrapperBase.inherit({});
        var dxNavBarAdapter = WidgetAdapterBase.inherit({
            ctor: function($widgetElement) {
                this.callBase($widgetElement);
                this._commandToWidgetItemOptionNames = {
                    title: "text"
                };
                this.widget.option("onItemClick", this._onNavBarItemClick.bind(this))
            },
            _onNavBarItemClick: function(e) {
                var items = this.widget.option("items");
                for (var i = items.length; --i;) {
                    items[i].command.option("highlighted", false)
                }
                e.itemData.command.execute(e)
            },
            _getWidgetByElement: function($element) {
                return $element.dxNavBar("instance")
            },
            _createItemWrapper: function(command, containerOptions) {
                return new dxNavBarItemWrapper(command, containerOptions)
            },
            addCommand: function(command, containerOptions) {
                this.callBase(command, containerOptions);
                this._updateSelectedIndex()
            },
            _onCommandChanged: function(args) {
                var optionName = args.name,
                    newValue = args.value;
                if ("highlighted" === optionName && newValue) {
                    this._updateSelectedIndex()
                }
                this.callBase(args)
            },
            _updateSelectedIndex: function() {
                var items = this.widget.option("items");
                for (var i = 0, itemsCount = items.length; i < itemsCount; i++) {
                    var command = items[i].command;
                    if (command && command.option("highlighted")) {
                        this.widget.option("selectedIndex", i);
                        break
                    }
                }
            }
        });
        var dxPivotItemWrapper = WidgetItemWrapperBase.inherit({
            _createWidgetItemCore: function(itemOptions, executeCommandCallback) {
                itemOptions.title = itemOptions.text;
                return itemOptions
            }
        });
        var dxPivotAdapter = WidgetAdapterBase.inherit({
            ctor: function($widgetElement) {
                this.callBase($widgetElement);
                this.widget.option("onSelectionChanged", this._onPivotSelectionChange.bind(this))
            },
            _onPivotSelectionChange: function(e) {
                if (e.addedItems.length && e.removedItems.length && e.addedItems[0] && e.addedItems[0].command) {
                    e.addedItems[0].command.execute(e)
                }
            },
            _getWidgetByElement: function($element) {
                return $element.dxPivot("instance")
            },
            _createItemWrapper: function(command, containerOptions) {
                return new dxPivotItemWrapper(command, containerOptions)
            },
            addCommand: function(command, containerOptions) {
                this.callBase(command, containerOptions);
                this._updateSelectedIndex()
            },
            _onCommandChanged: function(args) {
                var optionName = args.name,
                    newValue = args.value;
                if ("visible" === optionName) {
                    this._reRenderPivot()
                } else {
                    if ("highlighted" === optionName && newValue) {
                        this._updateSelectedIndex()
                    }
                }
                this.callBase(args)
            },
            _addItemToWidget: function(itemWrapper) {
                if (itemWrapper.command.option("visible")) {
                    this.callBase(itemWrapper)
                }
            },
            _updateSelectedIndex: function() {
                var pivot = this.widget,
                    items = pivot.option("items") || [];
                fx.off = true;
                for (var i = 0, itemsCount = items.length; i < itemsCount; i++) {
                    var command = items[i].command;
                    if (command && command.option("highlighted")) {
                        pivot.option("selectedIndex", i);
                        break
                    }
                }
                fx.off = false
            },
            _reRenderPivot: function() {
                var that = this;
                that.widget.option("items", []);
                iteratorUtils.each(that.itemWrappers, function(index, itemWrapper) {
                    if (itemWrapper.command.option("visible")) {
                        that._addItemToWidget(itemWrapper)
                    }
                });
                that.refresh();
                that._updateSelectedIndex()
            }
        });
        var dxSlideOutItemWrapper = WidgetItemWrapperBase.inherit({});
        var dxSlideOutAdapter = WidgetAdapterBase.inherit({
            ctor: function($widgetElement) {
                this.callBase($widgetElement);
                this._commandToWidgetItemOptionNames = {
                    title: "text"
                };
                this.widget.option("onItemClick", this._onSlideOutItemClick.bind(this))
            },
            _onSlideOutItemClick: function(e) {
                e.itemData.command.execute(e)
            },
            _getWidgetByElement: function($element) {
                return $element.dxSlideOut("instance")
            },
            _createItemWrapper: function(command, containerOptions) {
                return new dxSlideOutItemWrapper(command, containerOptions)
            },
            _updateSelectedIndex: function() {
                var items = this.widget.option("items") || [];
                for (var i = 0, itemsCount = items.length; i < itemsCount; i++) {
                    var command = items[i].command;
                    if (command && command.option("highlighted")) {
                        this.widget.option("selectedIndex", i);
                        break
                    }
                }
            },
            addCommand: function(command, containerOptions) {
                this.callBase(command, containerOptions);
                this._updateSelectedIndex()
            },
            _onCommandChanged: function(args) {
                var optionName = args.name,
                    newValue = args.value;
                if ("highlighted" === optionName && newValue) {
                    this._updateSelectedIndex()
                }
                this.callBase(args)
            }
        });
        exports.dxToolbar = new CommandToWidgetAdapter(function($widgetElement) {
            return new dxToolbarAdapter($widgetElement)
        });
        exports.dxList = new CommandToWidgetAdapter(function($widgetElement) {
            return new dxListAdapter($widgetElement)
        });
        exports.dxNavBar = new CommandToWidgetAdapter(function($widgetElement) {
            return new dxNavBarAdapter($widgetElement)
        });
        exports.dxPivot = new CommandToWidgetAdapter(function($widgetElement) {
            return new dxPivotAdapter($widgetElement)
        });
        exports.dxSlideOut = new CommandToWidgetAdapter(function($widgetElement) {
            return new dxSlideOutAdapter($widgetElement)
        });
        exports.WidgetItemWrapperBase = WidgetItemWrapperBase;
        exports.WidgetAdapterBase = WidgetAdapterBase
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/framework/html/view_engine.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ../../integration/jquery */ 46);
        var $ = __webpack_require__( /*! jquery */ 29),
            version = __webpack_require__( /*! ../../core/version */ 132),
            window = __webpack_require__( /*! ../../core/utils/window */ 6).getWindow(),
            Class = __webpack_require__( /*! ../../core/class */ 10),
            Callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 21),
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            inArray = __webpack_require__( /*! ../../core/utils/array */ 11).inArray,
            errors = __webpack_require__( /*! ../errors */ 68),
            domUtils = __webpack_require__( /*! ../../core/utils/dom */ 12),
            when = __webpack_require__( /*! ../../core/utils/deferred */ 7).when,
            ajax = __webpack_require__( /*! ../../core/utils/ajax */ 76),
            _VIEW_ROLE = "dxView",
            _LAYOUT_ROLE = "dxLayout",
            MARKUP_TEMPLATE_MARKER = "MarkupTemplate:";
        __webpack_require__( /*! ./view_engine_components */ 69);
        var ViewEngine = Class.inherit({
            ctor: function(options) {
                options = options || {};
                this.$root = options.$root;
                this.device = options.device || {};
                this.dataOptionsAttributeName = options.dataOptionsAttributeName || "data-options";
                this._templateMap = {};
                this._pendingViewContainer = null;
                this.markupLoaded = Callbacks();
                this._templateContext = options.templateContext;
                this._$skippedMarkup = $();
                if (void 0 !== options.templatesVersion && options.templateCacheStorage && this._isReleaseVersion()) {
                    this._templateCacheEnabled = true;
                    this._templatesVersion = "v_" + options.templatesVersion;
                    this._templateCacheStorage = options.templateCacheStorage;
                    this._templateCacheKey = "dxTemplateCache_" + version + "_" + JSON.stringify(this.device)
                }
            },
            _isReleaseVersion: function() {
                return !/http:\/\/localhost/.test(window.location.href)
            },
            _enumerateTemplates: function(processFn) {
                var that = this;
                each(that._templateMap, function(name, templatesByRoleMap) {
                    each(templatesByRoleMap, function(role, templates) {
                        each(templates, function(index, template) {
                            processFn(template)
                        })
                    })
                })
            },
            _findComponent: function(name, role) {
                var components = (this._templateMap[name] || {})[role] || [],
                    filter = this._templateContext && this._templateContext.option() || {};
                components = this._filterTemplates(filter, components);
                this._checkMatchedTemplates(components);
                return components[0]
            },
            _findTemplate: function(name, role) {
                var component = this._findComponent(name, role);
                if (!component) {
                    this._clearCache();
                    throw errors.Error("E3013", role, name)
                }
                var $result, $template = component.element();
                if (!component._isStaticComponentsCreated) {
                    domUtils.createComponents($template, ["dxContent", "dxContentPlaceholder", "dxTransition"]);
                    component._isStaticComponentsCreated = true
                }
                $result = $template.clone().removeClass("dx-hidden");
                return $result
            },
            _clearCache: function() {
                if (this._templateCacheEnabled) {
                    this._templateCacheStorage.removeItem(this._templateCacheKey)
                }
            },
            _loadTemplatesFromMarkupCore: function($markup) {
                var that = this;
                if ($markup.find("[data-dx-role]").length) {
                    throw errors.Error("E3019")
                }
                that.markupLoaded.fire({
                    markup: $markup
                });
                var components = domUtils.createComponents($markup, [_VIEW_ROLE, _LAYOUT_ROLE]);
                each(components, function(index, component) {
                    var $element = component.element();
                    $element.addClass("dx-hidden");
                    that._registerTemplateComponent(component);
                    component.element().detach()
                });
                var $skipped = $markup.filter("script");
                $skipped.appendTo(that.$root);
                that._$skippedMarkup = that._$skippedMarkup.add($skipped)
            },
            _registerTemplateComponent: function(component) {
                var role = component.NAME,
                    options = component.option(),
                    templateName = options.name,
                    componentsByRoleMap = this._templateMap[templateName] || {};
                componentsByRoleMap[role] = componentsByRoleMap[role] || [];
                componentsByRoleMap[role].push(component);
                this._templateMap[templateName] = componentsByRoleMap
            },
            _applyPartialViews: function($render) {
                var that = this;
                domUtils.createComponents($render, ["dxViewPlaceholder"]);
                each($render.find(".dx-view-placeholder"), function() {
                    var $partialPlaceholder = $(this);
                    if ($partialPlaceholder.children().length) {
                        return
                    }
                    var viewName = $partialPlaceholder.data("dxViewPlaceholder").option("viewName"),
                        $view = that._findTemplate(viewName, _VIEW_ROLE);
                    that._applyPartialViews($view);
                    $partialPlaceholder.append($view);
                    $view.removeClass("dx-hidden")
                })
            },
            _ajaxImpl: function() {
                return ajax.sendRequest.apply($, arguments)
            },
            _loadTemplatesFromURL: function(url) {
                var that = this,
                    winPhonePrefix = this._getWinPhonePrefix(),
                    deferred = $.Deferred();
                url = winPhonePrefix + url;
                this._ajaxImpl({
                    url: url,
                    dataType: "html"
                }).done(function(data) {
                    that._loadTemplatesFromMarkupCore(domUtils.createMarkupFromString(data));
                    deferred.resolve()
                }).fail(function(jqXHR, textStatus, errorThrown) {
                    var error = errors.Error("E3021", url, errorThrown);
                    deferred.reject(error)
                });
                return deferred.promise()
            },
            _getWinPhonePrefix: function() {
                if (window.location.protocol.indexOf("wmapp") >= 0) {
                    return window.location.protocol + "www/"
                }
                return ""
            },
            _loadExternalTemplates: function() {
                var tasks = [],
                    that = this;
                $("head").find("link[rel='dx-template']").each(function(index, link) {
                    var task = that._loadTemplatesFromURL($(link).attr("href"));
                    tasks.push(task)
                });
                return when.apply($, tasks)
            },
            _processTemplates: function() {
                var that = this;
                each(that._templateMap, function(name, templatesByRoleMap) {
                    each(templatesByRoleMap, function(role, templates) {
                        that._filterTemplatesByDevice(templates)
                    })
                });
                that._enumerateTemplates(function(template) {
                    that._applyPartialViews(template.element())
                })
            },
            _filterTemplatesByDevice: function(components) {
                var filteredComponents = this._filterTemplates(this.device, components);
                each(components, function(index, component) {
                    if (inArray(component, filteredComponents) < 0) {
                        component.element().remove()
                    }
                });
                components.length = 0;
                components.push.apply(components, filteredComponents)
            },
            _filterTemplates: function(filter, components) {
                return commonUtils.findBestMatches(filter, components, function(component) {
                    return component.option()
                })
            },
            _checkMatchedTemplates: function(bestMatches) {
                if (bestMatches.length > 1) {
                    var message = "";
                    each(bestMatches, function(index, match) {
                        message += match.element().attr("data-options") + "\r\n"
                    });
                    throw errors.Error("E3020", message, JSON.stringify(this.device))
                }
            },
            _wrapViewDefaultContent: function($viewTemplate) {
                $viewTemplate.wrapInner('<div class="dx-full-height"></div>');
                $viewTemplate.children().eq(0).dxContent({
                    targetPlaceholder: "content"
                })
            },
            _initDefaultLayout: function() {
                this._$defaultLayoutTemplate = $('<div class="dx-full-height" data-options="dxLayout : { name: \'default\' } "> \n    <div class="dx-full-height" data-options="dxContentPlaceholder : { name: \'content\' } " ></div> \n</div>');
                domUtils.createComponents(this._$defaultLayoutTemplate)
            },
            _getDefaultLayoutTemplate: function() {
                return this._$defaultLayoutTemplate.clone()
            },
            applyLayout: function($view, $layout) {
                if (void 0 === $layout || 0 === $layout.length) {
                    $layout = this._getDefaultLayoutTemplate()
                }
                if (0 === $view.children(".dx-content").length) {
                    this._wrapViewDefaultContent($view)
                }
                var $toMerge = $().add($layout).add($view);
                var $placeholderContents = $toMerge.find(".dx-content");
                each($placeholderContents, function() {
                    var $placeholderContent = $(this);
                    var placeholderId = $placeholderContent.attr("data-dx-target-placeholder-id");
                    var $placeholder = $toMerge.find(".dx-content-placeholder-" + placeholderId);
                    $placeholder.empty();
                    $placeholder.append($placeholderContent)
                });
                for (var i = $placeholderContents.length; i >= 0; i--) {
                    var $item = $placeholderContents.eq(i);
                    if (!$item.is(".dx-content-placeholder .dx-content")) {
                        $item.remove()
                    }
                }
                return $layout
            },
            _loadTemplatesFromCache: function() {
                if (!this._templateCacheEnabled) {
                    return
                }
                var cache;
                var fromJSONInterceptor = function(key, value) {
                    if ("string" === typeof value && 0 === value.indexOf(MARKUP_TEMPLATE_MARKER)) {
                        var data = JSON.parse(value.substr(MARKUP_TEMPLATE_MARKER.length)),
                            type = data.type,
                            options = data.options,
                            $markup = domUtils.createMarkupFromString(data.markup);
                        options.fromCache = true;
                        return $markup[type](options)[type]("instance")
                    } else {
                        if ("skippedMarkup" === key) {
                            return $("<div>").append(domUtils.createMarkupFromString(value)).contents()
                        }
                    }
                    return value
                };
                var toParse = this._templateCacheStorage.getItem(this._templateCacheKey);
                if (toParse) {
                    try {
                        var cacheContainer = JSON.parse(toParse, fromJSONInterceptor);
                        cache = cacheContainer[this._templatesVersion]
                    } catch (e) {
                        this._clearCache()
                    }
                }
                if (!cache) {
                    return
                }
                this._templateMap = cache.templates;
                this.$root.append(cache.skippedMarkup);
                return true
            },
            _putTemplatesToCache: function() {
                if (!this._templateCacheEnabled) {
                    return
                }
                var toJSONInterceptor = function(key, value) {
                    if (value && value.element) {
                        return MARKUP_TEMPLATE_MARKER + JSON.stringify({
                            markup: value.element().prop("outerHTML"),
                            options: value.option(),
                            type: value.NAME
                        })
                    } else {
                        if ("skippedMarkup" === key) {
                            return $("<div>").append(value.clone()).html()
                        }
                    }
                    return value
                };
                var cacheContainer = {};
                cacheContainer[this._templatesVersion] = {
                    templates: this._templateMap,
                    skippedMarkup: this._$skippedMarkup
                };
                this._templateCacheStorage.setItem(this._templateCacheKey, JSON.stringify(cacheContainer, toJSONInterceptor, 4))
            },
            init: function() {
                var that = this;
                this._initDefaultLayout();
                if (!this._loadTemplatesFromCache()) {
                    that._loadTemplatesFromMarkupCore(that.$root.children());
                    return this._loadExternalTemplates().done(function() {
                        that._processTemplates();
                        that._putTemplatesToCache()
                    })
                } else {
                    return $.Deferred().resolve().promise()
                }
            },
            getViewTemplate: function(viewName) {
                return this._findTemplate(viewName, _VIEW_ROLE)
            },
            getViewTemplateInfo: function(name) {
                return this._findComponent(name, _VIEW_ROLE)
            },
            getLayoutTemplate: function(layoutName) {
                if (!layoutName) {
                    return this._getDefaultLayoutTemplate()
                }
                return this._findTemplate(layoutName, _LAYOUT_ROLE)
            },
            getLayoutTemplateInfo: function(name) {
                return this._findComponent(name, _LAYOUT_ROLE)
            },
            loadTemplates: function(source) {
                var result;
                if ("string" === typeof source) {
                    result = this._loadTemplatesFromURL(source)
                } else {
                    this._loadTemplatesFromMarkupCore(source);
                    result = $.Deferred().resolve().promise()
                }
                return result.done(this._processTemplates.bind(this))
            }
        });
        exports.ViewEngine = ViewEngine
    },
    /*!*********************************!*\
      !*** external "window.angular" ***!
      \*********************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports) {
        module.exports = window.angular
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/ui/selection/selection.strategy.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var dataQuery = __webpack_require__( /*! ../../data/query */ 43),
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            getKeyHash = commonUtils.getKeyHash,
            Class = __webpack_require__( /*! ../../core/class */ 10),
            Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7).Deferred;
        module.exports = Class.inherit({
            ctor: function(options) {
                this.options = options;
                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,
                    removedItemKeys = this.options.removedItemKeys,
                    addedItems = this.options.addedItems,
                    removedItems = this.options.removedItems,
                    selectedItems = this.options.selectedItems,
                    selectedItemKeys = this.options.selectedItemKeys,
                    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)
            },
            _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) {
                var filterLength = encodeURI(JSON.stringify(remoteFilter)).length,
                    needLoadAllData = this.options.maxFilterLengthInRequest && filterLength > this.options.maxFilterLengthInRequest,
                    deferred = new Deferred,
                    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) {
                            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(),
                    dataFilter = this.options.filter(),
                    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()) {
                    return true
                }
                return
            },
            _getVisibleSelectAllState: function() {
                var items = this.options.plainItems(),
                    hasSelectedItems = false,
                    hasUnselectedItems = false;
                for (var i = 0; i < items.length; i++) {
                    var item = items[i],
                        itemData = this.options.getItemData(item),
                        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/bundles/modules/data.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var DevExpress = __webpack_require__( /*! ./core */ 131);
        module.exports = DevExpress.data = DevExpress.data || {};
        Object.defineProperty(DevExpress.data, "errorHandler", {
            get: function() { /*! ../../data/errors */
                return __webpack_require__(35).errorHandler
            },
            set: function(value) {
                __webpack_require__( /*! ../../data/errors */ 35).errorHandler = value
            }
        });
        Object.defineProperty(DevExpress.data, "_errorHandler", {
            get: function() { /*! ../../data/errors */
                return __webpack_require__(35)._errorHandler
            },
            set: function(value) {
                __webpack_require__( /*! ../../data/errors */ 35)._errorHandler = value
            }
        });
        DevExpress.data.DataSource = __webpack_require__( /*! ../../data/data_source */ 374);
        DevExpress.data.query = __webpack_require__( /*! ../../data/query */ 43);
        DevExpress.data.Store = __webpack_require__( /*! ../../data/abstract_store */ 100);
        DevExpress.data.ArrayStore = __webpack_require__( /*! ../../data/array_store */ 80);
        DevExpress.data.CustomStore = __webpack_require__( /*! ../../data/custom_store */ 173);
        DevExpress.data.LocalStore = __webpack_require__( /*! ../../data/local_store */ 375);
        DevExpress.data.base64_encode = __webpack_require__( /*! ../../data/utils */ 39).base64_encode;
        DevExpress.data.Guid = __webpack_require__( /*! ../../core/guid */ 48);
        DevExpress.data.utils = {};
        DevExpress.data.utils.compileGetter = __webpack_require__( /*! ../../core/utils/data */ 23).compileGetter;
        DevExpress.data.utils.compileSetter = __webpack_require__( /*! ../../core/utils/data */ 23).compileSetter;
        DevExpress.EndpointSelector = __webpack_require__( /*! ../../data/endpoint_selector */ 376);
        DevExpress.data.queryImpl = __webpack_require__( /*! ../../data/query */ 43).queryImpl;
        DevExpress.data.queryAdapters = __webpack_require__( /*! ../../data/query_adapters */ 190);
        var dataUtils = __webpack_require__( /*! ../../data/utils */ 39);
        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 */ 23).toComparable;
        DevExpress.data.utils.multiLevelGroup = __webpack_require__( /*! ../../data/store_helper */ 83).multiLevelGroup;
        DevExpress.data.utils.arrangeSortingInfo = __webpack_require__( /*! ../../data/store_helper */ 83).arrangeSortingInfo;
        DevExpress.data.utils.normalizeDataSourceOptions = __webpack_require__( /*! ../../data/data_source/data_source */ 50).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 */ 3).each,
            domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 13),
            window = __webpack_require__( /*! ../core/utils/window */ 6).getWindow(),
            callOnce = __webpack_require__( /*! ../core/utils/call_once */ 73),
            DXPROXY_HOST = "dxproxy.devexpress.com:8000",
            urlMapping = {};
        var getUrlParser = callOnce(function() {
            var a = domAdapter.createElement("a"),
                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 (urlMapping.hasOwnProperty(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 isDefined = __webpack_require__( /*! ../../core/utils/type */ 1).isDefined,
            config = __webpack_require__( /*! ../../core/config */ 25),
            odataUtils = __webpack_require__( /*! ./utils */ 106),
            proxyUrlFormatter = __webpack_require__( /*! ../proxy_url_formatter */ 261),
            errors = __webpack_require__( /*! ../errors */ 35).errors,
            query = __webpack_require__( /*! ../query */ 43),
            Store = __webpack_require__( /*! ../abstract_store */ 100),
            mixins = __webpack_require__( /*! ./mixins */ 263),
            deferredUtils = __webpack_require__( /*! ../../core/utils/deferred */ 7),
            when = deferredUtils.when,
            Deferred = deferredUtils.Deferred;
        __webpack_require__( /*! ./query_adapter */ 155);
        var ANONYMOUS_KEY_NAME = "5d46402c-7899-4ea9-bd81-8b73c47c7683";

        function expandKeyType(key, keyType) {
            var result = {};
            result[key] = keyType;
            return result
        }

        function mergeFieldTypesWithKeyType(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.log("W4001", keyName)
                    }
                } else {
                    result[keyName] = keyType[keyName]
                }
            }
            return result
        }
        var ODataStore = Store.inherit({
            ctor: function(options) {
                this.callBase(options);
                this._extractServiceOptions(options);
                var key = this.key(),
                    fieldTypes = options.fieldTypes,
                    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) {
                    if (extraOptions.expand) {
                        params.$expand = odataUtils.generateExpand(this._version, extraOptions.expand)
                    }
                }
                return this._sendRequest(this._byKeyUrl(key), "GET", params)
            },
            createQuery: function(loadOptions) {
                var url, queryOptions;
                loadOptions = loadOptions || {};
                queryOptions = {
                    adapter: "odata",
                    beforeSend: this._beforeSend,
                    errorHandler: this._errorHandler,
                    jsonp: this._jsonp,
                    version: this._version,
                    withCredentials: this._withCredentials,
                    expand: loadOptions.expand,
                    requireTotalCount: loadOptions.requireTotalCount,
                    deserializeDates: this._deserializeDates,
                    fieldTypes: this._fieldTypes
                };
                if (isDefined(loadOptions.urlOverride)) {
                    url = loadOptions.urlOverride
                } else {
                    url = this._url
                }
                if (loadOptions.customQueryParams) {
                    var params = mixins.escapeServiceOperationParams(loadOptions.customQueryParams, this.version());
                    if (4 === this.version()) {
                        url = mixins.formatFunctionInvocationUrl(url, params)
                    } else {
                        queryOptions.params = params
                    }
                }
                return query(url, queryOptions)
            },
            _insertImpl: function(values) {
                this._requireKey();
                var that = this,
                    d = new Deferred;
                when(this._sendRequest(this._url, "POST", null, values)).done(function(serverResponse) {
                    d.resolve(config().useLegacyStoreResult ? values : serverResponse || values, that.keyOf(serverResponse))
                }).fail(d.reject);
                return d.promise()
            },
            _updateImpl: function(key, values) {
                var d = new Deferred;
                when(this._sendRequest(this._byKeyUrl(key), this._updateMethod, null, values)).done(function(serverResponse) {
                    if (config().useLegacyStoreResult) {
                        d.resolve(key, values)
                    } else {
                        d.resolve(serverResponse || values, key)
                    }
                }).fail(d.reject);
                return d.promise()
            },
            _removeImpl: function(key) {
                var d = new Deferred;
                when(this._sendRequest(this._byKeyUrl(key), "DELETE")).done(function() {
                    d.resolve(key)
                }).fail(d.reject);
                return d.promise()
            },
            _convertKey: function(value) {
                var result = value,
                    fieldTypes = this._fieldTypes,
                    key = this.key() || this._legacyAnonymousKey;
                if (Array.isArray(key)) {
                    result = {};
                    for (var keyIndex in key) {
                        var keyName = key[keyIndex];
                        result[keyName] = odataUtils.convertPrimitiveValue(fieldTypes[keyName], value[keyName])
                    }
                } else {
                    if (fieldTypes[key]) {
                        result = odataUtils.convertPrimitiveValue(fieldTypes[key], value)
                    }
                }
                return result
            },
            _byKeyUrl: function(value, useOriginalHost) {
                var baseUrl = useOriginalHost ? proxyUrlFormatter.formatLocalUrl(this._url) : this._url;
                var convertedKey = this._convertKey(value);
                return baseUrl + "(" + encodeURIComponent(odataUtils.serializeKey(convertedKey, this._version)) + ")"
            }
        }, "odata").include(mixins.SharedMethods);
        module.exports = ODataStore
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/data/odata/mixins.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var stringUtils = __webpack_require__( /*! ../../core/utils/string */ 40),
            iteratorUtils = __webpack_require__( /*! ../../core/utils/iterator */ 3),
            odataUtils = __webpack_require__( /*! ./utils */ 106);
        __webpack_require__( /*! ./query_adapter */ 155);
        var DEFAULT_PROTOCOL_VERSION = 2;
        var formatFunctionInvocationUrl = function(baseUrl, args) {
            return stringUtils.format("{0}({1})", baseUrl, iteratorUtils.map(args || {}, function(value, key) {
                return stringUtils.format("{0}={1}", key, value)
            }).join(","))
        };
        var escapeServiceOperationParams = function(params, version) {
            if (!params) {
                return params
            }
            var result = {};
            iteratorUtils.each(params, function(k, v) {
                result[k] = odataUtils.serializeValue(v, version)
            });
            return result
        };
        var SharedMethods = {
            _extractServiceOptions: function(options) {
                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
            },
            _sendRequest: function(url, method, params, payload) {
                return odataUtils.sendRequest(this.version(), {
                    url: url,
                    method: method,
                    params: params || {},
                    payload: payload
                }, {
                    beforeSend: this._beforeSend,
                    jsonp: this._jsonp,
                    withCredentials: this._withCredentials,
                    deserializeDates: this._deserializeDates
                })
            },
            version: function() {
                return this._version
            }
        };
        exports.SharedMethods = SharedMethods;
        exports.escapeServiceOperationParams = escapeServiceOperationParams;
        exports.formatFunctionInvocationUrl = formatFunctionInvocationUrl
    },
    /*!*******************************************!*\
      !*** ./artifacts/transpiled/ui/dialog.js ***!
      \*******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            window = __webpack_require__( /*! ../core/utils/window */ 6).getWindow(),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            Component = __webpack_require__( /*! ../core/component */ 128),
            isFunction = __webpack_require__( /*! ../core/utils/type */ 1).isFunction,
            Action = __webpack_require__( /*! ../core/action */ 81),
            domUtils = __webpack_require__( /*! ../core/utils/dom */ 12),
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            viewPortUtils = __webpack_require__( /*! ../core/utils/view_port */ 66),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            isPlainObject = __webpack_require__( /*! ../core/utils/type */ 1).isPlainObject,
            devices = __webpack_require__( /*! ../core/devices */ 16),
            themes = __webpack_require__( /*! ./themes */ 20),
            errors = __webpack_require__( /*! ./widget/ui.errors */ 18),
            messageLocalization = __webpack_require__( /*! ../localization/message */ 14),
            Popup = __webpack_require__( /*! ./popup */ 55),
            config = __webpack_require__( /*! ../core/config */ 25),
            Deferred = __webpack_require__( /*! ../core/utils/deferred */ 7).Deferred;
        var DEFAULT_BUTTON = {
            text: "OK",
            onClick: function() {
                return true
            }
        };
        var DX_DIALOG_CLASSNAME = "dx-dialog",
            DX_DIALOG_WRAPPER_CLASSNAME = DX_DIALOG_CLASSNAME + "-wrapper",
            DX_DIALOG_ROOT_CLASSNAME = DX_DIALOG_CLASSNAME + "-root",
            DX_DIALOG_CONTENT_CLASSNAME = DX_DIALOG_CLASSNAME + "-content",
            DX_DIALOG_MESSAGE_CLASSNAME = DX_DIALOG_CLASSNAME + "-message",
            DX_DIALOG_BUTTONS_CLASSNAME = DX_DIALOG_CLASSNAME + "-buttons",
            DX_DIALOG_BUTTON_CLASSNAME = DX_DIALOG_CLASSNAME + "-button";
        var FakeDialogComponent = Component.inherit({
            ctor: function(element, options) {
                this.callBase(options)
            },
            _defaultOptionsRules: function() {
                var themeName = themes.current();
                return this.callBase().concat([{
                    device: {
                        platform: "ios"
                    },
                    options: {
                        width: 276
                    }
                }, {
                    device: {
                        platform: "android"
                    },
                    options: {
                        lWidth: "60%",
                        pWidth: "80%"
                    }
                }, {
                    device: function(_device) {
                        return !_device.phone && themes.isWin8(themeName)
                    },
                    options: {
                        width: function() {
                            return $(window).width()
                        }
                    }
                }, {
                    device: function(_device2) {
                        return _device2.phone && themes.isWin8(themeName)
                    },
                    options: {
                        position: {
                            my: "top center",
                            at: "top center",
                            of: window,
                            offset: "0 0"
                        }
                    }
                }])
            }
        });
        exports.FakeDialogComponent = FakeDialogComponent;
        exports.title = "";
        exports.custom = function(options) {
            var deferred = new Deferred;
            var defaultOptions = (new FakeDialogComponent).option();
            options = extend(defaultOptions, options);
            var $element = $("<div>").addClass(DX_DIALOG_CLASSNAME).appendTo(viewPortUtils.value());
            var $message = $("<div>").addClass(DX_DIALOG_MESSAGE_CLASSNAME).html(String(options.message));
            var popupToolbarItems = [];
            var toolbarItemsOption = options.toolbarItems;
            if (toolbarItemsOption) {
                errors.log("W0001", "DevExpress.ui.dialog", "toolbarItems", "16.2", "Use the 'buttons' option instead")
            } else {
                toolbarItemsOption = options.buttons
            }
            each(toolbarItemsOption || [DEFAULT_BUTTON], function() {
                var action = new Action(this.onClick, {
                    context: popupInstance
                });
                popupToolbarItems.push({
                    toolbar: "bottom",
                    location: devices.current().android ? "after" : "center",
                    widget: "dxButton",
                    options: extend({}, this, {
                        onClick: function() {
                            var result = action.execute(arguments);
                            hide(result)
                        }
                    })
                })
            });
            var popupInstance = new Popup($element, {
                title: options.title || exports.title,
                showTitle: function() {
                    var isTitle = void 0 === options.showTitle ? true : options.showTitle;
                    return isTitle
                }(),
                height: "auto",
                width: function() {
                    var isPortrait = $(window).height() > $(window).width(),
                        key = (isPortrait ? "p" : "l") + "Width",
                        widthOption = options.hasOwnProperty(key) ? options[key] : options.width;
                    return isFunction(widthOption) ? widthOption() : widthOption
                },
                showCloseButton: options.showCloseButton || false,
                focusStateEnabled: 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(".dx-button").addClass(DX_DIALOG_BUTTON_CLASSNAME);
                    domUtils.resetActiveElement()
                },
                onShown: function(e) {
                    var $firstButton = e.component.bottomToolbar().find(".dx-button").first();
                    eventsEngine.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: config().rtlEnabled,
                boundaryOffset: {
                    h: 10,
                    v: 0
                }
            });
            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(message, title, showTitle) {
            var options = isPlainObject(message) ? message : {
                title: title,
                message: message,
                showTitle: showTitle
            };
            return exports.custom(options).show()
        };
        exports.confirm = function(message, title, showTitle) {
            var options = isPlainObject(message) ? message : {
                title: title,
                message: message,
                showTitle: showTitle,
                buttons: [{
                    text: messageLocalization.format("Yes"),
                    onClick: function() {
                        return true
                    }
                }, {
                    text: messageLocalization.format("No"),
                    onClick: function() {
                        return false
                    }
                }]
            };
            return exports.custom(options).show()
        }
    },
    /*!***************************************************************!*\
      !*** ./artifacts/transpiled/ui/widget/ui.search_box_mixin.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14),
            TextBox = __webpack_require__( /*! ../text_box */ 101),
            errors = __webpack_require__( /*! ../widget/ui.errors */ 18),
            Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7).Deferred;
        module.exports = {
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    searchMode: "",
                    searchExpr: null,
                    searchValue: "",
                    searchEnabled: false,
                    searchEditorOptions: {}
                })
            },
            _initMarkup: function() {
                this._renderSearch();
                this.callBase()
            },
            _renderSearch: function() {
                var editorOptions, $element = this.$element(),
                    searchEnabled = this.option("searchEnabled"),
                    searchBoxClassName = this._addWidgetPrefix("search"),
                    rootElementClassName = this._addWidgetPrefix("with-search");
                if (!searchEnabled) {
                    $element.removeClass(rootElementClassName);
                    this._removeSearchBox();
                    return
                }
                editorOptions = this._getSearchEditorOptions();
                if (this._searchEditor) {
                    this._searchEditor.option(editorOptions)
                } else {
                    $element.addClass(rootElementClassName);
                    this._$searchEditorElement = $("<div>").addClass(searchBoxClassName).prependTo($element);
                    this._searchEditor = this._createComponent(this._$searchEditorElement, TextBox, editorOptions)
                }
            },
            _removeSearchBox: function() {
                this._$searchEditorElement && this._$searchEditorElement.remove();
                delete this._$searchEditorElement;
                delete this._searchEditor
            },
            _getSearchEditorOptions: function() {
                var that = this,
                    userEditorOptions = that.option("searchEditorOptions");
                return extend({
                    mode: "search",
                    placeholder: messageLocalization.format("Search"),
                    tabIndex: that.option("tabIndex"),
                    value: that.option("searchValue"),
                    valueChangeEvent: "input",
                    onValueChanged: function(e) {
                        var searchTimeout = that.option("searchTimeout");
                        that._valueChangeDeferred = new 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() {
                return this.$element()
            },
            _focusTarget: function() {
                if (this.option("searchEnabled")) {
                    return this._itemContainer()
                }
                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
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "searchEnabled":
                    case "searchEditorOptions":
                        this._invalidate();
                        break;
                    case "searchExpr":
                    case "searchMode":
                    case "searchValue":
                        if (!this._dataSource) {
                            errors.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/bundles/modules/parts/core.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var DevExpress = __webpack_require__( /*! ../../../bundles/modules/core */ 131);
        DevExpress.framework = __webpack_require__( /*! ../../../bundles/modules/framework */ 342);
        __webpack_require__( /*! ../../../integration/jquery */ 46);
        __webpack_require__( /*! ../../../integration/angular */ 360);
        __webpack_require__( /*! ../../../integration/knockout */ 121);
        __webpack_require__( /*! ../../../localization/globalize/core */ 124);
        __webpack_require__( /*! ../../../localization/globalize/message */ 371);
        __webpack_require__( /*! ../../../localization/globalize/number */ 192);
        __webpack_require__( /*! ../../../localization/globalize/date */ 372);
        __webpack_require__( /*! ../../../localization/globalize/currency */ 373);
        __webpack_require__( /*! ../../../events/click */ 17);
        __webpack_require__( /*! ../../../events/contextmenu */ 207);
        __webpack_require__( /*! ../../../events/double_click */ 211);
        __webpack_require__( /*! ../../../events/drag */ 65);
        __webpack_require__( /*! ../../../events/hold */ 95);
        __webpack_require__( /*! ../../../events/hover */ 172);
        __webpack_require__( /*! ../../../events/pointer */ 27);
        __webpack_require__( /*! ../../../events/swipe */ 125);
        __webpack_require__( /*! ../../../events/transform */ 274);
        module.exports = DevExpress
    },
    /*!**********************************************************!*\
      !*** ./artifacts/transpiled/localization/ldml/number.js ***!
      \**********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var fitIntoRange = __webpack_require__( /*! ../../core/utils/math */ 30).fitIntoRange;
        var DEFAULT_CONFIG = {
                thousandsSeparator: ",",
                decimalSeparator: "."
            },
            ESCAPING_CHAR = "'",
            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 = [],
                index = 0;
            while (valueString) {
                var groupSize = groupSizes[index];
                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),
                    isPositiveZero = 1 / value === 1 / 0,
                    isPositive = value > 0 || isPositiveZero,
                    numberFormat = signFormatParts[isPositive ? 0 : 1];
                if (isPercentFormat(numberFormat)) {
                    value = 100 * value
                }
                if (!isPositive) {
                    value = -value
                }
                var floatPointIndex = getFloatPointIndex(numberFormat),
                    floatFormatParts = [numberFormat.substr(0, floatPointIndex), numberFormat.substr(floatPointIndex + 1)],
                    minFloatPrecision = getRequiredDigitCount(floatFormatParts[1]),
                    maxFloatPrecision = minFloatPrecision + getNonRequiredDigitCount(floatFormatParts[1]),
                    minIntegerPrecision = getRequiredDigitCount(floatFormatParts[0]),
                    maxIntegerPrecision = getNonRequiredDigitCount(floatFormatParts[0]) ? void 0 : minIntegerPrecision,
                    integerLength = Math.floor(value).toString().length,
                    floatPrecision = fitIntoRange(maxFloatPrecision, 0, MAXIMUM_NUMBER_LENGTH - integerLength),
                    groupSizes = getGroupSizes(floatFormatParts[0]).reverse();
                var valueParts = value.toFixed(floatPrecision < 0 ? 0 : floatPrecision).split(".");
                var valueIntegerPart = normalizeValueString(reverseString(valueParts[0]), minIntegerPrecision, maxIntegerPrecision),
                    valueFloatPart = normalizeValueString(valueParts[1], minFloatPrecision, maxFloatPrecision);
                valueIntegerPart = applyGroups(valueIntegerPart, groupSizes, config.thousandsSeparator);
                var integerString = reverseString(formatNumberPart(reverseString(floatFormatParts[0]), valueIntegerPart)),
                    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 char, text, nextText, nextValueText = valueText;
            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)),
                valueTextParts = valueText.split("."),
                valueTextWithModifiedFloat = valueTextParts[0] + ".3" + valueTextParts[1].slice(1),
                valueWithModifiedFloat = parseValue(valueTextWithModifiedFloat, isPercent, isNegative),
                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 = ".",
                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/ldml/date.parser.js ***!
      \***************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var escapeRegExp = __webpack_require__( /*! ../../core/utils/common */ 4).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) {
                var hours = date.getHours();
                if (!value && 12 === hours) {
                    date.setHours(0)
                } else {
                    if (value && 12 !== hours) {
                        date.setHours(hours + 12)
                    }
                }
            },
            d: "setDate",
            H: "setHours",
            h: "setHours",
            m: "setMinutes",
            s: "setSeconds",
            S: "setMilliseconds"
        };
        var getSameCharCount = function(text, index) {
            var char = text[index],
                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 isEscaping, regexpText = "",
                patterns = [];
            for (var i = 0; i < format.length; i++) {
                var char = format[i],
                    isEscapeChar = "'" === char,
                    regexpPart = PATTERN_REGEXPS[char];
                if (isEscapeChar) {
                    isEscaping = !isEscaping;
                    if ("'" !== format[i - 1]) {
                        continue
                    }
                }
                if (regexpPart && !isEscaping) {
                    var count = getSameCharCount(format, i),
                        pattern = createPattern(char, count);
                    patterns.push(pattern);
                    regexpText += "(" + regexpPart(count, dateParts) + ")";
                    i += count - 1
                } else {
                    char = escapeRegExp(char);
                    patterns.push(char);
                    regexpText += "(" + char + ")"
                }
            }
            return {
                patterns: patterns,
                regexp: new RegExp("^" + regexpText + "$", "i")
            }
        };
        var getPatternSetters = function() {
            return PATTERN_SETTERS
        };
        var setPatternPart = function(date, pattern, text, dateParts) {
            var patternChar = pattern[0],
                partSetter = PATTERN_SETTERS[patternChar],
                partParser = PATTERN_PARSERS[patternChar];
            if (partSetter && partParser) {
                var value = partParser(text, pattern.length, dateParts);
                if (date[partSetter]) {
                    date[partSetter](value)
                } else {
                    partSetter(date, value)
                }
            }
        };
        var setPatternPartFromNow = function(date, pattern, now) {
            var setterName = PATTERN_SETTERS[pattern],
                getterName = "g" + setterName.substr(1);
            date[setterName](now[getterName]())
        };
        var getShortPatterns = function(fullPatterns) {
            return fullPatterns.map(function(pattern) {
                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,
                        date = new Date(now.getFullYear(), 0, 1),
                        formatPatterns = getShortPatterns(regExpInfo.patterns),
                        maxPatternIndex = getMaxOrderedPatternIndex(formatPatterns),
                        orderedFormatPatterns = getOrderedFormatPatterns(formatPatterns);
                    orderedFormatPatterns.forEach(function(pattern, index) {
                        if (index < ORDERED_PATTERNS.length && index > maxPatternIndex) {
                            return
                        }
                        var patternIndex = formatPatterns.indexOf(pattern);
                        if (patternIndex >= 0) {
                            setPatternPart(date, regExpInfo.patterns[patternIndex], regExpResult[patternIndex + 1], dateParts)
                        } else {
                            setPatternPartFromNow(date, pattern, now)
                        }
                    });
                    return date
                }
                return null
            }
        };
        exports.getParser = getParser;
        exports.getRegExpInfo = getRegExpInfo;
        exports.getPatternSetters = getPatternSetters
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/ui/widget/jquery.template.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            errors = __webpack_require__( /*! ../../core/errors */ 19),
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            TemplateBase = __webpack_require__( /*! ./ui.template_base */ 71),
            domUtils = __webpack_require__( /*! ../../core/utils/dom */ 12);
        var templateEngines = {};
        var registerTemplateEngine = function(name, templateEngine) {
            templateEngines[name] = templateEngine
        };
        registerTemplateEngine("default", {
            compile: function(element) {
                return domUtils.normalizeTemplateElement(element)
            },
            render: function(template, model, index, transclude) {
                return transclude ? template : template.clone()
            }
        });
        registerTemplateEngine("jquery-tmpl", {
            compile: function(element) {
                return domUtils.extractTemplateMarkup(element)
            },
            render: function(template, data) {
                return jQuery.tmpl(template, data)
            }
        });
        registerTemplateEngine("jsrender", {
            compile: function(element) {
                return (jQuery ? jQuery : jsrender).templates(domUtils.extractTemplateMarkup(element))
            },
            render: function(template, data) {
                return template.render(data)
            }
        });
        registerTemplateEngine("mustache", {
            compile: function(element) {
                return domUtils.extractTemplateMarkup(element)
            },
            render: function(template, data) {
                return Mustache.render(template, data)
            }
        });
        registerTemplateEngine("hogan", {
            compile: function(element) {
                return Hogan.compile(domUtils.extractTemplateMarkup(element))
            },
            render: function(template, data) {
                return template.render(data)
            }
        });
        registerTemplateEngine("underscore", {
            compile: function(element) {
                return _.template(domUtils.extractTemplateMarkup(element))
            },
            render: function(template, data) {
                return template(data)
            }
        });
        registerTemplateEngine("handlebars", {
            compile: function(element) {
                return Handlebars.compile(domUtils.extractTemplateMarkup(element))
            },
            render: function(template, data) {
                return template(data)
            }
        });
        registerTemplateEngine("doT", {
            compile: function(element) {
                return doT.template(domUtils.extractTemplateMarkup(element))
            },
            render: function(template, data) {
                return template(data)
            }
        });
        var currentTemplateEngine;
        var setTemplateEngine = function(templateEngine) {
            if (typeUtils.isString(templateEngine)) {
                currentTemplateEngine = templateEngines[templateEngine];
                if (!currentTemplateEngine) {
                    throw errors.Error("E0020", templateEngine)
                }
            } else {
                currentTemplateEngine = templateEngine
            }
        };
        setTemplateEngine("default");
        var Template = TemplateBase.inherit({
            ctor: function(element) {
                this._element = element;
                this._compiledTemplate = currentTemplateEngine.compile(element)
            },
            _renderCore: function(options) {
                return $("<div>").append(currentTemplateEngine.render(this._compiledTemplate, options.model, options.index, options.transclude)).contents()
            },
            source: function() {
                return $(this._element).clone()
            }
        });
        module.exports = Template;
        module.exports.setTemplateEngine = setTemplateEngine
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/core/utils/selection_filter.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var getKeyHash = __webpack_require__( /*! ./common */ 4).getKeyHash,
            equalByValue = __webpack_require__( /*! ./common */ 4).equalByValue,
            typeUtils = __webpack_require__( /*! ./type */ 1);
        var SelectionFilterCreator = function(selectedItemKeys, isSelectAll) {
            this.getLocalFilter = function(keyGetter, equalKeys, equalByReference) {
                equalKeys = void 0 === equalKeys ? equalByValue : equalKeys;
                return functionFilter.bind(this, equalKeys, keyGetter, equalByReference)
            };
            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),
                    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 functionFilter = function(equalKeys, keyOf, equalByReference, item) {
                var keyHash, i, key = keyOf(item);
                if (!equalByReference) {
                    keyHash = getKeyHash(key);
                    if (!typeUtils.isObject(keyHash)) {
                        var selectedKeyHashesMap = getSelectedItemKeyHashesMap(selectedItemKeys);
                        if (selectedKeyHashesMap[keyHash]) {
                            return !isSelectAll
                        }
                        return !!isSelectAll
                    }
                }
                for (i = 0; i < selectedItemKeys.length; i++) {
                    if (equalKeys(selectedItemKeys[i], key)) {
                        return !isSelectAll
                    }
                }
                return !!isSelectAll
            };
            var getFilterForPlainKey = function(keyExpr, keyValue) {
                if (void 0 === keyValue) {
                    return
                }
                return [keyExpr, isSelectAll ? "<>" : "=", keyValue]
            };
            var getFilterForCompositeKey = function(keyExpr, itemKeyValue) {
                var filterExpr = [];
                for (var i = 0, length = keyExpr.length; i < length; i++) {
                    var currentKeyExpr = keyExpr[i],
                        currentKeyValue = itemKeyValue && itemKeyValue[currentKeyExpr],
                        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/ui/shared/async_template_mixin.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = {
            _waitAsyncTemplates: function(callback) {
                if (this._options.templatesRenderAsynchronously) {
                    this._asyncTemplatesTimers = this._asyncTemplatesTimers || [];
                    var timer = setTimeout(function() {
                        callback.call(this);
                        clearTimeout(timer)
                    }.bind(this));
                    this._asyncTemplatesTimers.push(timer)
                } else {
                    callback.call(this)
                }
            },
            _cleanAsyncTemplatesTimer: function() {
                var timers = this._asyncTemplatesTimers || [];
                for (var i = 0; i < timers.length; i++) {
                    clearTimeout(timers[i])
                }
                delete this._asyncTemplatesTimers
            }
        }
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/localization/language_codes.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var locale = __webpack_require__( /*! ./core */ 86).locale,
            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/ui/selection/selection.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ../../core/class */ 10),
            deferredStrategy = __webpack_require__( /*! ./selection.strategy.deferred */ 366),
            standardStrategy = __webpack_require__( /*! ./selection.strategy.standard */ 367),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            isDefined = __webpack_require__( /*! ../../core/utils/type */ 1).isDefined,
            Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7).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 {
                    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, items = this.options.plainItems(),
                    item = items[itemIndex];
                if (!this.isSelectable() || !this.isDataItem(item)) {
                    return false
                }
                var itemData = this.options.getItemData(item),
                    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 itemIndexStep, index, isSelectedItemsChanged = false,
                    keyOf = this.options.keyOf,
                    focusedItem = items[this._focusedItemIndex],
                    focusedData = this.options.getItemData(focusedItem),
                    focusedKey = keyOf(focusedData),
                    isFocusedItemSelected = focusedItem && this.isItemDataSelected(focusedData);
                if (!isDefined(this._shiftFocusedItemIndex)) {
                    this._shiftFocusedItemIndex = this._focusedItemIndex
                }
                var data, 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.options.plainItems();
                for (var i = 0; i < items.length; i++) {
                    var item = items[i];
                    if (this.isDataItem(item)) {
                        var itemData = this.options.getItemData(item),
                            itemKey = this.options.keyOf(itemData),
                            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/events/transform.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var mathUtils = __webpack_require__( /*! ../core/utils/math */ 30),
            iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 3),
            errors = __webpack_require__( /*! ../core/errors */ 19),
            eventUtils = __webpack_require__( /*! ./utils */ 9),
            Emitter = __webpack_require__( /*! ./core/emitter */ 120),
            registerEmitter = __webpack_require__( /*! ./core/emitter_registrator */ 92);
        var DX_PREFIX = "dx",
            TRANSFORM = "transform",
            TRANSLATE = "translate",
            ZOOM = "zoom",
            PINCH = "pinch",
            ROTATE = "rotate",
            START_POSTFIX = "start",
            UPDATE_POSTFIX = "",
            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),
                    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/bundles/modules/parts/data.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var DevExpress = __webpack_require__( /*! ./core */ 266);
        var data = DevExpress.data = __webpack_require__( /*! ../../../bundles/modules/data */ 260);
        data.odata = __webpack_require__( /*! ../../../bundles/modules/data.odata */ 377);
        module.exports = data
    },
    /*!************************************************************!*\
      !*** ./artifacts/transpiled/ui/toolbar/ui.toolbar.base.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            themes = __webpack_require__( /*! ../themes */ 20),
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            isPlainObject = __webpack_require__( /*! ../../core/utils/type */ 1).isPlainObject,
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            inArray = __webpack_require__( /*! ../../core/utils/array */ 11).inArray,
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            AsyncCollectionWidget = __webpack_require__( /*! ../collection/ui.collection_widget.async */ 469),
            BindableTemplate = __webpack_require__( /*! ../widget/bindable_template */ 60);
        var TOOLBAR_CLASS = "dx-toolbar",
            TOOLBAR_BEFORE_CLASS = "dx-toolbar-before",
            TOOLBAR_CENTER_CLASS = "dx-toolbar-center",
            TOOLBAR_AFTER_CLASS = "dx-toolbar-after",
            TOOLBAR_BOTTOM_CLASS = "dx-toolbar-bottom",
            TOOLBAR_MINI_CLASS = "dx-toolbar-mini",
            TOOLBAR_ITEM_CLASS = "dx-toolbar-item",
            TOOLBAR_LABEL_CLASS = "dx-toolbar-label",
            TOOLBAR_BUTTON_CLASS = "dx-toolbar-button",
            TOOLBAR_ITEMS_CONTAINER_CLASS = "dx-toolbar-items-container",
            TOOLBAR_GROUP_CLASS = "dx-toolbar-group",
            TOOLBAR_COMPACT_CLASS = "dx-toolbar-compact",
            TOOLBAR_LABEL_SELECTOR = "." + TOOLBAR_LABEL_CLASS,
            TEXT_BUTTON_MODE = "text",
            DEFAULT_BUTTON_TYPE = "default",
            TOOLBAR_ITEM_DATA_KEY = "dxToolbarItemDataKey";
        var ToolbarBase = AsyncCollectionWidget.inherit({
            compactMode: false,
            _initTemplates: function() {
                this.callBase();
                var template = new BindableTemplate(function($container, data, rawModel) {
                    if (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
                    })
                }.bind(this), ["text", "html", "widget", "options"], this.option("integrationOptions.watchMethod"));
                this._defaultTemplates.item = template;
                this._defaultTemplates.menuItem = template
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    renderAs: "topToolbar",
                    grouped: false,
                    useFlatButtons: false,
                    useDefaultButtons: false
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return themes.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")
            },
            _render: function() {
                this.callBase();
                this._renderItemsAsync()
            },
            _postProcessRenderItems: function() {
                this._arrangeItems()
            },
            _renderToolbar: function() {
                this.$element().addClass(TOOLBAR_CLASS).toggleClass(TOOLBAR_BOTTOM_CLASS, "bottomToolbar" === this.option("renderAs"));
                this._$toolbarItemsContainer = $("<div>").addClass(TOOLBAR_ITEMS_CONTAINER_CLASS).appendTo(this.$element())
            },
            _renderSections: function() {
                var $container = this._$toolbarItemsContainer,
                    that = this;
                each(["before", "center", "after"], function() {
                    var sectionClass = "dx-toolbar-" + this,
                        $section = $container.find("." + sectionClass);
                    if (!$section.length) {
                        that["_$" + this + "Section"] = $section = $("<div>").addClass(sectionClass).appendTo($container)
                    }
                })
            },
            _arrangeItems: function(elementWidth) {
                elementWidth = elementWidth || this.$element().width();
                this._$centerSection.css({
                    margin: "0 auto",
                    "float": "none"
                });
                var beforeRect = this._$beforeSection.get(0).getBoundingClientRect(),
                    afterRect = this._$afterSection.get(0).getBoundingClientRect();
                this._alignCenterSection(beforeRect, afterRect, elementWidth);
                var $label = this._$toolbarItemsContainer.find(TOOLBAR_LABEL_SELECTOR).eq(0),
                    $section = $label.parent();
                if (!$label.length) {
                    return
                }
                var labelOffset = beforeRect.width ? beforeRect.width : $label.position().left,
                    widthBeforeSection = $section.hasClass(TOOLBAR_BEFORE_CLASS) ? 0 : labelOffset,
                    widthAfterSection = $section.hasClass(TOOLBAR_AFTER_CLASS) ? 0 : afterRect.width,
                    elemsAtSectionWidth = 0;
                $section.children().not(TOOLBAR_LABEL_SELECTOR).each(function() {
                    elemsAtSectionWidth += $(this).outerWidth()
                });
                var freeSpace = elementWidth - elemsAtSectionWidth,
                    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"),
                    leftRect = isRTL ? afterRect : beforeRect,
                    rightRect = isRTL ? beforeRect : afterRect,
                    centerRect = this._$centerSection.get(0).getBoundingClientRect();
                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),
                    labels = $labels.toArray();
                maxWidth -= this._getCurrentLabelsPaddings(labels);
                var currentWidth = this._getCurrentLabelsWidth(labels),
                    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 label.getBoundingClientRect().width
                };
                for (var i = 0; i < labels.length; i++) {
                    var labelMaxWidth, $label = $(labels[i]),
                        currentLabelWidth = Math.ceil(getRealLabelWidth(labels[i]));
                    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 += $(label).outerWidth()
                });
                return width
            },
            _getCurrentLabelsPaddings: function(labels) {
                var padding = 0;
                labels.forEach(function(label, index) {
                    padding += $(label).outerWidth() - $(label).width()
                });
                return padding
            },
            _renderItem: function(index, item, itemContainer, $after) {
                var location = item.location || "center",
                    container = itemContainer || this._$toolbarItemsContainer.find(".dx-toolbar-" + location),
                    itemHasText = !!(item.text || item.html),
                    itemElement = this.callBase(index, item, container, $after);
                itemElement.toggleClass(this._buttonClass(), !itemHasText).toggleClass(TOOLBAR_LABEL_CLASS, itemHasText);
                return itemElement
            },
            _renderGroupedItems: function() {
                var that = this;
                each(this.option("items"), function(groupIndex, group) {
                    var groupItems = group.items,
                        $container = $("<div>").addClass(TOOLBAR_GROUP_CLASS),
                        location = group.location || "center";
                    if (!groupItems || !groupItems.length) {
                        return
                    }
                    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: commonUtils.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 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 "renderAs":
                    case "useFlatButtons":
                    case "useDefaultButtons":
                        this._invalidate();
                        break;
                    case "compactMode":
                        this._applyCompactMode();
                        break;
                    case "grouped":
                        break;
                    default:
                        this.callBase.apply(this, arguments)
                }
            }
        });
        registerComponent("dxToolbarBase", ToolbarBase);
        module.exports = ToolbarBase
    },
    /*!******************************************!*\
      !*** ./artifacts/transpiled/ui/toast.js ***!
      \******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            window = __webpack_require__( /*! ../core/utils/window */ 6).getWindow(),
            domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 13),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            ready = __webpack_require__( /*! ../core/utils/ready_callbacks */ 52).add,
            commonUtils = __webpack_require__( /*! ../core/utils/common */ 4),
            typeUtils = __webpack_require__( /*! ../core/utils/type */ 1),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            inArray = __webpack_require__( /*! ../core/utils/array */ 11).inArray,
            pointerEvents = __webpack_require__( /*! ../events/pointer */ 27),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            Overlay = __webpack_require__( /*! ./overlay */ 64),
            themes = __webpack_require__( /*! ./themes */ 20);
        var TOAST_CLASS = "dx-toast",
            TOAST_CLASS_PREFIX = TOAST_CLASS + "-",
            TOAST_WRAPPER_CLASS = TOAST_CLASS_PREFIX + "wrapper",
            TOAST_CONTENT_CLASS = TOAST_CLASS_PREFIX + "content",
            TOAST_MESSAGE_CLASS = TOAST_CLASS_PREFIX + "message",
            TOAST_ICON_CLASS = TOAST_CLASS_PREFIX + "icon",
            WIDGET_NAME = "dxToast",
            toastTypes = ["info", "warning", "error", "success"],
            TOAST_STACK = [],
            FIRST_Z_INDEX_OFFSET = 8e3,
            visibleToastInstance = null,
            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",
                    closeOnBackButton: false,
                    closeOnSwipe: true,
                    closeOnClick: false,
                    resizeEnabled: false
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function(_device) {
                        return "win" === _device.platform && _device.version && 8 === _device.version[0]
                    },
                    options: {
                        position: "top center",
                        width: function() {
                            return $(window).width()
                        }
                    }
                }, {
                    device: function(_device2) {
                        return "win" === _device2.platform && _device2.version && 10 === _device2.version[0]
                    },
                    options: {
                        position: "bottom right",
                        width: "auto"
                    }
                }, {
                    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(_device3) {
                        var isPhone = "phone" === _device3.deviceType,
                            isAndroid = "android" === _device3.platform,
                            isWin10 = "win" === _device3.platform && _device3.version && 10 === _device3.version[0];
                        return isPhone && (isAndroid || isWin10)
                    },
                    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],
                    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/text_box/ui.text_editor.js ***!
      \************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            TextEditorMask = __webpack_require__( /*! ./ui.text_editor.mask */ 473);
        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 $ = __webpack_require__( /*! ../../core/renderer */ 2),
            isDefined = __webpack_require__( /*! ../../core/utils/type */ 1).isDefined,
            browser = __webpack_require__( /*! ../../core/utils/browser */ 38),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13);
        var isFocusingOnCaretChange = browser.msie || browser.safari;
        var getCaret = function(input) {
            if (isObsoleteBrowser(input)) {
                return getCaretForObsoleteBrowser(input)
            }
            return {
                start: input.selectionStart,
                end: input.selectionEnd
            }
        };
        var setCaret = function(input, position) {
            if (isObsoleteBrowser(input)) {
                setCaretForObsoleteBrowser(input, position);
                return
            }
            if (!domAdapter.getBody().contains(input)) {
                return
            }
            input.selectionStart = position.start;
            input.selectionEnd = position.end
        };
        var isObsoleteBrowser = function(input) {
            return !input.setSelectionRange
        };
        var getCaretForObsoleteBrowser = function(input) {
            var range = domAdapter.getSelection().createRange();
            var rangeCopy = range.duplicate();
            range.move("character", -input.value.length);
            range.setEndPoint("EndToStart", rangeCopy);
            return {
                start: range.text.length,
                end: range.text.length + rangeCopy.text.length
            }
        };
        var setCaretForObsoleteBrowser = function(input, position) {
            if (!domAdapter.getBody().contains(input)) {
                return
            }
            var range = input.createTextRange();
            range.collapse(true);
            range.moveStart("character", position.start);
            range.moveEnd("character", position.end - position.start);
            range.select()
        };
        var caret = function(input, position) {
            input = $(input).get(0);
            if (!isDefined(position)) {
                return getCaret(input)
            }
            if (isFocusingOnCaretChange && domAdapter.getActiveElement() !== input) {
                return
            }
            setCaret(input, position)
        };
        module.exports = caret
    },
    /*!***************************************************************************!*\
      !*** ./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),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            EditDecorator = __webpack_require__( /*! ./ui.list.edit.decorator */ 130),
            abstract = EditDecorator.abstract,
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            pointerEvents = __webpack_require__( /*! ../../events/pointer */ 27),
            feedbackEvents = __webpack_require__( /*! ../../events/core/emitter.feedback */ 103);
        var LIST_EDIT_DECORATOR = "dxListEditDecorator",
            POINTER_DOWN_EVENT_NAME = eventUtils.addNamespace(pointerEvents.down, LIST_EDIT_DECORATOR),
            ACTIVE_EVENT_NAME = eventUtils.addNamespace(feedbackEvents.active, LIST_EDIT_DECORATOR),
            LIST_ITEM_CONTENT_CLASS = "dx-list-item-content",
            SWITCHABLE_DELETE_READY_CLASS = "dx-list-switchable-delete-ready",
            SWITCHABLE_MENU_SHIELD_POSITIONING_CLASS = "dx-list-switchable-menu-shield-positioning",
            SWITCHABLE_DELETE_TOP_SHIELD_CLASS = "dx-list-switchable-delete-top-shield",
            SWITCHABLE_DELETE_BOTTOM_SHIELD_CLASS = "dx-list-switchable-delete-bottom-shield",
            SWITCHABLE_MENU_ITEM_SHIELD_POSITIONING_CLASS = "dx-list-switchable-menu-item-shield-positioning",
            SWITCHABLE_DELETE_ITEM_CONTENT_SHIELD_CLASS = "dx-list-switchable-delete-item-content-shield";
        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(),
                    listTopOffset = $list.offset().top,
                    listHeight = $list.outerHeight(),
                    itemTopOffset = $itemElement.offset().top,
                    itemHeight = $itemElement.outerHeight(),
                    dirtyTopShieldHeight = itemTopOffset - listTopOffset,
                    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,
            _deleteItem: function($itemElement) {
                $itemElement = $itemElement || this._$readyToDeleteItem;
                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__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            ready = __webpack_require__( /*! ../../core/utils/ready_callbacks */ 52).add,
            translator = __webpack_require__( /*! ../../animation/translator */ 24),
            Widget = __webpack_require__( /*! ../widget/ui.widget */ 28),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            isPlainObject = __webpack_require__( /*! ../../core/utils/type */ 1).isPlainObject,
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            pointerEvents = __webpack_require__( /*! ../../events/pointer */ 27);
        var SCROLLBAR = "dxScrollbar",
            SCROLLABLE_SCROLLBAR_CLASS = "dx-scrollable-scrollbar",
            SCROLLABLE_SCROLLBAR_ACTIVE_CLASS = SCROLLABLE_SCROLLBAR_CLASS + "-active",
            SCROLLABLE_SCROLL_CLASS = "dx-scrollable-scroll",
            SCROLLABLE_SCROLL_CONTENT_CLASS = "dx-scrollable-scroll-content",
            HOVER_ENABLED_STATE = "dx-scrollbar-hoverable",
            HORIZONTAL = "horizontal",
            THUMB_MIN_SIZE = 15;
        var SCROLLBAR_VISIBLE = {
            onScroll: "onScroll",
            onHover: "onHover",
            always: "always",
            never: "never"
        };
        var Scrollbar = Widget.inherit({
            _getDefaultOptions: function() {
                return 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 = $("<div>").addClass(SCROLLABLE_SCROLL_CLASS);
                $("<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() {
                eventsEngine.on(this._$thumb, eventUtils.addNamespace(pointerEvents.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;
                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.containerToContentRatio() && !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 (isPlainObject(location)) {
                    location = location[this._prop] || 0
                }
                var scrollBarLocation = {};
                scrollBarLocation[this._prop] = this._calculateScrollBarPosition(location);
                translator.move(this._$thumb, scrollBarLocation)
            },
            _calculateScrollBarPosition: function(location) {
                return -location * this._thumbRatio
            },
            _update: function() {
                var containerSize = Math.round(this.option("containerSize")),
                    contentSize = Math.round(this.option("contentSize"));
                this._containerToContentRatio = contentSize ? containerSize / contentSize : containerSize;
                var thumbSize = Math.round(Math.max(Math.round(containerSize * this._containerToContentRatio), 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._containerToContentRatio < 1
            },
            containerToContentRatio: function() {
                return this._containerToContentRatio
            },
            _normalizeSize: function(size) {
                return isPlainObject(size) ? size[this._dimension] || 0 : size
            },
            _clean: function() {
                this.callBase();
                if (this === activeScrollbar) {
                    activeScrollbar = null
                }
                eventsEngine.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 "visibilityMode":
                    case "direction":
                        this._invalidate();
                        break;
                    case "scaleRatio":
                        this._update();
                        break;
                    default:
                        this.callBase.apply(this, arguments)
                }
            },
            update: commonUtils.deferRenderer(function() {
                this._adjustVisibility() && this.option("visible", true)
            })
        });
        var activeScrollbar = null;
        ready(function() {
            eventsEngine.subscribeGlobal(domAdapter.getDocument(), eventUtils.addNamespace(pointerEvents.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 $ = __webpack_require__( /*! ../../core/renderer */ 2),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            math = Math,
            titleize = __webpack_require__( /*! ../../core/utils/inflector */ 34).titleize,
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            windowUtils = __webpack_require__( /*! ../../core/utils/window */ 6),
            iteratorUtils = __webpack_require__( /*! ../../core/utils/iterator */ 3),
            isDefined = __webpack_require__( /*! ../../core/utils/type */ 1).isDefined,
            translator = __webpack_require__( /*! ../../animation/translator */ 24),
            Class = __webpack_require__( /*! ../../core/class */ 10),
            Animator = __webpack_require__( /*! ./animator */ 302),
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            Scrollbar = __webpack_require__( /*! ./ui.scrollbar */ 300),
            deferredUtils = __webpack_require__( /*! ../../core/utils/deferred */ 7),
            when = deferredUtils.when,
            Deferred = deferredUtils.Deferred;
        var realDevice = devices.real;
        var isSluggishPlatform = "win" === realDevice.platform || "android" === realDevice.platform;
        var SCROLLABLE_SIMULATED = "dxSimulatedScrollable",
            SCROLLABLE_STRATEGY = "dxScrollableStrategy",
            SCROLLABLE_SIMULATED_CURSOR = SCROLLABLE_SIMULATED + "Cursor",
            SCROLLABLE_SIMULATED_KEYBOARD = SCROLLABLE_SIMULATED + "Keyboard",
            SCROLLABLE_SIMULATED_CLASS = "dx-scrollable-simulated",
            SCROLLABLE_SCROLLBARS_HIDDEN = "dx-scrollable-scrollbars-hidden",
            SCROLLABLE_SCROLLBARS_ALWAYSVISIBLE = "dx-scrollable-scrollbars-alwaysvisible",
            SCROLLABLE_SCROLLBAR_CLASS = "dx-scrollable-scrollbar",
            VERTICAL = "vertical",
            HORIZONTAL = "horizontal",
            ACCELERATION = isSluggishPlatform ? .95 : .92,
            OUT_BOUNDS_ACCELERATION = .5,
            MIN_VELOCITY_LIMIT = 1,
            FRAME_DURATION = math.round(1e3 / 60),
            SCROLL_LINE_HEIGHT = 20,
            BOUNCE_MIN_VELOCITY_LIMIT = MIN_VELOCITY_LIMIT / 5,
            BOUNCE_DURATION = isSluggishPlatform ? 300 : 400,
            BOUNCE_FRAMES = BOUNCE_DURATION / FRAME_DURATION,
            BOUNCE_ACCELERATION_SUM = (1 - math.pow(ACCELERATION, BOUNCE_FRAMES)) / (1 - ACCELERATION);
        var KEY_CODES = {
            PAGE_UP: 33,
            PAGE_DOWN: 34,
            END: 35,
            HOME: 36,
            LEFT: 37,
            UP: 38,
            RIGHT: 39,
            DOWN: 40
        };
        var InertiaAnimator = Animator.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 isWheelEvent = function(e) {
            return "dxmousewheel" === e.type
        };
        var Scroller = Class.inherit({
            ctor: function(options) {
                this._initOptions(options);
                this._initAnimators();
                this._initScrollbar()
            },
            _initOptions: function(options) {
                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";
                iteratorUtils.each(options, function(optionName, optionValue) {
                    this["_" + optionName] = optionValue
                }.bind(this))
            },
            _initAnimators: function() {
                this._inertiaAnimator = new InertiaAnimator(this);
                this._bounceAnimator = new BounceAnimator(this)
            },
            _initScrollbar: function() {
                this._scrollbar = new Scrollbar($("<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
                }
                eventsEngine.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 (windowUtils.hasWindow() && !this._scaleRatio) {
                    var element = this._$element.get(0),
                        realDimension = this._getRealDimension(element, this._dimension),
                        baseDimension = this._getBaseDimension(element, this._dimension);
                    this._scaleRatio = realDimension / baseDimension
                }
                return this._scaleRatio || 1
            },
            _getRealDimension: function(element, dimension) {
                return math.round(element.getBoundingClientRect()[dimension])
            },
            _getBaseDimension: function(element, dimension) {
                var dimensionName = "offset" + titleize(dimension);
                return element[dimensionName]
            },
            _moveContentByTranslator: function(location) {
                var translateOffset, 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) {
                    translator.resetPosition(this._$content);
                    return
                }
                translator.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(),
                    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,
                    nextLocation = location + this._velocity;
                return location < this._minOffset && nextLocation >= this._minOffset || location > this._maxOffset && nextLocation <= this._maxOffset
            },
            _initHandler: function(e) {
                this._stopDeferred = new Deferred;
                this._stopScrolling();
                this._prepareThumbScrolling(e);
                return this._stopDeferred.promise()
            },
            _stopScrolling: commonUtils.deferRenderer(function() {
                this._hideScrollbar();
                this._inertiaAnimator.stop();
                this._bounceAnimator.stop()
            }),
            _prepareThumbScrolling: function(e) {
                if (isWheelEvent(e.originalEvent)) {
                    return
                }
                var $target = $(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;
                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 that = this;
                that._stopScrolling();
                return commonUtils.deferUpdate(function() {
                    that._resetScaleRatio();
                    that._updateLocation();
                    that._updateBounds();
                    that._updateScrollbar();
                    commonUtils.deferRender(function() {
                        that._moveScrollbar();
                        that._scrollbar.update()
                    })
                })
            },
            _resetScaleRatio: function() {
                this._scaleRatio = null
            },
            _updateLocation: function() {
                this._location = (translator.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: commonUtils.deferUpdater(function() {
                var that = this,
                    containerSize = that._containerSize(),
                    contentSize = that._contentSize();
                commonUtils.deferRender(function() {
                    that._scrollbar.option({
                        containerSize: containerSize,
                        contentSize: contentSize,
                        scaleRatio: that._getScaleRatio()
                    })
                })
            }),
            _moveToBounds: commonUtils.deferRenderer(commonUtils.deferUpdater(commonUtils.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()),
                    contentSize = this._getRealDimension(this._$content.get(0), this._dimension);
                if (!isOverflowHidden) {
                    var containerScrollSize = this._$content[0]["scroll" + titleize(this._dimension)] * this._getScaleRatio();
                    contentSize = math.max(containerScrollSize, contentSize)
                }
                return contentSize
            },
            _validateEvent: function(e) {
                var $target = $(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._scrollbar.cursorEnter()
            },
            _cursorLeaveHandler: function() {
                this._scrollbar.cursorLeave()
            },
            dispose: commonUtils.noop
        });
        var hoveredScrollable, activeScrollable;
        var SimulatedStrategy = Class.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 (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 (isWheelEvent(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);
                iteratorUtils.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.delta);
                this._eventForUserAction = e;
                this._eventHandler("move", e.delta)
            },
            _adjustDistance: function(distance) {
                distance.x *= this._validDirections[HORIZONTAL];
                distance.y *= this._validDirections[VERTICAL]
            },
            handleEnd: function(e) {
                this._resetActive();
                this._refreshCursorState(e.originalEvent && e.originalEvent.target);
                this._adjustDistance(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() {
                eventsEngine.off(this._$element, "." + SCROLLABLE_SIMULATED_KEYBOARD);
                if (!this.option("disabled") && this.option("useKeyboard")) {
                    eventsEngine.on(this._$element, eventUtils.addNamespace("keydown", SCROLLABLE_SIMULATED_KEYBOARD), this._keyDownHandler.bind(this))
                }
            },
            _keyDownHandler: function(e) {
                if (!this._$container.is(domAdapter.getActiveElement())) {
                    return
                }
                var handled = true;
                switch (e.keyCode) {
                    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) {
                this.scrollBy({
                    top: (lines.y || 0) * -SCROLL_LINE_HEIGHT,
                    left: (lines.x || 0) * -SCROLL_LINE_HEIGHT
                })
            },
            _scrollByPage: function(page) {
                var prop = this._wheelProp(),
                    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(),
                    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 that = this,
                    actionHandler = that._createActionByOption(optionName);
                return function() {
                    actionHandler(extend(that._createActionArgs(), arguments))
                }
            },
            _createActionArgs: function() {
                var scrollerX = this._scrollers[HORIZONTAL],
                    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),
                    deferreds = iteratorUtils.map(this._scrollers, function(scroller) {
                        return scroller["_" + eventName + "Handler"].apply(scroller, args)
                    });
                return when.apply($, deferreds).promise()
            },
            location: function location() {
                var location = translator.locate(this._$content);
                location.top -= this._$container.scrollTop();
                location.left -= this._$container.scrollLeft();
                return location
            },
            disabledChanged: function() {
                this._attachCursorHandlers()
            },
            _attachCursorHandlers: function() {
                eventsEngine.off(this._$element, "." + SCROLLABLE_SIMULATED_CURSOR);
                if (!this.option("disabled") && this._isHoverMode()) {
                    eventsEngine.on(this._$element, eventUtils.addNamespace("mouseenter", SCROLLABLE_SIMULATED_CURSOR), this._cursorEnterHandler.bind(this));
                    eventsEngine.on(this._$element, eventUtils.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 = $(target);
                var $scrollable = $target.closest("." + 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 that = this;
                var result = this._eventHandler("update").done(this._updateAction);
                return when(result, commonUtils.deferUpdate(function() {
                    var allowedDirections = that._allowedDirections();
                    commonUtils.deferRender(function() {
                        var touchDirection = allowedDirections.vertical ? "pan-x" : "";
                        touchDirection = allowedDirections.horizontal ? "pan-y" : touchDirection;
                        touchDirection = allowedDirections.vertical && allowedDirections.horizontal ? "none" : touchDirection;
                        that._$container.css("touchAction", touchDirection)
                    });
                    return when().promise()
                }))
            },
            _allowedDirections: function() {
                var bounceEnabled = this.option("bounceEnabled"),
                    verticalScroller = this._scrollers[VERTICAL],
                    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],
                    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 isWheelEvent(e) ? this._validateWheel(e) : this._validateMove(e)
            },
            _validateWheel: function(e) {
                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;
                return contentGreaterThanContainer && (locatedNotAtBound || scrollFromMin || scrollFromMax)
            },
            _validateMove: function(e) {
                if (!this.option("scrollByContent") && !$(e.target).closest("." + SCROLLABLE_SCROLLBAR_CLASS).length) {
                    return false
                }
                return this._allowedDirection()
            },
            getDirection: function(e) {
                return isWheelEvent(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._gestureEndTimer)
            },
            _detachEventHandlers: function() {
                eventsEngine.off(this._$element, "." + SCROLLABLE_SIMULATED_CURSOR);
                eventsEngine.off(this._$container, "." + 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 */ 4).noop,
            Class = __webpack_require__( /*! ../../core/class */ 10),
            abstract = Class.abstract,
            animationFrame = __webpack_require__( /*! ../../animation/frame */ 115);
        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/ui/color_box/color_view.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            translator = __webpack_require__( /*! ../../animation/translator */ 24),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            Color = __webpack_require__( /*! ../../color */ 91),
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14),
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            Editor = __webpack_require__( /*! ../editor/editor */ 45),
            NumberBox = __webpack_require__( /*! ../number_box */ 118),
            TextBox = __webpack_require__( /*! ../text_box */ 101),
            Draggable = __webpack_require__( /*! ../draggable */ 319),
            clickEvent = __webpack_require__( /*! ../../events/click */ 17);
        var COLOR_VIEW_CLASS = "dx-colorview",
            COLOR_VIEW_CONTAINER_CLASS = "dx-colorview-container",
            COLOR_VIEW_ROW_CLASS = "dx-colorview-container-row",
            COLOR_VIEW_CELL_CLASS = "dx-colorview-container-cell",
            COLOR_VIEW_PALETTE_CLASS = "dx-colorview-palette",
            COLOR_VIEW_PALETTE_CELL_CLASS = "dx-colorview-palette-cell",
            COLOR_VIEW_PALETTE_HANDLE_CLASS = "dx-colorview-palette-handle",
            COLOR_VIEW_PALETTE_GRADIENT_CLASS = "dx-colorview-palette-gradient",
            COLOR_VIEW_PALETTE_GRADIENT_WHITE_CLASS = "dx-colorview-palette-gradient-white",
            COLOR_VIEW_PALETTE_GRADIENT_BLACK_CLASS = "dx-colorview-palette-gradient-black",
            COLOR_VIEW_HUE_SCALE_CLASS = "dx-colorview-hue-scale",
            COLOR_VIEW_HUE_SCALE_CELL_CLASS = "dx-colorview-hue-scale-cell",
            COLOR_VIEW_HUE_SCALE_HANDLE_CLASS = "dx-colorview-hue-scale-handle",
            COLOR_VIEW_HUE_SCALE_WRAPPER_CLASS = "dx-colorview-hue-scale-wrapper",
            COLOR_VIEW_CONTROLS_CONTAINER_CLASS = "dx-colorview-controls-container",
            COLOR_VIEW_RED_LABEL_CLASS = "dx-colorview-label-red",
            COLOR_VIEW_GREEN_LABEL_CLASS = "dx-colorview-label-green",
            COLOR_VIEW_BLUE_LABEL_CLASS = "dx-colorview-label-blue",
            COLOR_VIEW_HEX_LABEL_CLASS = "dx-colorview-label-hex",
            COLOR_VIEW_ALPHA_CHANNEL_SCALE_CLASS = "dx-colorview-alpha-channel-scale",
            COLOR_VIEW_APLHA_CHANNEL_ROW_CLASS = "dx-colorview-alpha-channel-row",
            COLOR_VIEW_ALPHA_CHANNEL_SCALE_WRAPPER_CLASS = "dx-colorview-alpha-channel-wrapper",
            COLOR_VIEW_ALPHA_CHANNEL_LABEL_CLASS = "dx-colorview-alpha-channel-label",
            COLOR_VIEW_ALPHA_CHANNEL_HANDLE_CLASS = "dx-colorview-alpha-channel-handle",
            COLOR_VIEW_ALPHA_CHANNEL_CELL_CLASS = "dx-colorview-alpha-channel-cell",
            COLOR_VIEW_ALPHA_CHANNEL_BORDER_CLASS = "dx-colorview-alpha-channel-border",
            COLOR_VIEW_COLOR_PREVIEW = "dx-colorview-color-preview",
            COLOR_VIEW_COLOR_PREVIEW_CONTAINER_CLASS = "dx-colorview-color-preview-container",
            COLOR_VIEW_COLOR_PREVIEW_CONTAINER_INNER_CLASS = "dx-colorview-color-preview-container-inner",
            COLOR_VIEW_COLOR_PREVIEW_COLOR_CURRENT = "dx-colorview-color-preview-color-current",
            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,
                    getHorizontalPaletteStep = function(e) {
                        var step = 100 / that._paletteWidth;
                        if (e.shiftKey) {
                            step *= that.option("keyStep")
                        }
                        step = step > 1 ? step : 1;
                        return Math.round(step)
                    },
                    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()
                    },
                    getVerticalPaletteStep = function(e) {
                        var step = 100 / that._paletteHeight;
                        if (e.shiftKey) {
                            step *= that.option("keyStep")
                        }
                        step = step > 1 ? step : 1;
                        return Math.round(step)
                    },
                    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()
                    },
                    updatePaletteValue = function() {
                        that._placePaletteHandle();
                        that._updateColorFromHsv(that._currentColor.hsv.h, that._currentColor.hsv.s, that._currentColor.hsv.v)
                    },
                    getHueScaleStep = function(e) {
                        var step = 360 / (that._hueScaleWrapperHeight - that._hueScaleHandleHeight);
                        if (e.shiftKey) {
                            step *= that.option("keyStep")
                        }
                        step = step > 1 ? step : 1;
                        return step
                    },
                    updateHueScaleValue = function(step) {
                        that._currentColor.hsv.h += step;
                        that._placeHueScaleHandle();
                        var handleLocation = translator.locate(that._$hueScaleHandle);
                        that._updateColorHue(handleLocation.top + that._hueScaleHandleHeight / 2)
                    },
                    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
                    },
                    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,
                    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)
                }
            },
            _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),
                    renderedRowsCount = $renderedRows.length,
                    rowCount = this.option("editAlphaChannel") ? 2 : 1,
                    delta = renderedRowsCount - rowCount;
                if (delta > 0) {
                    $renderedRows.eq(-1).remove()
                }
                if (delta < 0) {
                    delta = Math.abs(delta);
                    var i, rows = [];
                    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),
                    $paletteGradientWhite = $("<div>").addClass([COLOR_VIEW_PALETTE_GRADIENT_CLASS, COLOR_VIEW_PALETTE_GRADIENT_WHITE_CLASS].join(" ")),
                    $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, {
                    area: this._$palette,
                    allowMoveByClick: true,
                    boundOffset: function() {
                        return -this._paletteHandleHeight / 2
                    }.bind(this),
                    onDrag: 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, {
                    area: this._$hueScaleWrapper,
                    allowMoveByClick: true,
                    direction: "vertical",
                    onDrag: 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,
                    handleHeight = this._hueScaleHandleHeight,
                    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)),
                    saturation = this._currentColor.hsv.s,
                    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_CURRENT].join(" "));
                this._$newColor = $("<div>").addClass([COLOR_VIEW_COLOR_PREVIEW, COLOR_VIEW_COLOR_PREVIEW_COLOR_NEW].join(" "));
                this._makeTransparentBackground(this._$currentColor, this._currentColor);
                this._makeTransparentBackground(this._$newColor, this._currentColor);
                $colorsPreviewContainerInner.append([this._$currentColor, this._$newColor])
            },
            _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 $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
                }, {
                    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),
                    $alphaChannelBorder = $("<div>").addClass(COLOR_VIEW_ALPHA_CHANNEL_BORDER_CLASS).appendTo($alphaChannelScaleCell),
                    $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,
                    colorAsRgb = [color.r, color.g, color.b].join(","),
                    colorAsHex = color.toHex().replace("#", "");
                var combineGradientString = function(colorAsRgb, colorAsHex) {
                    var rtlEnabled = this.option("rtlEnabled"),
                        startColor = "rgba(" + colorAsRgb + ", " + (rtlEnabled ? "1" : "0") + ")",
                        finishColor = "rgba(" + colorAsRgb + ", " + (rtlEnabled ? "0" : "1") + ")",
                        startColorIE = "'#" + (rtlEnabled ? "00" : "") + colorAsHex + "'",
                        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,
                    $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._makeTransparentBackground(this._$newColor, this._currentColor);
                this.applyColor()
            },
            _renderAlphaChannelHandle: function($parent) {
                this._$alphaChannelHandle = $("<div>").addClass(COLOR_VIEW_ALPHA_CHANNEL_HANDLE_CLASS).appendTo($parent);
                this._createComponent(this._$alphaChannelHandle, Draggable, {
                    area: $parent,
                    allowMoveByClick: true,
                    direction: "horizontal",
                    onDrag: function() {
                        this._updateByDrag = true;
                        var $alphaChannelHandle = this._$alphaChannelHandle,
                            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,
                    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, 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"),
                    g = this._rgbInputs[1].option("value"),
                    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;
                this._makeTransparentBackground(this._$newColor, this._currentColor);
                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 "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 */ 229),
            DateBoxStrategy = __webpack_require__( /*! ./ui.date_box.strategy */ 177),
            dateUtils = __webpack_require__( /*! ../../core/utils/date */ 22),
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            isFunction = __webpack_require__( /*! ../../core/utils/type */ 1).isFunction,
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14);
        var CalendarStrategy = DateBoxStrategy.inherit({
            NAME: "Calendar",
            supportedKeys: function() {
                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");
                                contouredDate && this.dateBoxValue(contouredDate, e);
                                this.dateBox.close();
                                this.dateBox._valueChangeEventHandler(e)
                            } else {
                                return true
                            }
                        } else {
                            this.dateBox._valueChangeEventHandler(e)
                        }
                    }.bind(this)
                }
            },
            getDisplayFormat: function(displayFormat) {
                return displayFormat || "shortdate"
            },
            _getWidgetName: function() {
                return Calendar
            },
            _getWidgetOptions: function() {
                var disabledDates = this.dateBox.option("disabledDates");
                return extend(this.dateBox.option("calendarOptions"), {
                    value: this.dateBoxValue() || null,
                    dateSerializationFormat: null,
                    _keyboardProcessor: this._widgetKeyboardProcessor,
                    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.dateBox.setAria("activedescendant", e.actionValue)
            },
            popupConfig: function(_popupConfig) {
                var toolbarItems = _popupConfig.toolbarItems,
                    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: {
                            onClick: function() {
                                this._widget._toTodayView()
                            }.bind(this),
                            text: messageLocalization.format("dxCalendar-todayButtonText"),
                            type: "today"
                        }
                    })
                }
                return extend(true, _popupConfig, {
                    toolbarItems: toolbarItems,
                    position: {
                        collision: "flipfit flip"
                    }
                })
            },
            _valueChangedHandler: function(e) {
                var dateBox = this.dateBox,
                    value = e.value,
                    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() {
                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/progress_bar.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            TrackBar = __webpack_require__( /*! ./track_bar */ 215),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            isFunction = __webpack_require__( /*! ../core/utils/type */ 1).isFunction,
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8);
        var PROGRESSBAR_CLASS = "dx-progressbar",
            PROGRESSBAR_CONTAINER_CLASS = "dx-progressbar-container",
            PROGRESSBAR_RANGE_CONTAINER_CLASS = "dx-progressbar-range-container",
            PROGRESSBAR_RANGE_CLASS = "dx-progressbar-range",
            PROGRESSBAR_WRAPPER_CLASS = "dx-progressbar-wrapper",
            PROGRESSBAR_STATUS_CLASS = "dx-progressbar-status",
            PROGRESSBAR_INDETERMINATE_SEGMENT_CONTAINER = "dx-progressbar-animating-container",
            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: {
                        platform: "win"
                    },
                    options: {
                        _animatingSegmentCount: 5
                    }
                }, {
                    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"),
                    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"),
                    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/form/instance_storage.js ***!
      \**********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _createClass = function() {
            function defineProperties(target, props) {
                for (var i = 0; i < props.length; i++) {
                    var descriptor = props[i];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) {
                        descriptor.writable = true
                    }
                    Object.defineProperty(target, descriptor.key, descriptor)
                }
            }
            return function(Constructor, protoProps, staticProps) {
                if (protoProps) {
                    defineProperties(Constructor.prototype, protoProps)
                }
                if (staticProps) {
                    defineProperties(Constructor, staticProps)
                }
                return Constructor
            }
        }();
        var _guid = __webpack_require__( /*! ../../core/guid */ 48);
        var _guid2 = _interopRequireDefault(_guid);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 3);

        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")
            }
        }
        var InstanceStorage = function() {
            function InstanceStorage() {
                _classCallCheck(this, InstanceStorage);
                this._storage = {}
            }
            _createClass(InstanceStorage, [{
                key: "_find",
                value: function(condition) {
                    var resultInstance;
                    (0, _iterator.each)(this._storage, function(guid, _ref) {
                        var instance = _ref.instance,
                            item = _ref.item;
                        if (condition(item)) {
                            resultInstance = instance;
                            return false
                        }
                    });
                    return resultInstance
                }
            }, {
                key: "clear",
                value: function() {
                    this._storage = {}
                }
            }, {
                key: "add",
                value: function(item, instance, guid) {
                    guid = guid || new _guid2.default;
                    this._storage[guid] = {
                        item: item,
                        instance: instance
                    };
                    return guid
                }
            }, {
                key: "extend",
                value: function(instanceStorage) {
                    var _this = this;
                    instanceStorage.each(function(instance, item, guid) {
                        if (_this._storage[guid]) {
                            _this._storage[guid].instance = instance
                        } else {
                            _this.add(item, instance, guid)
                        }
                    })
                }
            }, {
                key: "findByItem",
                value: function(item) {
                    return this._find(function(storedItem) {
                        return storedItem === item
                    })
                }
            }, {
                key: "findByName",
                value: function(name) {
                    return this._find(function(item) {
                        return name === item.name
                    })
                }
            }, {
                key: "findByDataField",
                value: function(dataField) {
                    return this._find(function(item) {
                        return dataField === item.dataField
                    })
                }
            }, {
                key: "each",
                value: function(handler) {
                    (0, _iterator.each)(this._storage, function(guid, _ref2) {
                        var instance = _ref2.instance,
                            item = _ref2.item;
                        if (instance) {
                            handler(instance, item, guid)
                        }
                    })
                }
            }]);
            return InstanceStorage
        }();
        exports.default = InstanceStorage
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/ui/responsive_box.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            commonUtils = __webpack_require__( /*! ../core/utils/common */ 4),
            typeUtils = __webpack_require__( /*! ../core/utils/type */ 1),
            errors = __webpack_require__( /*! ./widget/ui.errors */ 18),
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6),
            window = windowUtils.getWindow(),
            iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 3),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            Box = __webpack_require__( /*! ./box */ 176),
            CollectionWidget = __webpack_require__( /*! ./collection/ui.collection_widget.edit */ 47);
        var RESPONSIVE_BOX_CLASS = "dx-responsivebox",
            SCREEN_SIZE_CLASS_PREFIX = RESPONSIVE_BOX_CLASS + "-screen-",
            BOX_ITEM_CLASS = "dx-box-item",
            BOX_ITEM_DATA_KEY = "dxBoxItemData",
            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.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))
            },
            _prepareRowsAndCols: function() {
                if (this._isSingleColumnScreen()) {
                    this._prepareSingleColumnScreenItems();
                    this._rows = this._defaultSizeConfig(this._screenItems.length);
                    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))
            },
            _defaultSizeConfig: function(size) {
                var defaultSizeConfig = {
                    ratio: 1,
                    baseSize: 0,
                    minSize: 0,
                    maxSize: 0
                };
                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),
                        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 sizeConfigs = "row" === direction ? this._rows : this._cols;
                var result = {
                    ratio: 0,
                    baseSize: 0,
                    minSize: 0,
                    maxSize: 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
                }
                result.minSize = result.minSize ? result.minSize : "auto";
                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/tab_panel.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            support = __webpack_require__( /*! ../core/utils/support */ 44),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            devices = __webpack_require__( /*! ../core/devices */ 16),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            MultiView = __webpack_require__( /*! ./multi_view */ 309),
            Tabs = __webpack_require__( /*! ./tabs */ 196),
            iconUtils = __webpack_require__( /*! ../core/utils/icon */ 87),
            getPublicElement = __webpack_require__( /*! ../core/utils/dom */ 12).getPublicElement,
            BindableTemplate = __webpack_require__( /*! ./widget/bindable_template */ 60),
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6);
        var TABPANEL_CLASS = "dx-tabpanel",
            TABPANEL_TABS_CLASS = "dx-tabpanel-tabs",
            TABPANEL_CONTAINER_CLASS = "dx-tabpanel-container",
            TABS_ITEM_TEXT_CLASS = "dx-tab-text";
        var TabPanel = MultiView.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    itemTitleTemplate: "title",
                    hoverStateEnabled: true,
                    showNavButtons: false,
                    scrollByContent: true,
                    scrollingEnabled: true,
                    onTitleClick: null,
                    onTitleHold: null,
                    onTitleRendered: null
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return "desktop" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }, {
                    device: function() {
                        return !support.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._defaultTemplates.title = new BindableTemplate(function($container, data) {
                    $container.text(data.title || String(data));
                    var $iconElement = iconUtils.getImageContainer(data.icon);
                    $container.wrapInner($("<span>").addClass(TABS_ITEM_TEXT_CLASS));
                    $iconElement && $iconElement.prependTo($container)
                }, ["title", "html", "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) {
                    return
                }
                var $element = this.$element();
                this._$tabContainer = $("<div>").addClass(TABPANEL_TABS_CLASS).appendTo($element);
                var $tabs = $("<div>").appendTo(this._$tabContainer);
                this._tabs = this._createComponent($tabs, Tabs, this._tabConfig());
                this._$container = $("<div>").addClass(TABPANEL_CONTAINER_CLASS).appendTo($element);
                this._$container.append(this._$wrapper);
                this._updateLayout()
            },
            _updateLayout: function() {
                if (windowUtils.hasWindow()) {
                    var tabsHeight = this._$tabContainer.outerHeight();
                    this._$container.css({
                        marginTop: -tabsHeight,
                        paddingTop: tabsHeight
                    })
                }
            },
            _refreshActiveDescendant: function() {
                if (!this._tabs) {
                    return
                }
                var tabs = this._tabs,
                    tabItems = tabs.itemElements(),
                    $activeTab = $(tabItems[tabs.option("selectedIndex")]),
                    id = this.getFocusedItemId();
                this.setAria("controls", void 0, $(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"),
                    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 = $(args.value);
                                var $newItem = this._itemElements().eq($value.index());
                                this.option("focusedElement", getPublicElement($newItem))
                            } else {
                                this.option("focusedElement", args.value)
                            }
                        }
                    }.bind(this),
                    onFocusIn: function(args) {
                        this._focusInHandler(args.event)
                    }.bind(this),
                    onFocusOut: function(args) {
                        this._focusOutHandler(args.event)
                    }.bind(this)
                }
            },
            _renderFocusTarget: function() {
                this._focusTarget().attr("tabIndex", -1);
                this._refreshActiveDescendant()
            },
            _updateFocusState: function(e, isFocused) {
                this.callBase(e, isFocused);
                if (e.target === this._tabs._focusTarget().get(0)) {
                    this._toggleFocusClass(isFocused, this._focusTarget())
                }
            },
            _setTabsOption: function(name, value) {
                if (this._tabs) {
                    this._tabs.option(name, value)
                }
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._tabs._dimensionChanged();
                    this._updateLayout()
                }
            },
            _optionChanged: function(args) {
                var name = args.name,
                    value = args.value,
                    fullName = args.fullName;
                switch (name) {
                    case "dataSource":
                        this.callBase(args);
                        break;
                    case "items":
                        this._setTabsOption(fullName, value);
                        this._updateLayout();
                        if (!this.option("repaintChangesOnly")) {
                            this._tabs.repaint()
                        }
                        this.callBase(args);
                        break;
                    case "selectedIndex":
                    case "selectedItem":
                    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 ? $(value).index() : value;
                        var newItem = value ? this._tabs._itemElements().eq(id) : value;
                        this._setTabsOption("focusedElement", 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;
                    default:
                        this.callBase(args)
                }
            },
            _clean: function() {
                clearTimeout(this._resizeEventTimer);
                this.callBase()
            }
        });
        registerComponent("dxTabPanel", TabPanel);
        module.exports = TabPanel
    },
    /*!***********************************************!*\
      !*** ./artifacts/transpiled/ui/multi_view.js ***!
      \***********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            fx = __webpack_require__( /*! ../animation/fx */ 31),
            translator = __webpack_require__( /*! ../animation/translator */ 24),
            mathUtils = __webpack_require__( /*! ../core/utils/math */ 30),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            noop = __webpack_require__( /*! ../core/utils/common */ 4).noop,
            domUtils = __webpack_require__( /*! ../core/utils/dom */ 12),
            isDefined = __webpack_require__( /*! ../core/utils/type */ 1).isDefined,
            devices = __webpack_require__( /*! ../core/devices */ 16),
            getPublicElement = __webpack_require__( /*! ../core/utils/dom */ 12).getPublicElement,
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            CollectionWidget = __webpack_require__( /*! ./collection/ui.collection_widget.live_update */ 194).default,
            Swipeable = __webpack_require__( /*! ../events/gesture/swipeable */ 117),
            Deferred = __webpack_require__( /*! ../core/utils/deferred */ 7).Deferred;
        var MULTIVIEW_CLASS = "dx-multiview",
            MULTIVIEW_WRAPPER_CLASS = "dx-multiview-wrapper",
            MULTIVIEW_ITEM_CONTAINER_CLASS = "dx-multiview-item-container",
            MULTIVIEW_ITEM_CLASS = "dx-multiview-item",
            MULTIVIEW_ITEM_HIDDEN_CLASS = "dx-multiview-item-hidden",
            MULTIVIEW_ITEM_DATA_KEY = "dxMultiViewItemData",
            MULTIVIEW_ANIMATION_DURATION = 200;
        var toNumber = function(value) {
            return +value
        };
        var position = function($element) {
            return translator.locate($element).left
        };
        var move = function($element, position) {
            translator.move($element, {
                left: position
            })
        };
        var animation = {
            moveTo: function($element, position, duration, completeAction) {
                fx.animate($element, {
                    type: "slide",
                    to: {
                        left: position
                    },
                    duration: duration,
                    complete: completeAction
                })
            },
            complete: function($element) {
                fx.stop($element, true)
            }
        };
        var MultiView = CollectionWidget.inherit({
            _activeStateUnit: "." + MULTIVIEW_ITEM_CLASS,
            _supportedKeys: function() {
                return extend(this.callBase(), {
                    pageUp: noop,
                    pageDown: noop
                })
            },
            _getDefaultOptions: function() {
                return 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" === devices.real().deviceType && !devices.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 = $("<div>").addClass(MULTIVIEW_WRAPPER_CLASS);
                this._$wrapper.appendTo($element);
                this._$itemContainer = $("<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()
            },
            _renderItemContent: function(args) {
                var renderContentDeferred = new Deferred;
                var that = this,
                    callBase = this.callBase;
                var deferred = new 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() {
                this.callBase();
                var selectedItemIndices = this._getSelectedItemIndices();
                this._updateItemsPosition(selectedItemIndices[0]);
                this._updateItemsVisibility(selectedItemIndices[0])
            },
            _renderSelection: function(addedSelection) {
                this._updateItemsVisibility(addedSelection[0])
            },
            _updateItems: function(selectedIndex, newIndex) {
                this._updateItemsPosition(selectedIndex, newIndex);
                this._updateItemsVisibility(selectedIndex, newIndex)
            },
            _updateItemsPosition: function(selectedIndex, newIndex) {
                var $itemElements = this._itemElements(),
                    positionSign = -this._animationDirection(newIndex, selectedIndex),
                    $selectedItem = $itemElements.eq(selectedIndex);
                move($selectedItem, 0);
                move($itemElements.eq(newIndex), 100 * positionSign + "%")
            },
            _updateItemsVisibility: function(selectedIndex, newIndex) {
                var $itemElements = this._itemElements();
                $itemElements.each(function(itemIndex, item) {
                    var $item = $(item),
                        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),
                    hasItemContent = $item.find(this._itemContentClass()).length > 0;
                if (isDefined(index) && !hasItemContent) {
                    this._deferredItems[index].resolve();
                    domUtils.triggerResizeEvent($item)
                }
            },
            _refreshItem: function($item, item) {
                this.callBase($item, item);
                this._updateItemsVisibility(this.option("selectedIndex"))
            },
            _setAriaSelected: noop,
            _updateSelection: function(addedSelection, removedSelection) {
                var newIndex = addedSelection[0],
                    prevIndex = removedSelection[0];
                animation.complete(this._$itemContainer);
                this._updateItems(prevIndex, newIndex);
                var animationDirection = this._animationDirection(newIndex, prevIndex);
                this._animateItemContainer(animationDirection * this._itemWidth(), function() {
                    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),
                    indexDifference = (prevIndex - newIndex) * this._getRTLSignCorrection() * this._getItemFocusLoopSignCorrection(),
                    isSwipePresent = 0 !== containerPosition,
                    directionSignVariable = isSwipePresent ? containerPosition : indexDifference;
                return mathUtils.sign(directionSignVariable)
            },
            _initSwipeable: function() {
                this._createComponent(this.$element(), Swipeable, {
                    disabled: !this.option("swipeEnabled"),
                    elastic: false,
                    itemSizeFunc: this._itemWidth.bind(this),
                    onStart: function(args) {
                        this._swipeStartHandler(args.event)
                    }.bind(this),
                    onUpdated: function(args) {
                        this._swipeUpdateHandler(args.event)
                    }.bind(this),
                    onEnd: function(args) {
                        this._swipeEndHandler(args.event)
                    }.bind(this)
                })
            },
            _swipeStartHandler: function(e) {
                animation.complete(this._$itemContainer);
                var selectedIndex = this.option("selectedIndex"),
                    loop = this.option("loop"),
                    lastIndex = this._itemsCount() - 1,
                    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,
                    swipeDirection = mathUtils.sign(offset) * this._getRTLSignCorrection();
                move(this._$itemContainer, offset * this._itemWidth());
                if (swipeDirection !== this._swipeDirection) {
                    this._swipeDirection = swipeDirection;
                    var selectedIndex = this.option("selectedIndex"),
                        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", getPublicElement($selectedElement))
                } else {
                    this._animateItemContainer(0, 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()
                }
            },
            _optionChanged: function(args) {
                var value = args.value;
                switch (args.name) {
                    case "loop":
                        this.option("loopItemFocus", value);
                        break;
                    case "animationEnabled":
                        break;
                    case "swipeEnabled":
                        Swipeable.getInstance(this.$element()).option("disabled", !value);
                        break;
                    case "deferRendering":
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        registerComponent("dxMultiView", MultiView);
        module.exports = MultiView;
        module.exports.animation = animation
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/tabs/item.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            CollectionWidgetItem = __webpack_require__( /*! ../collection/item */ 154);
        var TABS_ITEM_BADGE_CLASS = "dx-tabs-item-badge",
            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/validation_group.js ***!
      \*****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            DOMComponent = __webpack_require__( /*! ../core/dom_component */ 59),
            ValidationSummary = __webpack_require__( /*! ./validation_summary */ 216),
            ValidationEngine = __webpack_require__( /*! ./validation_engine */ 94),
            Validator = __webpack_require__( /*! ./validator */ 195);
        var VALIDATION_ENGINE_CLASS = "dx-validationgroup";
        var ValidationGroup = DOMComponent.inherit({
            _getDefaultOptions: function() {
                return this.callBase()
            },
            _init: function() {
                this.callBase()
            },
            _initMarkup: function() {
                var $element = this.$element();
                $element.addClass(VALIDATION_ENGINE_CLASS);
                $element.find(".dx-validator").each(function(_, validatorContainer) {
                    Validator.getInstance($(validatorContainer))._initGroupRegistration()
                });
                $element.find(".dx-validationsummary").each(function(_, summaryContainer) {
                    ValidationSummary.getInstance($(summaryContainer))._initGroupRegistration()
                });
                this.callBase()
            },
            validate: function() {
                return ValidationEngine.validateGroup(this)
            },
            reset: function() {
                return ValidationEngine.resetGroup(this)
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    default:
                        this.callBase(args)
                }
            },
            _dispose: function() {
                ValidationEngine.removeGroup(this);
                this.$element().removeClass(VALIDATION_ENGINE_CLASS);
                this.callBase()
            }
        });
        registerComponent("dxValidationGroup", ValidationGroup);
        module.exports = ValidationGroup
    },
    /*!**************************************************************************!*\
      !*** ./artifacts/transpiled/ui/toolbar/ui.toolbar.strategy.list_base.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7).Deferred,
            ToolbarStrategy = __webpack_require__( /*! ./ui.toolbar.strategy */ 217),
            translator = __webpack_require__( /*! ../../animation/translator */ 24),
            hideTopOverlayCallback = __webpack_require__( /*! ../../mobile/hide_top_overlay */ 137).hideCallback,
            fx = __webpack_require__( /*! ../../animation/fx */ 31),
            Overlay = __webpack_require__( /*! ../overlay */ 64),
            List = __webpack_require__( /*! ../list/ui.list.base */ 174);
        var TOOLBAR_LIST_VISIBLE_CLASS = "dx-toolbar-list-visible",
            SUBMENU_ANIMATION_EASING = "easeOutCubic",
            SUBMENU_HIDE_DURATION = 200,
            SUBMENU_SHOW_DURATION = 400;
        var ListStrategy = ToolbarStrategy.inherit({
            render: function() {
                this._renderListOverlay();
                this.callBase();
                this._changeListVisible(this._toolbar.option("visible"))
            },
            _renderWidget: function() {
                if (!this._hasVisibleMenuItems()) {
                    return
                }
                this.callBase()
            },
            _menuWidgetClass: function() {
                return List
            },
            _menuContainer: function() {
                return this._listOverlay.$content()
            },
            _menuButtonOptions: function() {
                return extend({}, this.callBase(), {
                    activeStateEnabled: false,
                    text: "..."
                })
            },
            _widgetOptions: function() {
                return extend({}, this.callBase(), {
                    width: "100%",
                    indicateLoading: false
                })
            },
            _renderListOverlay: function() {
                var $listOverlay = $("<div>").appendTo(this._toolbar.$element());
                this._listOverlay = this._toolbar._createComponent($listOverlay, Overlay, this._listOverlayConfig())
            },
            _listOverlayConfig: function() {
                return {
                    container: false,
                    deferRendering: false,
                    shading: false,
                    height: "auto",
                    width: "100%",
                    showTitle: false,
                    closeOnOutsideClick: this._listOutsideClickHandler.bind(this),
                    position: null,
                    animation: null,
                    closeOnBackButton: false
                }
            },
            _listOutsideClickHandler: function(e) {
                if (!$(e.target).closest(this._listOverlay.$content()).length) {
                    this._toggleMenu(false, true)
                }
            },
            _getListHeight: function() {
                var listHeight = this._listOverlay.$content().find(".dx-list").height(),
                    semiHiddenHeight = this._toolbar._$toolbarItemsContainer.height() - this._toolbar.$element().height();
                return listHeight + semiHiddenHeight
            },
            _hideTopOverlayHandler: function() {
                this._toggleMenu(false, true)
            },
            _toggleHideTopOverlayCallback: function() {
                if (this._closeCallback) {
                    hideTopOverlayCallback.remove(this._closeCallback)
                }
                if (this._menuShown) {
                    this._closeCallback = this._hideTopOverlayHandler.bind(this);
                    hideTopOverlayCallback.add(this._closeCallback)
                }
            },
            _calculatePixelOffset: function(offset) {
                offset = (offset || 0) - 1;
                var maxOffset = this._getListHeight();
                return offset * maxOffset
            },
            _renderMenuPosition: function(offset, animate) {
                var pos = this._calculatePixelOffset(offset),
                    element = this._listOverlay.$content();
                if (animate) {
                    return this._animateMenuToggling(element, pos, this._menuShown)
                }
                translator.move(element, {
                    top: pos
                });
                return (new Deferred).resolve().promise()
            },
            _animateMenuToggling: function($element, position, isShowAnimation) {
                var duration = isShowAnimation ? SUBMENU_SHOW_DURATION : SUBMENU_HIDE_DURATION;
                return fx.animate($element, {
                    type: "slide",
                    to: {
                        top: position
                    },
                    easing: SUBMENU_ANIMATION_EASING,
                    duration: duration
                })
            },
            _toggleMenu: function(visible, animate) {
                this.callBase.apply(this, arguments);
                this._toggleHideTopOverlayCallback();
                this._renderMenuPosition(this._menuShown ? 0 : 1, animate).done(function() {
                    this._toolbar.$element().toggleClass(TOOLBAR_LIST_VISIBLE_CLASS, visible)
                }.bind(this))
            },
            _changeListVisible: function(value) {
                if (this._listOverlay) {
                    this._listOverlay.option("visible", value);
                    this._toggleMenu(false, false)
                }
            },
            handleToolbarVisibilityChange: function(value) {
                this._changeListVisible(value)
            }
        });
        module.exports = ListStrategy
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/ui/map/provider.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Promise = __webpack_require__( /*! ../../core/polyfills/promise */ 104),
            Class = __webpack_require__( /*! ../../core/class */ 10),
            map = __webpack_require__( /*! ../../core/utils/iterator */ 3).map,
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            isPlainObject = typeUtils.isPlainObject,
            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()
                        }),
                        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 */ 104),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            iteratorUtils = __webpack_require__( /*! ../../core/utils/iterator */ 3),
            Provider = __webpack_require__( /*! ./provider */ 313),
            abstract = Provider.abstract;
        var DynamicProvider = Provider.inherit({
            _geocodeLocation: function(location) {
                return new Promise(function(resolve) {
                    var cache = this._geocodedLocations,
                        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/slider.js ***!
      \*******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./slider/ui.slider */ 562)
    },
    /*!************************************************************!*\
      !*** ./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),
            Widget = __webpack_require__( /*! ../widget/ui.widget */ 28),
            Tooltip = __webpack_require__( /*! ../tooltip */ 204),
            translator = __webpack_require__( /*! ../../animation/translator */ 24),
            positionUtils = __webpack_require__( /*! ../../animation/position */ 78),
            mathUtils = __webpack_require__( /*! ../../core/utils/math */ 30),
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            numberLocalization = __webpack_require__( /*! ../../localization/number */ 49);
        var SLIDER_CLASS = "dx-slider",
            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(),
                    closeOnBackButton: false,
                    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 = this._$tooltipContent.get(0).getBoundingClientRect().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,
                    arrowMinLeft = this._contentLocate.left,
                    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),
            Guid = __webpack_require__( /*! ../../core/guid */ 48),
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            Popover = __webpack_require__( /*! ../popover */ 134),
            TOOLTIP_CLASS = "dx-tooltip",
            TOOLTIP_WRAPPER_CLASS = "dx-tooltip-wrapper";
        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")),
                    label = showing ? this._contentId : void 0;
                this.setAria("describedby", label, $target)
            }
        });
        registerComponent("dxTooltip", Tooltip);
        module.exports = Tooltip
    },
    /*!**********************************************************!*\
      !*** ./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)) {
                key = JSON.stringify(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 = {},
                newIndexByKey = {},
                addedCount = 0,
                removeCount = 0,
                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],
                    oldNextIndex = index - addedCount + removeCount,
                    nextOldItem = oldItems[oldNextIndex],
                    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),
                        oldIndex = oldIndexByKey[key],
                        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/draggable.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            window = __webpack_require__( /*! ../core/utils/window */ 6).getWindow(),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            stringUtils = __webpack_require__( /*! ../core/utils/string */ 40),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            translator = __webpack_require__( /*! ../animation/translator */ 24),
            dasherize = __webpack_require__( /*! ../core/utils/inflector */ 34).dasherize,
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            DOMComponent = __webpack_require__( /*! ../core/dom_component */ 59),
            eventUtils = __webpack_require__( /*! ../events/utils */ 9),
            pointerEvents = __webpack_require__( /*! ../events/pointer */ 27),
            dragEvents = __webpack_require__( /*! ../events/drag */ 65),
            positionUtils = __webpack_require__( /*! ../animation/position */ 78),
            isFunction = __webpack_require__( /*! ../core/utils/type */ 1).isFunction,
            noop = __webpack_require__( /*! ../core/utils/common */ 4).noop;
        var DRAGGABLE = "dxDraggable",
            DRAGSTART_EVENT_NAME = eventUtils.addNamespace(dragEvents.start, DRAGGABLE),
            DRAG_EVENT_NAME = eventUtils.addNamespace(dragEvents.move, DRAGGABLE),
            DRAGEND_EVENT_NAME = eventUtils.addNamespace(dragEvents.end, DRAGGABLE),
            POINTERDOWN_EVENT_NAME = eventUtils.addNamespace(pointerEvents.down, DRAGGABLE),
            DRAGGABLE_CLASS = dasherize(DRAGGABLE),
            DRAGGABLE_DRAGGING_CLASS = DRAGGABLE_CLASS + "-dragging";
        var Draggable = DOMComponent.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    onDragStart: noop,
                    onDrag: noop,
                    onDragEnd: noop,
                    immediate: true,
                    direction: "both",
                    area: window,
                    boundOffset: 0,
                    allowMoveByClick: false
                })
            },
            _init: function() {
                this.callBase();
                this._attachEventHandlers()
            },
            _attachEventHandlers: function() {
                if (this.option("disabled")) {
                    return
                }
                var $element = this.$element().css("position", "absolute"),
                    eventHandlers = {},
                    allowMoveByClick = this.option("allowMoveByClick");
                eventHandlers[DRAGSTART_EVENT_NAME] = this._dragStartHandler.bind(this);
                eventHandlers[DRAG_EVENT_NAME] = this._dragHandler.bind(this);
                eventHandlers[DRAGEND_EVENT_NAME] = this._dragEndHandler.bind(this);
                if (allowMoveByClick) {
                    eventHandlers[POINTERDOWN_EVENT_NAME] = this._pointerDownHandler.bind(this);
                    $element = this._getArea()
                }
                eventsEngine.on($element, eventHandlers, {
                    direction: this.option("direction"),
                    immediate: this.option("immediate")
                })
            },
            _detachEventHandlers: function() {
                eventsEngine.off(this.$element(), "." + DRAGGABLE);
                eventsEngine.off(this._getArea(), "." + DRAGGABLE)
            },
            _move: function(position) {
                translator.move(this.$element(), position)
            },
            _pointerDownHandler: function(e) {
                if (eventUtils.needSkipEvent(e)) {
                    return
                }
                var areaOffset = this._getAreaOffset($(e.currentTarget)),
                    direction = this.option("direction"),
                    position = {};
                if ("horizontal" === direction || "both" === direction) {
                    position.left = e.pageX - this.$element().width() / 2 - areaOffset.left
                }
                if ("vertical" === direction || "both" === direction) {
                    position.top = e.pageY - this.$element().height() / 2 - areaOffset.top
                }
                this._move(position);
                this._getAction("onDrag")({
                    event: e
                })
            },
            _dragStartHandler: function(e) {
                var $element = this.$element();
                if ($element.is(".dx-state-disabled, .dx-state-disabled *")) {
                    e.cancel = true;
                    return
                }
                var $area = this._getArea(),
                    areaOffset = this._getAreaOffset($area),
                    boundOffset = this._getBoundOffset(),
                    areaWidth = $area.outerWidth(),
                    areaHeight = $area.outerHeight(),
                    elementWidth = $element.width(),
                    elementHeight = $element.height();
                this._toggleDraggingClass(true);
                var startOffset = {
                    left: $element.offset().left - areaOffset.left,
                    top: $element.offset().top - areaOffset.top
                };
                this._startPosition = translator.locate($element);
                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;
                this._getAction("onDragStart")({
                    event: e
                })
            },
            _getAreaOffset: function($area) {
                var offset = $area && positionUtils.offset($area);
                return offset ? offset : {
                    left: 0,
                    top: 0
                }
            },
            _toggleDraggingClass: function(value) {
                this.$element().toggleClass(DRAGGABLE_DRAGGING_CLASS, value)
            },
            _getBoundOffset: function() {
                var boundOffset = this.option("boundOffset");
                if (isFunction(boundOffset)) {
                    boundOffset = boundOffset.call(this)
                }
                return stringUtils.quadToObject(boundOffset)
            },
            _getArea: function() {
                var area = this.option("area");
                if (isFunction(area)) {
                    area = area.call(this)
                }
                return $(area)
            },
            _dragHandler: function(e) {
                var offset = e.offset,
                    startPosition = this._startPosition;
                this._move({
                    left: startPosition.left + offset.x,
                    top: startPosition.top + offset.y
                });
                this._getAction("onDrag")({
                    event: e
                })
            },
            _dragEndHandler: function(e) {
                this._toggleDraggingClass(false);
                this._getAction("onDragEnd")({
                    event: e
                })
            },
            _getAction: function(name) {
                return this["_" + name + "Action"] || this._createActionByOption(name)
            },
            _render: function() {
                this.callBase();
                this.$element().addClass(DRAGGABLE_CLASS)
            },
            _optionChanged: function(args) {
                var name = args.name;
                switch (name) {
                    case "onDragStart":
                    case "onDrag":
                    case "onDragEnd":
                        this["_" + name + "Action"] = this._createActionByOption(name);
                        break;
                    case "allowMoveByClick":
                    case "direction":
                    case "disabled":
                        this._detachEventHandlers();
                        this._attachEventHandlers();
                        break;
                    case "boundOffset":
                    case "area":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _dispose: function() {
                this.callBase();
                this._detachEventHandlers()
            }
        });
        registerComponent(DRAGGABLE, Draggable);
        module.exports = Draggable
    },
    /*!************************************************!*\
      !*** ./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 */ 560)
    },
    /*!*******************************************!*\
      !*** ./artifacts/transpiled/ui/switch.js ***!
      \*******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            devices = __webpack_require__( /*! ../core/devices */ 16),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            inkRipple = __webpack_require__( /*! ./widget/utils.ink_ripple */ 72),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            Editor = __webpack_require__( /*! ./editor/editor */ 45),
            eventUtils = __webpack_require__( /*! ../events/utils */ 9),
            feedbackEvents = __webpack_require__( /*! ../events/core/emitter.feedback */ 103),
            themes = __webpack_require__( /*! ./themes */ 20),
            fx = __webpack_require__( /*! ../animation/fx */ 31),
            messageLocalization = __webpack_require__( /*! ../localization/message */ 14),
            clickEvent = __webpack_require__( /*! ../events/click */ 17),
            Swipeable = __webpack_require__( /*! ../events/gesture/swipeable */ 117),
            Deferred = __webpack_require__( /*! ../core/utils/deferred */ 7).Deferred;
        var SWITCH_CLASS = "dx-switch",
            SWITCH_WRAPPER_CLASS = SWITCH_CLASS + "-wrapper",
            SWITCH_CONTAINER_CLASS = SWITCH_CLASS + "-container",
            SWITCH_INNER_CLASS = SWITCH_CLASS + "-inner",
            SWITCH_HANDLE_CLASS = SWITCH_CLASS + "-handle",
            SWITCH_ON_VALUE_CLASS = SWITCH_CLASS + "-on-value",
            SWITCH_ON_CLASS = SWITCH_CLASS + "-on",
            SWITCH_OFF_CLASS = SWITCH_CLASS + "-off",
            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
                        })
                    },
                    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() {
                        return themes.isAndroid5(themeName)
                    },
                    options: {
                        useInkRipple: 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"),
                    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) - this._$handle.get(0).getBoundingClientRect().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),
                    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.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"),
                    endValue = value;
                if (startValue === endValue) {
                    return
                }
                this._animating = true;
                var fromInnerOffset = this._getInnerOffset(startValue, 0),
                    toInnerOffset = this._getInnerOffset(endValue, 0),
                    fromHandleOffset = this._getHandleOffset(startValue, 0),
                    toHandleOffset = this._getHandleOffset(endValue, 0);
                var that = this,
                    fromInnerConfig = {},
                    toInnerConfig = {},
                    fromHandleConfig = {},
                    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"),
                    rtlEnabled = this.option("rtlEnabled"),
                    maxOffOffset = rtlEnabled ? 0 : 1,
                    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,
                    offsetDirection = this._offsetDirection(),
                    toInnerConfig = {},
                    toHandleConfig = {};
                var innerOffset = this._getInnerOffset(that.option("value"), e.event.targetOffset),
                    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.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._$submitElement.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/tag_box.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _typeof = "function" === typeof Symbol && "symbol" === typeof Symbol.iterator ? function(obj) {
            return typeof obj
        } : function(obj) {
            return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
        };
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            devices = __webpack_require__( /*! ../core/devices */ 16),
            dataUtils = __webpack_require__( /*! ../core/element_data */ 37),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            browser = __webpack_require__( /*! ../core/utils/browser */ 38),
            commonUtils = __webpack_require__( /*! ../core/utils/common */ 4),
            noop = commonUtils.noop,
            FilterCreator = __webpack_require__( /*! ../core/utils/selection_filter */ 270).SelectionFilterCreator,
            deferredUtils = __webpack_require__( /*! ../core/utils/deferred */ 7),
            when = deferredUtils.when,
            Deferred = deferredUtils.Deferred,
            getPublicElement = __webpack_require__( /*! ../core/utils/dom */ 12).getPublicElement,
            typeUtils = __webpack_require__( /*! ../core/utils/type */ 1),
            isDefined = typeUtils.isDefined,
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            inArray = __webpack_require__( /*! ../core/utils/array */ 11).inArray,
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            messageLocalization = __webpack_require__( /*! ../localization/message */ 14),
            eventUtils = __webpack_require__( /*! ../events/utils */ 9),
            clickEvent = __webpack_require__( /*! ../events/click */ 17),
            SelectBox = __webpack_require__( /*! ./select_box */ 110),
            caret = __webpack_require__( /*! ./text_box/utils.caret */ 297),
            BindableTemplate = __webpack_require__( /*! ./widget/bindable_template */ 60);
        var TAGBOX_TAG_DATA_KEY = "dxTagData";
        var TAGBOX_CLASS = "dx-tagbox",
            TAGBOX_TAG_CONTAINER_CLASS = "dx-tag-container",
            TAGBOX_TAG_CLASS = "dx-tag",
            TAGBOX_MULTI_TAG_CLASS = "dx-tagbox-multi-tag",
            TAGBOX_CUSTOM_TAG_CLASS = "dx-tag-custom",
            TAGBOX_TAG_REMOVE_BUTTON_CLASS = "dx-tag-remove-button",
            TAGBOX_ONLY_SELECT_CLASS = "dx-tagbox-only-select",
            TAGBOX_SINGLE_LINE_CLASS = "dx-tagbox-single-line",
            TAGBOX_POPUP_WRAPPER_CLASS = "dx-tagbox-popup-wrapper",
            LIST_SELECT_ALL_CHECKBOX_CLASS = "dx-list-select-all-checkbox",
            TAGBOX_TAG_CONTENT_CLASS = "dx-tag-content",
            TAGBOX_DEFAULT_FIELD_TEMPLATE_CLASS = "dx-tagbox-default-template",
            TAGBOX_CUSTOM_FIELD_TEMPLATE_CLASS = "dx-tagbox-custom-template",
            NATIVE_CLICK_CLASS = "dx-native-click",
            TEXTEDITOR_CONTAINER_CLASS = "dx-texteditor-container";
        var TAGBOX_MOUSE_WHEEL_DELTA_MULTIPLIER = -.3;
        var TagBox = SelectBox.inherit({
            _supportedKeys: function() {
                var parent = this.callBase();
                return 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
                    },
                    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) {
                        var isListItemFocused = this._list && null !== this._list.option("focusedElement"),
                            isCustomItem = this.option("acceptCustomValue") && !isListItemFocused;
                        if (isCustomItem) {
                            e.preventDefault();
                            "" !== this._searchValue() && this._customItemAddedHandler();
                            return
                        }
                        if (!this.option("opened")) {
                            return
                        }
                        e.preventDefault();
                        this._keyboardProcessor._childProcessors[0].process(e)
                    },
                    space: function(e) {
                        var isOpened = this.option("opened"),
                            isInputActive = this._shouldRenderSearchEvent();
                        if (!isOpened || isInputActive) {
                            return
                        }
                        e.preventDefault();
                        this._keyboardProcessor._childProcessors[0].process(e)
                    },
                    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)
                    }
                })
            },
            _isCaretAtTheStart: function() {
                var position = caret(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]("." + 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") || !windowUtils.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"),
                    isScrollLeft = "end" === direction ^ rtlEnabled,
                    isScrollReverted = rtlEnabled && !browser.webkit,
                    scrollSign = !rtlEnabled || browser.webkit || browser.msie ? 1 : -1;
                return isScrollLeft ^ !isScrollReverted ? 0 : scrollSign * (this._$tagsContainer.get(0).scrollWidth - this._$tagsContainer.outerWidth())
            },
            _getFocusedTagPosition: function(direction) {
                var rtlEnabled = this.option("rtlEnabled"),
                    isScrollLeft = "next" === direction ^ rtlEnabled,
                    scrollOffset = this._$focusedTag.position().left,
                    scrollLeft = this._$tagsContainer.scrollLeft();
                if (isScrollLeft) {
                    scrollOffset += this._$focusedTag.outerWidth(true) - this._$tagsContainer.outerWidth()
                }
                if (isScrollLeft ^ scrollOffset < 0) {
                    var scrollCorrection = rtlEnabled && browser.msie ? -1 : 1;
                    scrollLeft += scrollOffset * scrollCorrection
                }
                return scrollLeft
            },
            _setNextValue: noop,
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    value: [],
                    showDropDownButton: false,
                    maxFilterLength: 1500,
                    tagTemplate: "tag",
                    selectAllText: messageLocalization.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 selectedCount = this._getValue().length;
                if (!this.option("showMultiTagOnly")) {
                    args.text = messageLocalization.getFormatter("dxTagBox-moreSelected")(selectedCount - this.option("maxDisplayedTags") + 1)
                } else {
                    args.text = messageLocalization.getFormatter("dxTagBox-selected")(selectedCount)
                }
            },
            _initDynamicTemplates: function() {
                this.callBase();
                this._defaultTemplates.tag = new BindableTemplate(function($container, data) {
                    var $tagContent = $("<div>").addClass(TAGBOX_TAG_CONTENT_CLASS);
                    $("<span>").text(data.text || data).appendTo($tagContent);
                    $("<div>").addClass(TAGBOX_TAG_REMOVE_BUTTON_CLASS).appendTo($tagContent);
                    $container.append($tagContent)
                }.bind(this), ["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 = $("<select>").attr("multiple", "multiple").css("display", "none").appendTo(this.$element())
            },
            _setSubmitValue: function() {
                if (!this.option("useSubmitBehavior")) {
                    return
                }
                var value = this._getValue(),
                    useDisplayText = "this" === this.option("valueExpr"),
                    $options = [];
                for (var i = 0, n = value.length; i < n; i++) {
                    $options.push($("<option>").val(useDisplayText ? this._displayGetter(value[i]) : value[i]).attr("selected", "selected"))
                }
                this._$submitElement.empty();
                this._$submitElement.append($options)
            },
            _initMarkup: function() {
                this._tagElementsCache = $();
                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 = !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 = eventUtils.addNamespace(clickEvent.name, "dxTagBoxTagRemove");
                eventsEngine.off(this._$tagsContainer, eventName);
                eventsEngine.on(this._$tagsContainer, eventName, "." + TAGBOX_TAG_REMOVE_BUTTON_CLASS, function(e) {
                    tagRemoveAction({
                        event: e
                    })
                });
                this._renderTypingEvent()
            },
            _renderSingleLineScroll: function() {
                var mouseWheelEvent = eventUtils.addNamespace("dxmousewheel", this.NAME),
                    $element = this.$element(),
                    isMultiline = this.option("multiline");
                eventsEngine.off($element, mouseWheelEvent);
                if ("desktop" !== devices.real().deviceType) {
                    this._$tagsContainer && this._$tagsContainer.css("overflowX", isMultiline ? "" : "auto");
                    return
                }
                if (isMultiline) {
                    return
                }
                eventsEngine.on($element, mouseWheelEvent, this._tagContainerMouseWheelHandler.bind(this))
            },
            _tagContainerMouseWheelHandler: function(e) {
                var scrollLeft = this._$tagsContainer.scrollLeft();
                this._$tagsContainer.scrollLeft(scrollLeft + e.delta * TAGBOX_MOUSE_WHEEL_DELTA_MULTIPLIER);
                return false
            },
            _renderTypingEvent: function() {
                eventsEngine.on(this._input(), eventUtils.addNamespace("keydown", this.NAME), function(e) {
                    if (!this._isControlKey(e.key) && this._isEditable()) {
                        this._clearTagFocus()
                    }
                }.bind(this))
            },
            _popupWrapperClass: function() {
                return this.callBase() + " " + TAGBOX_POPUP_WRAPPER_CLASS
            },
            _renderInput: function() {
                this.callBase();
                this._renderPreventBlur(this._inputWrapper())
            },
            _renderInputValueImpl: function() {
                this._renderMultiSelect()
            },
            _loadInputValue: function() {
                return when()
            },
            _clearTextValue: function() {
                this._input().val("");
                this._toggleEmptinessEventHandler()
            },
            _focusInHandler: function(e) {
                this.callBase(e);
                this._scrollContainer("end")
            },
            _restoreInputText: function() {
                this._clearTextValue()
            },
            _focusOutHandler: function(e) {
                this.callBase(e);
                this._clearTagFocus();
                this._scrollContainer("start")
            },
            _getFirstPopupElement: function() {
                return this.option("showSelectionControls") ? this._popup._wrapper().find("." + LIST_SELECT_ALL_CHECKBOX_CLASS) : this.callBase()
            },
            _initSelectAllValueChangedAction: function() {
                this._selectAllValueChangeAction = this._createActionByOption("onSelectAllValueChanged")
            },
            _renderList: function() {
                this.callBase();
                this._setListDataSourceFilter();
                if (!this.option("showSelectionControls")) {
                    return
                }
                var $selectAllCheckBox = this._list.$element().find("." + LIST_SELECT_ALL_CHECKBOX_CLASS),
                    selectAllCheckbox = $selectAllCheckBox.dxCheckBox("instance");
                selectAllCheckbox.registerKeyHandler("tab", this._popupElementTabHandler.bind(this));
                selectAllCheckbox.registerKeyHandler("escape", this._popupElementEscHandler.bind(this))
            },
            _listConfig: function() {
                var that = this,
                    selectionMode = this.option("showSelectionControls") ? "all" : "multiple";
                return extend(this.callBase(), {
                    selectionMode: selectionMode,
                    selectAllText: this.option("selectAllText"),
                    onSelectAllValueChanged: function(e) {
                        that._selectAllValueChangeAction({
                            value: e.value
                        })
                    },
                    selectAllMode: this.option("selectAllMode"),
                    selectedItems: this._selectedItems,
                    onFocusedItemChanged: null
                })
            },
            _renderMultiSelect: function() {
                this._$tagsContainer = this.$element().find("." + TEXTEDITOR_CONTAINER_CLASS).addClass(TAGBOX_TAG_CONTAINER_CLASS).addClass(NATIVE_CLICK_CLASS);
                this._renderInputSize();
                this._renderTags();
                this._popup && this._popup.refreshPosition()
            },
            _listItemClickHandler: function(e) {
                !this.option("showSelectionControls") && this._clearTextValue();
                if ("useButtons" === this.option("applyValueMode")) {
                    return
                }
                this.callBase(e)
            },
            _shouldClearFilter: function() {
                var shouldClearFilter = this.callBase(),
                    showSelectionControls = this.option("showSelectionControls");
                return !showSelectionControls && shouldClearFilter
            },
            _renderInputSize: function() {
                var $input = this._input();
                $input.prop("size", $input.val() ? $input.val().length + 2 : 1)
            },
            _renderInputSubstitution: function() {
                this.callBase();
                this._renderInputSize()
            },
            _getValue: function() {
                return this.option("value") || []
            },
            _multiTagRequired: function() {
                var values = this._getValue(),
                    maxDisplayedTags = this.option("maxDisplayedTags");
                return isDefined(maxDisplayedTags) && values.length > maxDisplayedTags
            },
            _renderMultiTag: function($input) {
                var $tag = $("<div>").addClass(TAGBOX_TAG_CLASS).addClass(TAGBOX_MULTI_TAG_CLASS);
                var args = {
                    multiTagElement: 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: getPublicElement($tag)
                });
                return $tag
            },
            _getFilteredItems: function(values) {
                var creator = new FilterCreator(values);
                var selectedItems = this._list && this._list.option("selectedItems") || this.option("selectedItems"),
                    clientFilterFunction = creator.getLocalFilter(this._valueGetter),
                    filteredItems = selectedItems.filter(clientFilterFunction),
                    selectedItemsAlreadyLoaded = filteredItems.length === values.length,
                    d = new Deferred;
                if (selectedItemsAlreadyLoaded) {
                    return d.resolve(filteredItems).promise()
                } else {
                    var dataSourceFilter = this._dataSource.filter(),
                        filterExpr = creator.getCombinedFilter(this.option("valueExpr"), dataSourceFilter),
                        filterLength = encodeURI(JSON.stringify(filterExpr)).length,
                        resultFilter = filterLength > this.option("maxFilterLength") ? void 0 : filterExpr;
                    this._dataSource.store().load({
                        filter: resultFilter
                    }).done(function(items) {
                        d.resolve(items.filter(clientFilterFunction))
                    });
                    return d.promise()
                }
            },
            _createTagsData: function(values, filteredItems) {
                var items = [],
                    cache = {};
                each(values, function(valueIndex, value) {
                    var item = filteredItems[valueIndex];
                    if ("this" === this._valueGetterExpr() && !isDefined(item)) {
                        this._loadItem(value, cache).always(function(item) {
                            this._createTagData(items, item, value, valueIndex)
                        }.bind(this))
                    } else {
                        this._createTagData(items, item, value, valueIndex)
                    }
                }.bind(this));
                return items
            },
            _createTagData: function(items, item, value, valueIndex) {
                if (isDefined(item)) {
                    this._selectedItems.push(item);
                    items.splice(valueIndex, 0, item)
                } else {
                    var selectedItem = this.option("selectedItem"),
                        customItem = this._valueGetter(selectedItem) === value ? selectedItem : value;
                    items.splice(valueIndex, 0, customItem)
                }
            },
            _loadTagData: function() {
                var values = this._getValue(),
                    tagData = new Deferred;
                this._selectedItems = [];
                this._getFilteredItems(values).done(function(filteredItems) {
                    var items = this._createTagsData(values, filteredItems);
                    tagData.resolve(items)
                }.bind(this)).fail(tagData.reject.bind(this));
                return tagData.promise()
            },
            _renderTags: function() {
                this._loadTagData().always(function(items) {
                    this._renderTagsCore(items)
                }.bind(this));
                this._renderEmptyState();
                if (!this._preserveFocusedTag) {
                    this._clearTagFocus()
                }
            },
            _renderTagsCore: function(items) {
                this._renderInputAddons();
                this.option("selectedItems", this._selectedItems.slice());
                this._cleanTags();
                var $multiTag = this._multiTagRequired() && this._renderMultiTag(this._input()),
                    showMultiTagOnly = this.option("showMultiTagOnly"),
                    maxDisplayedTags = this.option("maxDisplayedTags");
                items.forEach(function(item, index) {
                    if ($multiTag && showMultiTagOnly || $multiTag && !showMultiTagOnly && index - maxDisplayedTags >= -1) {
                        return false
                    }
                    this._renderTag(item, $multiTag || this._input())
                }.bind(this));
                this._scrollContainer("end");
                this._refreshTagElements()
            },
            _cleanTags: function() {
                if (this._multiTagRequired()) {
                    this._tagElements().remove()
                } else {
                    var $tags = this._tagElements(),
                        values = this._getValue();
                    each($tags, function(_, tag) {
                        var $tag = $(tag),
                            index = 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("." + TAGBOX_TAG_CLASS)
            },
            _tagElements: function() {
                return this._tagElementsCache
            },
            _applyTagTemplate: function(item, $tag) {
                this._tagTemplate.render({
                    model: item,
                    container: getPublicElement($tag)
                })
            },
            _renderTag: function(item, $input) {
                var value = this._valueGetter(item);
                if (!isDefined(value)) {
                    return
                }
                var $tag = this._getTag(value),
                    displayValue = this._displayGetter(item),
                    itemModel = this._getItemModel(item, displayValue);
                if ($tag) {
                    if (isDefined(displayValue)) {
                        $tag.empty();
                        this._applyTagTemplate(itemModel, $tag)
                    }
                    $tag.removeClass(TAGBOX_CUSTOM_TAG_CLASS)
                } else {
                    $tag = this._createTag(value, $input);
                    if (isDefined(item)) {
                        this._applyTagTemplate(itemModel, $tag)
                    } else {
                        $tag.addClass(TAGBOX_CUSTOM_TAG_CLASS);
                        this._applyTagTemplate(value, $tag)
                    }
                }
            },
            _getItemModel: function(item, displayValue) {
                if (typeUtils.isObject(item)) {
                    return item
                } else {
                    return displayValue
                }
            },
            _getTag: function(value) {
                var $tags = this._tagElements(),
                    tagsLength = $tags.length;
                var result = false;
                for (var i = 0; i < tagsLength; i++) {
                    var $tag = $tags[i],
                        tagData = dataUtils.data($tag, TAGBOX_TAG_DATA_KEY);
                    if (value === tagData || commonUtils.equalByValue(value, tagData)) {
                        result = $($tag);
                        break
                    }
                }
                return result
            },
            _createTag: function(value, $input) {
                return $("<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();
                var $tag = $(e.target).closest("." + 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: 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) {
                if ("useButtons" === this.option("applyValueMode")) {
                    return
                }
                var value = this._getValue().slice();
                each(e.removedItems || [], function(_, removedItem) {
                    this._removeTag(value, this._valueGetter(removedItem))
                }.bind(this));
                each(e.addedItems || [], function(_, addedItem) {
                    this._addTag(value, this._valueGetter(addedItem))
                }.bind(this));
                this._updateWidgetHeight();
                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"),
                    valueIndex = this._valueIndex(value),
                    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 result = -1;
                if (cache && "object" !== ("undefined" === typeof value ? "undefined" : _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();
                each(values, function(index, selectedValue) {
                    if (this._isValueEquals(value, selectedValue)) {
                        result = index;
                        return false
                    }
                }.bind(this));
                return result
            },
            _lastValue: function() {
                var values = this._getValue(),
                    lastValue = values[values.length - 1];
                return isDefined(lastValue) ? lastValue : null
            },
            _valueChangeEventHandler: 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(),
                    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)
            },
            _getDataSource: function() {
                return this._dataSource
            },
            _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 (typeUtils.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 filter = [];
                each(this._getValue(), function(index, value) {
                    filter.push(["!", [this._valueGetterExpr(), value]])
                }.bind(this));
                return filter
            },
            _dataSourceFilterFunction: function(itemData) {
                var itemValue = this._valueGetter(itemData),
                    result = true;
                each(this._getValue(), function(index, value) {
                    if (this._isValueEquals(value, itemValue)) {
                        result = false;
                        return false
                    }
                }.bind(this));
                return result
            },
            _applyButtonHandler: function() {
                this.option("value", this._getSortedListValues());
                this._clearTextValue();
                this._clearFilter();
                this.callBase()
            },
            _getSortedListValues: function() {
                var listValues = this._getListValues(),
                    currentValue = this.option("value") || [],
                    existedItems = listValues.length ? currentValue.filter(function(item) {
                        return listValues.indexOf(item) !== -1
                    }) : [],
                    newItems = existedItems.length ? listValues.filter(function(item) {
                        return currentValue.indexOf(item) === -1
                    }) : listValues;
                return existedItems.concat(newItems)
            },
            _getListValues: function() {
                if (!this._list) {
                    return []
                }
                var that = this,
                    selectedItems = this._getPlainItems(this._list.option("selectedItems")),
                    result = [];
                each(selectedItems, function(index, item) {
                    result[index] = that._valueGetter(item)
                });
                return result
            },
            _renderOpenedState: function() {
                this.callBase();
                if ("useButtons" === this.option("applyValueMode") && !this.option("opened")) {
                    this._refreshSelected()
                }
            },
            _clean: function() {
                this.callBase();
                delete this._defaultTagTemplate;
                delete this._tagTemplate
            },
            _removeDuplicates: function(from, what) {
                var that = this,
                    result = [];
                each(from, function(_, value) {
                    var filteredItems = what.filter(function(item) {
                        return that._valueGetter(value) === that._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":
                        var addedItems = this._removeDuplicates(args.value, args.previousValue),
                            removedItems = this._removeDuplicates(args.previousValue, args.value);
                        this._selectionChangedAction({
                            addedItems: addedItems,
                            removedItems: removedItems
                        });
                        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()
            }
        });
        registerComponent("dxTagBox", TagBox);
        module.exports = TagBox
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/text_area.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            noop = __webpack_require__( /*! ../core/utils/common */ 4).noop,
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            eventUtils = __webpack_require__( /*! ../events/utils */ 9),
            pointerEvents = __webpack_require__( /*! ../events/pointer */ 27),
            TextBox = __webpack_require__( /*! ./text_box */ 101);
        var TEXTAREA_CLASS = "dx-textarea",
            TEXTEDITOR_INPUT_CLASS = "dx-texteditor-input";
        var TextArea = TextBox.inherit({
            _getDefaultOptions: function() {
                return 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 = $("<textarea>");
                this._applyInputAttributes($input, this.option("inputAttr"));
                return $input
            },
            _applyInputAttributes: function($input, customAttributes) {
                $input.attr(customAttributes).addClass(TEXTEDITOR_INPUT_CLASS)
            },
            _renderScrollHandler: function() {
                var $input = this._input(),
                    eventY = 0;
                eventsEngine.on($input, eventUtils.addNamespace(pointerEvents.down, this.NAME), function(e) {
                    eventY = eventUtils.eventData(e).y
                });
                eventsEngine.on($input, eventUtils.addNamespace(pointerEvents.move, this.NAME), function(e) {
                    var scrollTopPos = $input.scrollTop(),
                        scrollBottomPos = $input.prop("scrollHeight") - $input.prop("clientHeight") - scrollTopPos;
                    if (0 === scrollTopPos && 0 === scrollBottomPos) {
                        return
                    }
                    var currentEventY = eventUtils.eventData(e).y;
                    var isScrollFromTop = 0 === scrollTopPos && eventY >= currentEventY,
                        isScrollFromBottom = 0 === scrollBottomPos && eventY <= currentEventY,
                        isScrollFromMiddle = scrollTopPos > 0 && scrollBottomPos > 0;
                    if (isScrollFromTop || isScrollFromBottom || isScrollFromMiddle) {
                        e.isScrollingEvent = true;
                        e.stopPropagation()
                    }
                    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")) {
                    eventsEngine.on(this._input(), eventUtils.addNamespace("input paste", this.NAME), this._updateInputHeight.bind(this))
                }
                this.callBase()
            },
            _refreshEvents: function() {
                eventsEngine.off(this._input(), eventUtils.addNamespace("input paste", this.NAME));
                this.callBase()
            },
            _updateInputHeight: function() {
                var $input = this._input();
                if (!this.option("autoResizeEnabled") || void 0 !== this.option("height")) {
                    $input.css("height", "");
                    return
                }
                this._resetDimensions();
                $input.css("height", 0);
                var heightDifference = this._$element.outerHeight() - $input.outerHeight();
                this._renderDimensions();
                var minHeight = this.option("minHeight"),
                    maxHeight = this.option("maxHeight"),
                    inputHeight = $input[0].scrollHeight;
                if (void 0 !== minHeight) {
                    inputHeight = Math.max(inputHeight, minHeight - heightDifference)
                }
                if (void 0 !== maxHeight) {
                    inputHeight = Math.min(inputHeight, maxHeight - heightDifference)
                }
                $input.css("height", inputHeight)
            },
            _renderInputType: noop,
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._updateInputHeight()
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "autoResizeEnabled":
                        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)
                }
            }
        });
        registerComponent("dxTextArea", TextArea);
        module.exports = TextArea
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/core/utils/size.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var window = __webpack_require__( /*! ../../core/utils/window */ 6).getWindow();
        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
        };
        exports.getSize = getSize;
        exports.getElementBoxParams = getElementBoxParams
    },
    /*!********************************************************!*\
      !*** ./artifacts/transpiled/exporter/excel_creator.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ../core/class */ 10),
            window = __webpack_require__( /*! ../core/utils/window */ 6).getWindow(),
            typeUtils = __webpack_require__( /*! ../core/utils/type */ 1),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            errors = __webpack_require__( /*! ../ui/widget/ui.errors */ 18),
            stringUtils = __webpack_require__( /*! ../core/utils/string */ 40),
            JSZip = __webpack_require__( /*! jszip */ 326),
            fileSaver = __webpack_require__( /*! ./file_saver */ 231),
            excelFormatConverter = __webpack_require__( /*! ./excel_format_converter */ 235),
            ExcelFile = __webpack_require__( /*! ./excel/excel.file */ 327),
            isDefined = typeUtils.isDefined,
            XML_TAG = '<?xml version="1.0" encoding="utf-8"?>',
            GROUP_SHEET_PR_XML = '<sheetPr><outlinePr summaryBelow="0"/></sheetPr>',
            SINGLE_SHEET_PR_XML = "<sheetPr/>",
            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>',
            OPEN_XML_FORMAT_URL = "http://schemas.openxmlformats.org",
            RELATIONSHIP_PART_NAME = "rels",
            XL_FOLDER_NAME = "xl",
            WORKBOOK_FILE_NAME = "workbook.xml",
            CONTENTTYPES_FILE_NAME = "[Content_Types].xml",
            SHAREDSTRING_FILE_NAME = "sharedStrings.xml",
            STYLE_FILE_NAME = "styles.xml",
            WORKSHEETS_FOLDER = "worksheets",
            WORKSHEET_FILE_NAME = "sheet1.xml",
            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">',
            VALID_TYPES = {
                "boolean": "b",
                date: "d",
                number: "n",
                string: "s"
            },
            EXCEL_START_TIME = Date.UTC(1899, 11, 30),
            DAYS_COUNT_BEFORE_29_FEB_1900 = 60,
            MAX_DIGIT_WIDTH_IN_PIXELS = 7;
        var ExcelCreator = Class.inherit({
            _getXMLTag: function(tagName, attributes, content) {
                var i, attr, result = "<" + tagName,
                    length = attributes.length;
                for (i = 0; i < length; i++) {
                    attr = attributes[i];
                    if (void 0 !== attr.value) {
                        result = result + " " + attr.name + '="' + attr.value + '"'
                    }
                }
                return typeUtils.isDefined(content) ? result + ">" + content + "</" + tagName + ">" : result + " />"
            },
            _getCellIndex: function(rowIndex, cellIndex) {
                var charCode, sheetIndex = "",
                    max = 26;
                if (this._maxIndex[0] < Number(rowIndex)) {
                    this._maxIndex[0] = Number(rowIndex)
                }
                if (this._maxIndex[1] < Number(cellIndex)) {
                    this._maxIndex[1] = Number(cellIndex)
                }
                while (true) {
                    charCode = 65 + (cellIndex >= max ? cellIndex % max : Math.ceil(cellIndex));
                    sheetIndex = String.fromCharCode(charCode) + sheetIndex;
                    if (cellIndex >= max) {
                        cellIndex = Math.floor(cellIndex / max) - 1
                    } else {
                        break
                    }
                }
                return sheetIndex + rowIndex
            },
            _getDataType: function(dataType) {
                return VALID_TYPES[dataType] || "s"
            },
            _formatObjectConverter: function(format, dataType) {
                var result = {
                    format: format,
                    precision: format && format.precision,
                    dataType: dataType
                };
                if (typeUtils.isObject(format)) {
                    return extend(result, format, {
                        format: format.formatter || format.type,
                        currency: format.currency
                    })
                }
                return result
            },
            _tryConvertToExcelNumberFormat: function(format, dataType) {
                var currency, newFormat = this._formatObjectConverter(format, dataType);
                format = newFormat.format;
                currency = newFormat.currency;
                dataType = newFormat.dataType;
                return excelFormatConverter.convertFormat(format, newFormat.precision, dataType, currency)
            },
            _appendString: function(value) {
                if (typeUtils.isDefined(value)) {
                    value = String(value);
                    if (value.length) {
                        value = stringUtils.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, totalTime;
                if (typeUtils.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 sourceValue, dataProvider = this._dataProvider,
                    _ref = dataProvider.getCellData(rowIndex, cellIndex) || {},
                    value = _ref.value,
                    cellSourceData = _ref.cellSourceData,
                    type = this._getDataType(dataProvider.getCellType(rowIndex, cellIndex));
                if ("d" === type && !typeUtils.isDate(value)) {
                    type = "s"
                }
                switch (type) {
                    case "s":
                        sourceValue = value;
                        value = this._appendString(value);
                        break;
                    case "d":
                        sourceValue = value;
                        value = this._tryGetExcelDateValue(value);
                        type = "n"
                }
                return {
                    value: value,
                    type: type,
                    sourceValue: sourceValue,
                    cellSourceData: cellSourceData
                }
            },
            _callCustomizeExcelCell: function(_ref2) {
                var dataProvider = _ref2.dataProvider,
                    value = _ref2.value,
                    dataType = _ref2.dataType,
                    style = _ref2.style,
                    sourceData = _ref2.sourceData;
                var styleCopy = ExcelFile.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 (isDefined(styleCopy)) {
                    if (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,
                    dataType: dataType,
                    style: newStyle
                }
            },
            _getDataArray: function() {
                var rowIndex, cellIndex, cellsArray, cellData, cellsLength, that = this,
                    result = [],
                    dataProvider = that._dataProvider,
                    rowsLength = dataProvider.getRowsCount(),
                    columns = dataProvider.getColumns();
                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,
                                dataType: cellData.type,
                                style: that._styleArray[styleArrayIndex],
                                sourceData: cellData.cellSourceData
                            });
                            cellData.type = modifiedExcelCell.dataType;
                            if (modifiedExcelCell.value !== value) {
                                switch (cellData.type) {
                                    case "s":
                                        cellData.value = this._appendString(modifiedExcelCell.value);
                                        break;
                                    case "d":
                                        cellData.value = modifiedExcelCell.value;
                                        break;
                                    case "n":
                                        var newValue = modifiedExcelCell.value;
                                        var excelDateValue = this._tryGetExcelDateValue(newValue);
                                        if (typeUtils.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,
                    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 (!typeUtils.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,
                    folder = that._zip.folder(XL_FOLDER_NAME),
                    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 stringIndex, folder = this._zip.folder(XL_FOLDER_NAME),
                    stringsLength = this._stringArray.length,
                    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"
                    }],
                    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._getCellIndex(frozenArea.y + 1, 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, rowIndex, cellData, xmlCells, maxCellIndex, cellsLength, counter = 0,
                    xmlRows = [],
                    rowsLength = this._cellsArray.length,
                    colsLength = this._colsArray.length,
                    rSpans = "1:" + colsLength,
                    headerRowCount = this._dataProvider.getHeaderRowCount ? this._dataProvider.getHeaderRowCount() : 1,
                    xmlResult = [
                        [WORKSHEET_HEADER_XML, this._needSheetPr ? GROUP_SHEET_PR_XML : SINGLE_SHEET_PR_XML, '<dimension ref="A1:', this._getCellIndex(this._maxIndex[0], this._maxIndex[1]) + '"/><sheetViews><sheetView ' + (this._rtlEnabled ? 'rightToLeft="1" ' : "") + 'tabSelected="1" workbookViewId="0">' + this._getPaneXML() + '</sheetView></sheetViews><sheetFormatPr defaultRowHeight="15" outlineLevelRow="', this._dataProvider.getRowsCount() > 0 ? this._dataProvider.getGroupLevel(0) : 0, '" x14ac:dyDescent="0.25"/>'].join("")
                    ];
                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
                    }])
                }
                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._getCellIndex(rowIndex + 1, colIndex)
                        }, {
                            name: "s",
                            value: cellData.style
                        }, {
                            name: "t",
                            value: cellData.type
                        }], typeUtils.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 (counter++ > 1e4) {
                        xmlResult.push(xmlRows.join(""));
                        xmlRows = [];
                        counter = 0
                    }
                }
                xmlResult.push(xmlRows.join(""));
                xmlRows = [];
                maxCellIndex = this._getCellIndex(this._maxIndex[0], this._maxIndex[1]);
                xmlResult.push("</sheetData>" + this._getAutoFilterXML(maxCellIndex) + this._generateMergingXML() + this._getIgnoredErrorsXML(maxCellIndex) + "</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, l, cellIndex, rowIndex, mergeArrayLength, mergeIndex, rowsLength = typeUtils.isDefined(this._dataProvider.getHeaderRowCount) ? this._dataProvider.getHeaderRowCount() : this._dataProvider.getRowsCount(),
                    columnsLength = this._dataProvider.getColumns().length,
                    usedArea = [],
                    mergeArray = [],
                    mergeXML = "";
                for (rowIndex = 0; rowIndex < rowsLength; rowIndex++) {
                    for (cellIndex = 0; cellIndex !== columnsLength; cellIndex++) {
                        if (!typeUtils.isDefined(usedArea[rowIndex]) || !typeUtils.isDefined(usedArea[rowIndex][cellIndex])) {
                            var cellMerge = this._dataProvider.getCellMerging(rowIndex, cellIndex);
                            if (cellMerge.colspan || cellMerge.rowspan) {
                                mergeArray.push({
                                    start: this._getCellIndex(rowIndex + 1, cellIndex),
                                    end: this._getCellIndex(rowIndex + 1 + (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 (!typeUtils.isDefined(usedArea[k])) {
                                            usedArea[k] = []
                                        }
                                        usedArea[k][l] = true
                                    }
                                }
                            }
                        }
                    }
                }
                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 xmlRelationships, relsFileContent = XML_TAG + this._createXMLRelationships(this._createXMLRelationship(1, "officeDocument", "xl/" + WORKBOOK_FILE_NAME)),
                    folder = this._zip.folder(XL_FOLDER_NAME),
                    relsXML = XML_TAG;
                this._zip.folder("_" + RELATIONSHIP_PART_NAME).file("." + RELATIONSHIP_PART_NAME, relsFileContent);
                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._maxIndex = [1, 2];
                this._stringArray = [];
                this._stringHash = {};
                this._styleArray = [];
                this._colsArray = [];
                this._cellsArray = [];
                this._needSheetPr = false;
                this._dataProvider = dataProvider;
                this._excelFile = new ExcelFile;
                if (typeUtils.isDefined(ExcelCreator.JSZip)) {
                    this._zip = new ExcelCreator.JSZip
                } else {
                    this._zip = null
                }
            },
            _checkZipState: function() {
                if (!this._zip) {
                    throw errors.Error("E1041", "JSZip")
                }
            },
            ready: function() {
                return this._dataProvider.ready()
            },
            getData: function(isBlob) {
                var options = {
                    type: isBlob ? "blob" : "base64",
                    compression: "DEFLATE",
                    mimeType: fileSaver.MIME_TYPES.EXCEL
                };
                this._checkZipState();
                this._generateContent();
                return this._zip.generateAsync ? this._zip.generateAsync(options) : this._zip.generate(options)
            }
        });
        ExcelCreator.JSZip = JSZip;
        exports.ExcelCreator = ExcelCreator;
        exports.getData = function(data, options, callback) {
            var excelCreator = new exports.ExcelCreator(data, options);
            excelCreator._checkZipState();
            excelCreator.ready().done(function() {
                if (excelCreator._zip.generateAsync) {
                    excelCreator.getData(typeUtils.isFunction(window.Blob)).then(callback)
                } else {
                    callback(excelCreator.getData(typeUtils.isFunction(window.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
        }
    },
    /*!*******************************!*\
      !*** external "window.JSZip" ***!
      \*******************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports) {
        module.exports = window.JSZip
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/exporter/excel/excel.file.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _createClass = function() {
            function defineProperties(target, props) {
                for (var i = 0; i < props.length; i++) {
                    var descriptor = props[i];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) {
                        descriptor.writable = true
                    }
                    Object.defineProperty(target, descriptor.key, descriptor)
                }
            }
            return function(Constructor, protoProps, staticProps) {
                if (protoProps) {
                    defineProperties(Constructor.prototype, protoProps)
                }
                if (staticProps) {
                    defineProperties(Constructor, staticProps)
                }
                return Constructor
            }
        }();
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _excel = __webpack_require__( /*! ./excel.tag_helper */ 77);
        var _excel2 = _interopRequireDefault(_excel);
        var _excel3 = __webpack_require__( /*! ./excel.cell_format_helper */ 328);
        var _excel4 = _interopRequireDefault(_excel3);
        var _excel5 = __webpack_require__( /*! ./excel.fill_helper */ 238);
        var _excel6 = _interopRequireDefault(_excel5);
        var _excel7 = __webpack_require__( /*! ./excel.font_helper */ 240);
        var _excel8 = _interopRequireDefault(_excel7);
        var _excel9 = __webpack_require__( /*! ./excel.number_format_helper */ 331);
        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")
            }
        }
        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 = void 0;
                    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 = void 0;
                    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 = void 0;
                    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 = void 0;
                    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 */ 77);
        var _excel2 = _interopRequireDefault(_excel);
        var _excel3 = __webpack_require__( /*! ./excel.cell_alignment_helper */ 329);
        var _excel4 = _interopRequireDefault(_excel3);
        var _excel5 = __webpack_require__( /*! ./excel.fill_helper */ 238);
        var _excel6 = _interopRequireDefault(_excel5);
        var _excel7 = __webpack_require__( /*! ./excel.font_helper */ 240);
        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 = void 0;
                    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 = void 0;
                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 = void 0;
                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 */ 77);
        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 */ 77);
        var _excel2 = _interopRequireDefault(_excel);
        var _excel3 = __webpack_require__( /*! ./excel.color_helper */ 239);
        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 */ 77);
        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),
            ajax = __webpack_require__( /*! ../core/utils/ajax */ 76),
            window = __webpack_require__( /*! ../core/utils/window */ 6).getWindow(),
            isFunction = __webpack_require__( /*! ../core/utils/type */ 1).isFunction,
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            svgUtils = __webpack_require__( /*! ../core/utils/svg */ 206),
            deferredUtils = __webpack_require__( /*! ../core/utils/deferred */ 7),
            when = deferredUtils.when,
            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, binary = "",
                            bytes = new Uint8Array(response),
                            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, that = this;
                if ("image" === element.tagName) {
                    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, that = this,
                    xmlVersion = '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>',
                    blob = new Deferred,
                    svgElem = svgUtils.getSvgElement(data),
                    $svgObject = $(svgElem);
                $svgObject.css("backgroundColor", options.backgroundColor);
                markup = xmlVersion + svgUtils.getSvgMarkup($svgObject.get(0));
                that._prepareImages(svgElem).done(function() {
                    each(that._imageArray, function(href, dataURI) {
                        markup = markup.split(href).join(dataURI)
                    });
                    blob.resolve(isFunction(window.Blob) ? that._getBlob(markup) : that._getBase64(markup))
                });
                return blob
            },
            _getBlob: function(markup) {
                return new window.Blob([markup], {
                    type: "image/svg+xml"
                })
            },
            _getBase64: function(markup) {
                return window.btoa(markup)
            }
        };
        exports.getData = function(data, options, callback) {
            exports.svgCreator.getData(data, options).done(callback)
        }
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/core/http_request.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var windowUtils = __webpack_require__( /*! ./utils/window */ 6);
        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 */ 132),
            window = __webpack_require__( /*! ../core/utils/window */ 6).getWindow(),
            imageCreator = __webpack_require__( /*! ./image_creator */ 241).imageCreator,
            isFunction = __webpack_require__( /*! ../core/utils/type */ 1).isFunction,
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            deferredUtils = __webpack_require__( /*! ../core/utils/deferred */ 7),
            when = deferredUtils.when,
            Deferred = deferredUtils.Deferred,
            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",
            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",
            infoTemplate = "6 0 obj\r\n<</CreationDate _date_/Producer(DevExtreme _version_)>>\r\nendobj\r\n",
            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",
            imageEndTemplate = "\r\nendstream\r\nendobj\r\n",
            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",
            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),
                width = options.width + margin,
                height = options.height + margin,
                widthPt = (.75 * width).toFixed(2),
                heightPt = (.75 * height).toFixed(2);
            var mainPage = mainPageTemplate.replace("_width_", widthPt).replace("_height_", heightPt),
                content = contentTemplate.replace("_width_", widthPt).replace("_height_", heightPt),
                info = infoTemplate.replace("_date_", curDate).replace("_version_", VERSION),
                image = imageStartTemplate.replace("_width_", width).replace("_height_", height).replace("_length_", imageString.length) + imageString + imageEndTemplate,
                xref = getXref(mainPage.length, content.length, info.length);
            var mainContent = mainPage + content + info + image,
                trailer = trailerTemplate.replace("_length_", mainContent.length);
            return mainContent + xref + trailer
        };
        var getXref = function(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,
                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, callback) {
            var imageData = imageCreator.getImageData(data, extend({}, options, {
                    format: "JPEG"
                })),
                blob = new Deferred;
            blob.done(callback);
            when(imageData).done(function(imageString) {
                var binaryData = composePdfString(imageString, options, getCurDate()),
                    pdfData = isFunction(window.Blob) ? getBlob(binaryData) : getBase64(binaryData);
                blob.resolve(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/core/events_strategy.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Callbacks = __webpack_require__( /*! ./utils/callbacks */ 21),
            isFunction = __webpack_require__( /*! ./utils/type */ 1).isFunction,
            each = __webpack_require__( /*! ./utils/iterator */ 3).each,
            Class = __webpack_require__( /*! ./class */ 10);
        module.exports = Class.inherit({
            ctor: function(owner) {
                this._events = {};
                this._owner = owner
            },
            hasEvent: function(eventName) {
                var callbacks = this._events[eventName];
                if (callbacks) {
                    return callbacks.has()
                }
                return false
            },
            fireEvent: function(eventName, eventArgs) {
                var callbacks = this._events[eventName];
                if (callbacks) {
                    callbacks.fireWith(this._owner, eventArgs)
                }
            },
            on: function(eventName, eventHandler) {
                var addFn, callbacks = this._events[eventName];
                if (!callbacks) {
                    callbacks = Callbacks();
                    this._events[eventName] = callbacks
                }
                addFn = callbacks.originalAdd || callbacks.add;
                addFn.call(callbacks, eventHandler)
            },
            off: function(eventName, eventHandler) {
                var callbacks = this._events[eventName];
                if (callbacks) {
                    if (isFunction(eventHandler)) {
                        callbacks.remove(eventHandler)
                    } else {
                        callbacks.empty()
                    }
                }
            },
            dispose: function() {
                each(this._events, function() {
                    this.empty()
                })
            }
        })
    },
    /*!****************************************!*\
      !*** ./artifacts/transpiled/events.js ***!
      \****************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var eventsEngine = __webpack_require__( /*! ./events/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 */ 149),
            Observer = __webpack_require__( /*! ./observer */ 246),
            windowUtils = __webpack_require__( /*! ../../core/utils/window */ 6),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            onlyMSPointerSupport = !windowUtils.hasProperty("PointerEvent") && windowUtils.hasProperty("MSPointerEvent");
        var eventMap = {
            dxpointerdown: onlyMSPointerSupport ? "MSPointerDown" : "pointerdown",
            dxpointermove: onlyMSPointerSupport ? "MSPointerMove" : "pointermove",
            dxpointerup: onlyMSPointerSupport ? "MSPointerUp" : "pointerup",
            dxpointercancel: onlyMSPointerSupport ? "MSPointerCancel" : "pointercancel",
            dxpointerover: onlyMSPointerSupport ? "MSPointerOver" : "pointerover",
            dxpointerout: onlyMSPointerSupport ? "MSPointerOut" : "pointerout",
            dxpointerenter: onlyMSPointerSupport ? "mouseenter" : "pointerenter",
            dxpointerleave: onlyMSPointerSupport ? "mouseleave" : "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,
            BaseStrategy = __webpack_require__( /*! ./base */ 149),
            MouseStrategy = __webpack_require__( /*! ./mouse */ 247),
            TouchStrategy = __webpack_require__( /*! ./touch */ 245),
            eventUtils = __webpack_require__( /*! ../utils */ 9);
        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),
                    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 */ 86);
        var message = __webpack_require__( /*! ./localization/message */ 14);
        var number = __webpack_require__( /*! ./localization/number */ 49);
        var date = __webpack_require__( /*! ./localization/date */ 32);
        __webpack_require__( /*! ./localization/currency */ 146);
        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
    },
    /*!***************************************************************!*\
      !*** ./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",
                "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-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",
                "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-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-recurrenceDaily": "Daily",
                "dxScheduler-recurrenceWeekly": "Weekly",
                "dxScheduler-recurrenceMonthly": "Monthly",
                "dxScheduler-recurrenceYearly": "Yearly",
                "dxScheduler-recurrenceEvery": "Every",
                "dxScheduler-recurrenceEnd": "End repeat",
                "dxScheduler-recurrenceAfter": "After",
                "dxScheduler-recurrenceOn": "On",
                "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"
            }
        }
    },
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/localization/cldr-data/parentLocales.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-BE": "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-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-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",
            "bm-Nkoo": "root",
            "bs-Cyrl": "root",
            "en-Dsrt": "root",
            "en-Shaw": "root",
            "ha-Arab": "root",
            "iu-Latn": "root",
            "mn-Mong": "root",
            "ms-Arab": "root",
            "pa-Arab": "root",
            "shi-Latn": "root",
            "sr-Latn": "root",
            "uz-Arab": "root",
            "uz-Cyrl": "root",
            "vai-Latn": "root",
            "zh-Hant": "root",
            "yue-Hans": "root",
            "ff-Adlm": "root",
            "zh-Hant-MO": "zh-Hant-HK"
        }
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/bundles/modules/framework.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ./core */ 131);
        __webpack_require__( /*! ../../integration/knockout */ 121);
        module.exports = DevExpress.framework = {};
        DevExpress.framework.dxCommand = __webpack_require__( /*! ../../framework/command */ 183);
        DevExpress.framework.Router = __webpack_require__( /*! ../../framework/router */ 150);
        DevExpress.framework.StateManager = __webpack_require__( /*! ../../framework/state_manager */ 184);
        DevExpress.framework.ViewCache = __webpack_require__( /*! ../../framework/view_cache */ 88);
        DevExpress.framework.NullViewCache = __webpack_require__( /*! ../../framework/view_cache */ 88).NullViewCache;
        DevExpress.framework.ConditionalViewCacheDecorator = __webpack_require__( /*! ../../framework/view_cache */ 88).ConditionalViewCacheDecorator;
        DevExpress.framework.CapacityViewCacheDecorator = __webpack_require__( /*! ../../framework/view_cache */ 88).CapacityViewCacheDecorator;
        DevExpress.framework.HistoryDependentViewCacheDecorator = __webpack_require__( /*! ../../framework/view_cache */ 88).HistoryDependentViewCacheDecorator;
        DevExpress.framework.dxCommandContainer = __webpack_require__( /*! ../../framework/html/command_container */ 185);
        DevExpress.framework.dxView = __webpack_require__( /*! ../../framework/html/view_engine_components */ 69).dxView;
        DevExpress.framework.dxLayout = __webpack_require__( /*! ../../framework/html/view_engine_components */ 69).dxLayout;
        DevExpress.framework.dxViewPlaceholder = __webpack_require__( /*! ../../framework/html/view_engine_components */ 69).dxViewPlaceholder;
        DevExpress.framework.dxContentPlaceholder = __webpack_require__( /*! ../../framework/html/view_engine_components */ 69).dxContentPlaceholder;
        DevExpress.framework.dxTransition = __webpack_require__( /*! ../../framework/html/view_engine_components */ 69).dxTransition;
        DevExpress.framework.dxContent = __webpack_require__( /*! ../../framework/html/view_engine_components */ 69).dxContent;
        DevExpress.framework.html = {};
        DevExpress.framework.html.HtmlApplication = __webpack_require__( /*! ../../framework/html/html_application */ 251);
        DevExpress.framework.Route = __webpack_require__( /*! ../../framework/router */ 150).Route;
        DevExpress.framework.MemoryKeyValueStorage = __webpack_require__( /*! ../../framework/state_manager */ 184).MemoryKeyValueStorage;
        DevExpress.framework.NavigationDevices = __webpack_require__( /*! ../../framework/navigation_devices */ 151);
        DevExpress.framework.NavigationManager = __webpack_require__( /*! ../../framework/navigation_manager */ 123);
        DevExpress.framework.createActionExecutors = __webpack_require__( /*! ../../framework/action_executors */ 253).createActionExecutors;
        DevExpress.framework.Application = __webpack_require__( /*! ../../framework/application */ 252).Application;
        var browserAdapters = __webpack_require__( /*! ../../framework/browser_adapters */ 254);
        DevExpress.framework.DefaultBrowserAdapter = browserAdapters.DefaultBrowserAdapter;
        DevExpress.framework.OldBrowserAdapter = browserAdapters.OldBrowserAdapter;
        DevExpress.framework.BuggyAndroidBrowserAdapter = browserAdapters.BuggyAndroidBrowserAdapter;
        DevExpress.framework.HistorylessBrowserAdapter = browserAdapters.HistorylessBrowserAdapter;
        DevExpress.framework.BuggyCordovaWP81BrowserAdapter = browserAdapters.BuggyCordovaWP81BrowserAdapter;
        DevExpress.framework.CommandMapping = __webpack_require__( /*! ../../framework/command_mapping */ 187);
        DevExpress.framework.HistoryBasedNavigationDevice = __webpack_require__( /*! ../../framework/navigation_devices */ 151).HistoryBasedNavigationDevice;
        DevExpress.framework.StackBasedNavigationDevice = __webpack_require__( /*! ../../framework/navigation_devices */ 151).StackBasedNavigationDevice;
        DevExpress.framework.HistoryBasedNavigationManager = __webpack_require__( /*! ../../framework/navigation_manager */ 123).HistoryBasedNavigationManager;
        DevExpress.framework.StackBasedNavigationManager = __webpack_require__( /*! ../../framework/navigation_manager */ 123).StackBasedNavigationManager;
        DevExpress.framework.NavigationStack = __webpack_require__( /*! ../../framework/navigation_manager */ 123).NavigationStack;
        DevExpress.framework.utils = __webpack_require__( /*! ../../framework/utils */ 122).utils;
        DevExpress.framework.templateProvider = __webpack_require__( /*! ../../framework/utils */ 122).templateProvider;
        DevExpress.framework.html.CommandManager = __webpack_require__( /*! ../../framework/html/command_manager */ 255);
        DevExpress.framework.html.HtmlApplication = __webpack_require__( /*! ../../framework/html/html_application */ 251);
        DevExpress.framework.html.layoutSets = __webpack_require__( /*! ../../framework/html/presets */ 152).layoutSets;
        DevExpress.framework.html.animationSets = __webpack_require__( /*! ../../framework/html/presets */ 152).animationSets;
        DevExpress.framework.html.DefaultLayoutController = __webpack_require__( /*! ../../framework/html/layout_controller */ 188).DefaultLayoutController;
        DevExpress.framework.html.layoutSets = __webpack_require__( /*! ../../framework/html/layout_controller */ 188).layoutSets;
        DevExpress.framework.html.MarkupComponent = __webpack_require__( /*! ../../framework/html/markup_component */ 186).MarkupComponent;
        DevExpress.framework.html.ViewEngine = __webpack_require__( /*! ../../framework/html/view_engine */ 257).ViewEngine;
        DevExpress.framework.html.ViewEngineComponents = __webpack_require__( /*! ../../framework/html/view_engine_components */ 69);
        var widgetCommandAdaptersModule = __webpack_require__( /*! ../../framework/html/widget_command_adapters */ 256);
        DevExpress.framework.html.commandToDXWidgetAdapters = {
            dxToolbar: widgetCommandAdaptersModule.dxToolbar,
            dxList: widgetCommandAdaptersModule.dxList,
            dxNavBar: widgetCommandAdaptersModule.dxNavBar,
            dxPivot: widgetCommandAdaptersModule.dxPivot,
            dxSlideOut: widgetCommandAdaptersModule.dxSlideOut
        }
    },
    /*!****************************************************************************!*\
      !*** ./artifacts/transpiled/integration/knockout/component_registrator.js ***!
      \****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            ko = __webpack_require__( /*! knockout */ 61),
            Callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 21),
            errors = __webpack_require__( /*! ../../core/errors */ 19),
            inflector = __webpack_require__( /*! ../../core/utils/inflector */ 34),
            isPlainObject = __webpack_require__( /*! ../../core/utils/type */ 1).isPlainObject,
            registerComponentCallbacks = __webpack_require__( /*! ../../core/component_registrator_callbacks */ 147),
            Widget = __webpack_require__( /*! ../../ui/widget/ui.widget */ 28),
            KoTemplate = __webpack_require__( /*! ./template */ 248),
            Editor = __webpack_require__( /*! ../../ui/editor/editor */ 45),
            Locker = __webpack_require__( /*! ../../core/utils/locker */ 249),
            config = __webpack_require__( /*! ../../core/config */ 25);
        var LOCKS_DATA_KEY = "dxKoLocks",
            CREATED_WITH_KO_DATA_KEY = "dxKoCreation";
        var editorsBindingHandlers = [];
        var registerComponentKoBinding = function(componentName, componentClass) {
            if (componentClass.subclassOf(Editor)) {
                editorsBindingHandlers.push(componentName)
            }
            ko.bindingHandlers[componentName] = {
                init: function(domNode, valueAccessor) {
                    var component, isBindingPropertyPredicate, $element = $(domNode),
                        optionChangedCallbacks = Callbacks(),
                        optionsByReference = {},
                        knockoutConfig = config().knockout,
                        isBindingPropertyPredicateName = knockoutConfig && knockoutConfig.isBindingPropertyPredicateName,
                        ctorOptions = {
                            onInitializing: function() {
                                optionsByReference = this._getOptionsByReference();
                                ko.computed(function() {
                                    var model = ko.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) {
                                    return ko.dataFor($element.get(0))
                                }
                            },
                            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 = ko.computed(function() {
                                        var newValue = ko.unwrap(fn());
                                        if (!skipCallback) {
                                            callback(newValue)
                                        }
                                        skipCallback = false
                                    });
                                    return function() {
                                        watcher.dispose()
                                    }
                                },
                                templates: {
                                    "dx-polymorph-widget": {
                                        render: function(options) {
                                            var widgetName = ko.utils.unwrapObservable(options.model.widget);
                                            if (!widgetName) {
                                                return
                                            }
                                            if ("button" === widgetName || "tabs" === widgetName || "dropDownMenu" === widgetName) {
                                                var deprecatedName = widgetName;
                                                widgetName = inflector.camelize("dx-" + widgetName);
                                                errors.log("W0001", "dxToolbar - 'widget' item field", deprecatedName, "16.1", "Use: '" + widgetName + "' instead")
                                            }
                                            var markup = $("<div>").attr("data-bind", widgetName + ": options").get(0);
                                            $(options.container).append(markup);
                                            ko.applyBindings(options.model, markup)
                                        }
                                    }
                                },
                                createTemplate: function(element) {
                                    return new KoTemplate(element)
                                }
                            }
                        },
                        optionNameToModelMap = {};
                    var applyModelValueToOption = function(optionName, modelValue, unwrap) {
                        var locks = $element.data(LOCKS_DATA_KEY),
                            optionValue = unwrap ? ko.unwrap(modelValue) : modelValue;
                        if (ko.isWriteableObservable(modelValue)) {
                            optionNameToModelMap[optionName] = modelValue
                        }
                        if (component) {
                            if (locks.locked(optionName)) {
                                return
                            }
                            locks.obtain(optionName);
                            try {
                                if (ko.ignoreDependencies) {
                                    ko.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,
                            optionValue = args.value;
                        if (!(optionName in optionNameToModelMap)) {
                            return
                        }
                        var $element = this._$element,
                            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 Locker);
                        new componentClass($element, ctorOptions);
                        ctorOptions = null
                    };
                    var unwrapModelValue = function(currentModel, propertyName, propertyPath) {
                        if (propertyPath === isBindingPropertyPredicateName) {
                            return
                        }
                        if (!isBindingPropertyPredicate || isBindingPropertyPredicate(propertyPath, propertyName, currentModel)) {
                            var unwrappedPropertyValue;
                            ko.computed(function() {
                                var propertyValue = currentModel[propertyName];
                                applyModelValueToOption(propertyPath, propertyValue, true);
                                unwrappedPropertyValue = ko.unwrap(propertyValue)
                            }, null, {
                                disposeWhenNodeIsRemoved: domNode
                            });
                            if (isPlainObject(unwrappedPropertyValue)) {
                                if (!optionsByReference[propertyPath]) {
                                    unwrapModel(unwrappedPropertyValue, propertyPath)
                                }
                            }
                        } else {
                            applyModelValueToOption(propertyPath, currentModel[propertyName], false)
                        }
                    };
                    var unwrapModel = function(model, propertyPath) {
                        for (var propertyName in model) {
                            if (model.hasOwnProperty(propertyName)) {
                                unwrapModelValue(model, propertyName, propertyPath ? [propertyPath, propertyName].join(".") : propertyName)
                            }
                        }
                    };
                    createComponent();
                    return {
                        controlsDescendantBindings: componentClass.subclassOf(Widget)
                    }
                }
            };
            if ("dxValidator" === componentName) {
                ko.bindingHandlers.dxValidator.after = editorsBindingHandlers
            }
        };
        registerComponentCallbacks.add(function(name, componentClass) {
            registerComponentKoBinding(name, componentClass)
        })
    },
    /*!************************************************************************!*\
      !*** ./artifacts/transpiled/integration/knockout/event_registrator.js ***!
      \************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            ko = __webpack_require__( /*! knockout */ 61),
            isPlainObject = __webpack_require__( /*! ../../core/utils/type */ 1).isPlainObject,
            eventRegistratorCallbacks = __webpack_require__( /*! ../../events/core/event_registrator_callbacks */ 119),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9);
        eventRegistratorCallbacks.add(function(name) {
            var koBindingEventName = eventUtils.addNamespace(name, name + "Binding");
            ko.bindingHandlers[name] = {
                update: function(element, valueAccessor, allBindingsAccessor, viewModel) {
                    var $element = $(element),
                        unwrappedValue = ko.utils.unwrapObservable(valueAccessor()),
                        eventSource = unwrappedValue.execute ? unwrappedValue.execute : unwrappedValue;
                    eventsEngine.off($element, koBindingEventName);
                    eventsEngine.on($element, koBindingEventName, 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 $ = __webpack_require__( /*! ../../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            Action = __webpack_require__( /*! ../../core/action */ 81),
            compileGetter = __webpack_require__( /*! ../../core/utils/data */ 23).compileGetter,
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            ko = __webpack_require__( /*! knockout */ 61),
            iconUtils = __webpack_require__( /*! ../../core/utils/icon */ 87),
            clickEvent = __webpack_require__( /*! ../../events/click */ 17);
        ko.bindingHandlers.dxAction = {
            update: function(element, valueAccessor, allBindingsAccessor, viewModel) {
                var $element = $(element);
                var unwrappedValue = ko.utils.unwrapObservable(valueAccessor()),
                    actionSource = unwrappedValue,
                    actionOptions = {
                        context: element
                    };
                if (unwrappedValue.execute) {
                    actionSource = unwrappedValue.execute;
                    extend(actionOptions, unwrappedValue)
                }
                var action = new Action(actionSource, actionOptions);
                eventsEngine.off($element, ".dxActionBinding");
                eventsEngine.on($element, clickEvent.name + ".dxActionBinding", function(e) {
                    action.execute({
                        element: $element,
                        model: viewModel,
                        evaluate: function(expression) {
                            var context = viewModel;
                            if (expression.length > 0 && "$" === expression[0]) {
                                context = ko.contextFor(element)
                            }
                            var getter = compileGetter(expression);
                            return getter(context)
                        },
                        event: e
                    });
                    if (!actionOptions.bubbling) {
                        e.stopPropagation()
                    }
                })
            }
        };
        ko.bindingHandlers.dxControlsDescendantBindings = {
            init: function(_, valueAccessor) {
                return {
                    controlsDescendantBindings: ko.unwrap(valueAccessor())
                }
            }
        };
        ko.bindingHandlers.dxIcon = {
            init: function(element, valueAccessor) {
                var options = ko.utils.unwrapObservable(valueAccessor()) || {},
                    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()) || {},
                    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 each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            Class = __webpack_require__( /*! ../../core/class */ 10),
            EventsMixin = __webpack_require__( /*! ../../core/events_mixin */ 54),
            ValidationEngine = __webpack_require__( /*! ../../ui/validation_engine */ 94),
            ko = __webpack_require__( /*! knockout */ 61);
        var koDxValidator = Class.inherit({
            ctor: function(target, option) {
                var that = this;
                that.target = target;
                that.validationRules = option.validationRules;
                that.name = option.name;
                that.isValid = ko.observable(true);
                that.validationError = ko.observable();
                each(this.validationRules, function(_, rule) {
                    rule.validator = that
                })
            },
            validate: function() {
                var result = ValidationEngine.validate(this.target(), this.validationRules, this.name);
                this._applyValidationResult(result);
                return result
            },
            reset: function() {
                this.target(null);
                var result = {
                    isValid: true,
                    brokenRule: null
                };
                this._applyValidationResult(result);
                return result
            },
            _applyValidationResult: function(result) {
                result.validator = this;
                this.target.dxValidator.isValid(result.isValid);
                this.target.dxValidator.validationError(result.brokenRule);
                this.fireEvent("validated", [result])
            }
        }).include(EventsMixin);
        ko.extenders.dxValidator = function(target, option) {
            target.dxValidator = new koDxValidator(target, option);
            target.subscribe(target.dxValidator.validate.bind(target.dxValidator));
            return target
        };
        ValidationEngine.registerModelForValidation = function(model) {
            each(model, function(name, member) {
                if (ko.isObservable(member) && member.dxValidator) {
                    ValidationEngine.registerValidatorInGroup(model, member.dxValidator)
                }
            })
        };
        ValidationEngine.unregisterModelForValidation = function(model) {
            each(model, function(name, member) {
                if (ko.isObservable(member) && member.dxValidator) {
                    ValidationEngine.removeRegisteredValidator(model, member.dxValidator)
                }
            })
        };
        ValidationEngine.validateModel = ValidationEngine.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 */ 61),
            variableWrapper = __webpack_require__( /*! ../../core/utils/variable_wrapper */ 74);
        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 */ 37),
            afterCleanData = elementData.afterCleanData,
            strategyChanging = elementData.strategyChanging,
            ko = __webpack_require__( /*! knockout */ 61),
            compareVersion = __webpack_require__( /*! ../../core/utils/version */ 62).compare;
        var originalKOCleanExternalData = ko.utils.domNodeDisposal.cleanExternalData;
        var patchCleanData = function() {
            afterCleanData(function(nodes) {
                for (var 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 */ 61),
            compareVersion = __webpack_require__( /*! ../../core/utils/version */ 62).compare,
            strategyChanging = __webpack_require__( /*! ../../core/element_data */ 37).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/integration/jquery/renderer.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var jQuery = __webpack_require__( /*! jquery */ 29);
        var rendererBase = __webpack_require__( /*! ../../core/renderer_base */ 232);
        var useJQuery = __webpack_require__( /*! ./use_jquery */ 79)();
        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 */ 29);
        var useJQuery = __webpack_require__( /*! ./use_jquery */ 79)();
        var compareVersion = __webpack_require__( /*! ../../core/utils/version */ 62).compare;
        var each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each;
        var isNumeric = __webpack_require__( /*! ../../core/utils/type */ 1).isNumeric;
        var setEventFixMethod = __webpack_require__( /*! ../../events/utils */ 9).setEventFixMethod;
        var registerEvent = __webpack_require__( /*! ../../events/core/event_registrator */ 67);
        var hookTouchProps = __webpack_require__( /*! ../../events/core/hook_touch_props */ 233);
        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,
                        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 */ 29);
        var deferredUtils = __webpack_require__( /*! ../../core/utils/deferred */ 7);
        var useJQuery = __webpack_require__( /*! ./use_jquery */ 79)();
        var compareVersion = __webpack_require__( /*! ../../core/utils/version */ 62).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 */ 29),
            themes_callback = __webpack_require__( /*! ../../ui/themes_callback */ 250),
            ready = __webpack_require__( /*! ../../core/utils/ready_callbacks */ 52).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 */ 29);
        var eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var useJQuery = __webpack_require__( /*! ./use_jquery */ 79)();
        var registerEventCallbacks = __webpack_require__( /*! ../../events/core/event_registrator_callbacks */ 119);
        var domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13);
        if (useJQuery) {
            registerEventCallbacks.add(function(name, eventObject) {
                jQuery.event.special[name] = eventObject
            });
            var passiveListenerEventName = eventsEngine.passiveListenerEvents.nativeEventName;
            jQuery.event.special[passiveListenerEventName] = {
                setup: function(data, namespaces, handler) {
                    domAdapter.listen(this, passiveListenerEventName, handler, {
                        passive: false
                    })
                }
            };
            eventsEngine.set({
                on: function(element) {
                    jQuery(element).on.apply(jQuery(element), Array.prototype.slice.call(arguments, 1))
                },
                one: function(element) {
                    jQuery(element).one.apply(jQuery(element), Array.prototype.slice.call(arguments, 1))
                },
                off: function(element) {
                    jQuery(element).off.apply(jQuery(element), Array.prototype.slice.call(arguments, 1))
                },
                trigger: function(element) {
                    jQuery(element).trigger.apply(jQuery(element), Array.prototype.slice.call(arguments, 1))
                },
                triggerHandler: function(element) {
                    jQuery(element).triggerHandler.apply(jQuery(element), Array.prototype.slice.call(arguments, 1))
                },
                Event: jQuery.Event
            })
        }
    },
    /*!***********************************************************!*\
      !*** ./artifacts/transpiled/integration/jquery/easing.js ***!
      \***********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var jQuery = __webpack_require__( /*! jquery */ 29),
            easing = __webpack_require__( /*! ../../animation/easing */ 244);
        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 */ 29);
        var dataUtils = __webpack_require__( /*! ../../core/element_data */ 37);
        var useJQuery = __webpack_require__( /*! ./use_jquery */ 79)();
        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 */ 12).setPublicElementWrapper;
        var useJQuery = __webpack_require__( /*! ./use_jquery */ 79)();
        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 */ 29);
        var componentRegistratorCallbacks = __webpack_require__( /*! ../../core/component_registrator_callbacks */ 147);
        var errors = __webpack_require__( /*! ../../core/errors */ 19);
        if (jQuery) {
            var registerJQueryComponent = function(name, componentClass) {
                jQuery.fn[name] = function(options) {
                    var result, isMemberInvoke = "string" === typeof options;
                    if (isMemberInvoke) {
                        var memberName = options,
                            memberArgs = [].slice.call(arguments).slice(1);
                        this.each(function() {
                            var instance = componentClass.getInstance(this);
                            if (!instance) {
                                throw errors.Error("E0009", name)
                            }
                            var member = instance[memberName],
                                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
                }
            };
            componentRegistratorCallbacks.add(registerJQueryComponent)
        }
    },
    /*!*********************************************************!*\
      !*** ./artifacts/transpiled/integration/jquery/ajax.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var jQuery = __webpack_require__( /*! jquery */ 29);
        var ajax = __webpack_require__( /*! ../../core/utils/ajax */ 76);
        var useJQuery = __webpack_require__( /*! ./use_jquery */ 79)();
        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 */ 258);
        if (angular) {
            __webpack_require__( /*! ./jquery */ 46);
            __webpack_require__( /*! ./angular/component_registrator */ 361);
            __webpack_require__( /*! ./angular/event_registrator */ 368);
            __webpack_require__( /*! ./angular/components */ 369);
            __webpack_require__( /*! ./angular/action_executors */ 370)
        }
    },
    /*!***************************************************************************!*\
      !*** ./artifacts/transpiled/integration/angular/component_registrator.js ***!
      \***************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _typeof = "function" === typeof Symbol && "symbol" === typeof Symbol.iterator ? function(obj) {
            return typeof obj
        } : function(obj) {
            return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : 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 _config = __webpack_require__( /*! ../../core/config */ 25);
        var _config2 = _interopRequireDefault(_config);
        var _component_registrator_callbacks = __webpack_require__( /*! ../../core/component_registrator_callbacks */ 147);
        var _component_registrator_callbacks2 = _interopRequireDefault(_component_registrator_callbacks);
        var _class = __webpack_require__( /*! ../../core/class */ 10);
        var _class2 = _interopRequireDefault(_class);
        var _callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 21);
        var _callbacks2 = _interopRequireDefault(_callbacks);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _type2 = _interopRequireDefault(_type);
        var _iterator = __webpack_require__( /*! ../../core/utils/iterator */ 3);
        var _iterator2 = _interopRequireDefault(_iterator);
        var _array = __webpack_require__( /*! ../../core/utils/array */ 11);
        var _array2 = _interopRequireDefault(_array);
        var _locker = __webpack_require__( /*! ../../core/utils/locker */ 249);
        var _locker2 = _interopRequireDefault(_locker);
        var _ui = __webpack_require__( /*! ../../ui/widget/ui.widget */ 28);
        var _ui2 = _interopRequireDefault(_ui);
        var _editor = __webpack_require__( /*! ../../ui/editor/editor */ 45);
        var _editor2 = _interopRequireDefault(_editor);
        var _template = __webpack_require__( /*! ./template */ 362);
        var _template2 = _interopRequireDefault(_template);
        var _module = __webpack_require__( /*! ./module */ 189);
        var _module2 = _interopRequireDefault(_module);
        var _uiCollection_widget = __webpack_require__( /*! ../../ui/collection/ui.collection_widget.edit */ 47);
        var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget);
        var _data = __webpack_require__( /*! ../../core/utils/data */ 23);
        var _data2 = _interopRequireDefault(_data);
        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 */ 19);
        var _errors2 = _interopRequireDefault(_errors);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": 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 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 (!options.hasOwnProperty("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 = void 0;
                    var clearWatcher = void 0;
                    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 watchCallback = function(newValue, oldValue) {
                        if (_this4._ngLocker.locked(optionPath)) {
                            return
                        }
                        _this4._ngLocker.obtain(optionPath);
                        _this4._component.option(optionPath, newValue);
                        updateWatcher();
                        if (_this4._component._optionValuesEqual(optionPath, oldValue, newValue) && _this4._ngLocker.locked(optionPath)) {
                            _this4._ngLocker.release(optionPath)
                        }
                    };
                    var updateWatcher = function() {
                        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) {
                        this._renderingTimer = setTimeout(function() {
                            scope.$apply();
                            _this6._renderingTimer = null
                        })
                    }
                    this._componentDisposing.add(function() {
                        clearTimeout(_this6._renderingTimer)
                    })
                }
            },
            _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];
                var optionOuterPath = void 0;
                if (collectionField) {
                    if (!_type2.default.isNumeric(itemIndex)) {
                        return
                    }
                    optionOuterBag.push("[", itemIndex, "]")
                }
                optionOuterBag.push(innerPathSuffix);
                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 _template2.default(element, _this8._compilerByTemplate.bind(_this8))
                    },
                    watchMethod: function(fn, callback, options) {
                        options = options || {};
                        var immediateValue = void 0;
                        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._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 $content = componentClass.subclassOf(_ui2.default) ? $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__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            TemplateBase = __webpack_require__( /*! ../../ui/widget/ui.template_base */ 71),
            isFunction = __webpack_require__( /*! ../../core/utils/type */ 1).isFunction,
            domUtils = __webpack_require__( /*! ../../core/utils/dom */ 12);
        var NgTemplate = TemplateBase.inherit({
            ctor: function(element, templateCompiler) {
                this._element = element;
                this._compiledTemplate = templateCompiler(domUtils.normalizeTemplateElement(this._element))
            },
            _renderCore: function(options) {
                var compiledTemplate = this._compiledTemplate;
                return isFunction(compiledTemplate) ? compiledTemplate(options) : compiledTemplate
            },
            source: function() {
                return $(this._element).clone()
            }
        });
        module.exports = NgTemplate
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/collection/ui.collection_widget.base.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            getPublicElement = __webpack_require__( /*! ../../core/utils/dom */ 12).getPublicElement,
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13),
            isPlainObject = __webpack_require__( /*! ../../core/utils/type */ 1).isPlainObject,
            when = __webpack_require__( /*! ../../core/utils/deferred */ 7).when,
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            inArray = __webpack_require__( /*! ../../core/utils/array */ 11).inArray,
            iteratorUtils = __webpack_require__( /*! ../../core/utils/iterator */ 3),
            Action = __webpack_require__( /*! ../../core/action */ 81),
            Guid = __webpack_require__( /*! ../../core/guid */ 48),
            domUtils = __webpack_require__( /*! ../../core/utils/dom */ 12),
            dataUtils = __webpack_require__( /*! ../../core/utils/data */ 23),
            Widget = __webpack_require__( /*! ../widget/ui.widget */ 28),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            pointerEvents = __webpack_require__( /*! ../../events/pointer */ 27),
            DataHelperMixin = __webpack_require__( /*! ../../data_helper */ 116),
            CollectionWidgetItem = __webpack_require__( /*! ./item */ 154),
            selectors = __webpack_require__( /*! ../widget/selectors */ 58),
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14),
            holdEvent = __webpack_require__( /*! ../../events/hold */ 95),
            clickEvent = __webpack_require__( /*! ../../events/click */ 17),
            contextMenuEvent = __webpack_require__( /*! ../../events/contextmenu */ 207),
            BindableTemplate = __webpack_require__( /*! ../widget/bindable_template */ 60);
        var COLLECTION_CLASS = "dx-collection",
            ITEM_CLASS = "dx-item",
            CONTENT_CLASS_POSTFIX = "-content",
            ITEM_CONTENT_PLACEHOLDER_CLASS = "dx-item-content-placeholder",
            ITEM_DATA_KEY = "dxItemData",
            ITEM_INDEX_KEY = "dxItemIndex",
            ITEM_TEMPLATE_ID_PREFIX = "tmpl-",
            ITEMS_SELECTOR = "[data-options*='dxItem']",
            SELECTED_ITEM_CLASS = "dx-item-selected",
            ITEM_RESPONSE_WAIT_CLASS = "dx-item-response-wait",
            EMPTY_COLLECTION = "dx-empty-collection",
            TEMPLATE_WRAPPER_CLASS = "dx-template-wrapper",
            ITEM_PATH_REGEX = /^([^.]+\[\d+\]\.)+([\w\.]+)$/;
        var FOCUS_UP = "up",
            FOCUS_DOWN = "down",
            FOCUS_LEFT = "left",
            FOCUS_RIGHT = "right",
            FOCUS_PAGE_UP = "pageup",
            FOCUS_PAGE_DOWN = "pagedown",
            FOCUS_LAST = "last",
            FOCUS_FIRST = "first";
        var CollectionWidget = Widget.inherit({
            _activeStateUnit: "." + ITEM_CLASS,
            _supportedKeys: function() {
                var enter = function(e) {
                        var $itemElement = $(this.option("focusedElement"));
                        if (!$itemElement.length) {
                            return
                        }
                        e.target = $itemElement;
                        e.currentTarget = $itemElement;
                        this._itemClickHandler(e)
                    },
                    space = function(e) {
                        e.preventDefault();
                        enter.call(this, e)
                    },
                    move = function(location, e) {
                        e.preventDefault();
                        e.stopPropagation();
                        this._moveFocus(location, e)
                    };
                return 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 extend(this.callBase(), {
                    selectOnFocus: false,
                    loopItemFocus: true,
                    items: [],
                    itemTemplate: "item",
                    onItemRendered: null,
                    onItemClick: null,
                    onItemHold: null,
                    itemHoldTimeout: 750,
                    onItemContextMenu: null,
                    onFocusedItemChanged: null,
                    noDataText: messageLocalization.format("dxCollectionWidget-noDataText"),
                    dataSource: null,
                    _itemAttributes: {},
                    itemTemplateProperty: "template",
                    focusOnSelectedItem: true,
                    focusedElement: null,
                    disabledExpr: function(data) {
                        return data ? data.disabled : void 0
                    },
                    visibleExpr: function(data) {
                        return data ? data.visible : void 0
                    }
                })
            },
            _getAnonymousTemplateName: function() {
                return "item"
            },
            _init: function() {
                this.callBase();
                this._cleanRenderedItems();
                this._refreshDataSource()
            },
            _initTemplates: function() {
                this._initItemsFromMarkup();
                this.callBase();
                this._defaultTemplates.item = new BindableTemplate(function($container, data) {
                    if (isPlainObject(data)) {
                        this._prepareDefaultItemTemplate(data, $container)
                    } else {
                        $container.text(String(data))
                    }
                }.bind(this), this._getBindableFields(), this.option("integrationOptions.watchMethod"))
            },
            _getBindableFields: function() {
                return ["text", "html"]
            },
            _prepareDefaultItemTemplate: function(data, $container) {
                if (data.text) {
                    $container.text(data.text)
                }
                if (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 = $(item);
                    var result = domUtils.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 Guid;
                var templateOptions = 'dxTemplate: { name: "' + templateId + '" }';
                $item.detach().clone().attr("data-options", templateOptions).data("options", templateOptions).appendTo(this.$element());
                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 (inArray(e.target, this._focusTarget()) === -1) {
                    return
                }
                var $focusedElement = $(this.option("focusedElement"));
                if ($focusedElement.length) {
                    this._setFocusedItem($focusedElement)
                } else {
                    var $activeItem = this._getActiveItem();
                    if ($activeItem.length) {
                        this.option("focusedElement", getPublicElement($activeItem))
                    }
                }
            },
            _focusOutHandler: function() {
                this.callBase.apply(this, arguments);
                var $target = $(this.option("focusedElement"));
                if ($target.length) {
                    this._toggleFocusClass(false, $target)
                }
            },
            _getActiveItem: function(last) {
                var $focusedElement = $(this.option("focusedElement"));
                if ($focusedElement.length) {
                    return $focusedElement
                }
                var index = this.option("focusOnSelectedItem") ? this.option("selectedIndex") : 0,
                    activeElements = this._getActiveElement(),
                    lastIndex = activeElements.length - 1;
                if (index < 0) {
                    index = last ? lastIndex : 0
                }
                return activeElements.eq(index)
            },
            _renderFocusTarget: function() {
                this.callBase.apply(this, arguments);
                this._refreshActiveDescendant()
            },
            _moveFocus: function(location) {
                var $newTarget, $items = this._getAvailableItems();
                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", getPublicElement($newTarget))
                }
            },
            _getAvailableItems: function($itemElements) {
                $itemElements = $itemElements || this._itemElements();
                return $itemElements.filter(":visible").not(".dx-state-disabled")
            },
            _prevItem: function($items) {
                var $target = this._getActiveItem(),
                    targetIndex = $items.index($target),
                    $last = $items.last(),
                    $item = $($items[targetIndex - 1]),
                    loop = this.option("loopItemFocus");
                if (0 === $item.length && loop) {
                    $item = $last
                }
                return $item
            },
            _nextItem: function($items) {
                var $target = this._getActiveItem(true),
                    targetIndex = $items.index($target),
                    $first = $items.first(),
                    $item = $($items[targetIndex + 1]),
                    loop = this.option("loopItemFocus");
                if (0 === $item.length && loop) {
                    $item = $first
                }
                return $item
            },
            _selectFocusedItem: function($target) {
                this.selectItem($target)
            },
            _removeFocusedItem: function(target) {
                var $target = $(target);
                if ($target.length) {
                    this._toggleFocusClass(false, $target);
                    $target.removeAttr("id")
                }
            },
            _refreshActiveDescendant: function() {
                this.setAria("activedescendant", "");
                this.setAria("activedescendant", this.getFocusedItemId())
            },
            _setFocusedItem: function($target) {
                if (!$target || !$target.length) {
                    return
                }
                $target.attr("id", this.getFocusedItemId());
                this._toggleFocusClass(true, $target);
                this.onFocusedItemChanged(this.getFocusedItemId());
                this._refreshActiveDescendant();
                if (this.option("selectOnFocus")) {
                    this._selectFocusedItem($target)
                }
            },
            _findItemElementByItem: function(item) {
                var result = $(),
                    that = this;
                this.itemElements().each(function() {
                    var $item = $(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)
                }
            },
            _refreshItem: function($item) {
                var itemData = this._getItemData($item),
                    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],
                            itemPath = args.fullName.replace("." + property, ""),
                            item = this.option(itemPath);
                        this._itemOptionChanged(item, property, args.value, args.previousValue);
                        return
                    }
                }
                switch (args.name) {
                    case "items":
                    case "_itemAttributes":
                    case "itemTemplateProperty":
                        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._removeFocusedItem(args.previousValue);
                        this._setFocusedItem($(args.value));
                        break;
                    case "visibleExpr":
                    case "disabledExpr":
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _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();
                    this._renderFocusTarget()
                } 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() {
                $(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: commonUtils.deferRenderer(function() {
                this._renderContentImpl()
            }),
            _renderContent: function() {
                this._fireContentReadyAction()
            },
            _render: function() {
                this.callBase();
                this._attachClickEvent();
                this._attachHoldEvent();
                this._attachContextMenuEvent()
            },
            _attachClickEvent: function() {
                var itemSelector = this._itemSelector(),
                    clickEventNamespace = eventUtils.addNamespace(clickEvent.name, this.NAME),
                    pointerDownEventNamespace = eventUtils.addNamespace(pointerEvents.down, this.NAME),
                    that = this;
                var pointerDownAction = new Action(function(args) {
                    var event = args.event;
                    that._itemPointerDownHandler(event)
                });
                eventsEngine.off(this._itemContainer(), clickEventNamespace, itemSelector);
                eventsEngine.off(this._itemContainer(), pointerDownEventNamespace, itemSelector);
                eventsEngine.on(this._itemContainer(), clickEventNamespace, itemSelector, function(e) {
                    this._itemClickHandler(e)
                }.bind(this));
                eventsEngine.on(this._itemContainer(), pointerDownEventNamespace, itemSelector, function(e) {
                    pointerDownAction.execute({
                        element: $(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 = $(e.target),
                        $closestItem = $target.closest(this._itemElements()),
                        $closestFocusable = this._closestFocusable($target);
                    if ($closestItem.length && $closestFocusable && inArray($closestFocusable.get(0), this._focusTarget()) !== -1) {
                        this.option("focusedElement", getPublicElement($closestItem))
                    }
                }.bind(this);
                this._itemFocusTimeout = setTimeout(this._forcePointerDownFocus.bind(this))
            },
            _closestFocusable: function($target) {
                if ($target.is(selectors.focusable)) {
                    return $target
                } else {
                    $target = $target.parent();
                    while ($target.length && !domAdapter.isDocument($target.get(0))) {
                        if ($target.is(selectors.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(),
                    itemSelector = this._itemSelector(),
                    eventName = eventUtils.addNamespace(holdEvent.name, this.NAME);
                eventsEngine.off($itemContainer, eventName, itemSelector);
                eventsEngine.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(),
                    itemSelector = this._itemSelector(),
                    eventName = eventUtils.addNamespace(contextMenuEvent.name, this.NAME);
                eventsEngine.off($itemContainer, eventName, itemSelector);
                eventsEngine.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) {
                    iteratorUtils.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: getPublicElement($itemContent),
                    contentClass: this._itemContentClass(),
                    defaultTemplateName: this.option("itemTemplate")
                });
                var that = this;
                when(renderContentPromise).done(function($itemContent) {
                    that._postprocessRenderItem({
                        itemElement: $itemFrame,
                        itemContent: $itemContent,
                        itemData: itemData,
                        itemIndex: index
                    });
                    that._executeItemRenderAction(index, itemData, 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
                }
                eventsEngine.on($itemElement, clickEvent.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 = $(this._createItemByTemplate(itemTemplate, args));
                if (!$templateResult.hasClass(TEMPLATE_WRAPPER_CLASS)) {
                    return args.container
                }
                return this._renderItemContentByNode(args, $templateResult)
            },
            _renderItemContentByNode: function(args, $node) {
                $(args.container).replaceWith($node);
                args.container = getPublicElement($node);
                this._addItemContentClasses(args);
                return $node
            },
            _addItemContentClasses: function(args) {
                var classes = [ITEM_CLASS + CONTENT_CLASS_POSTFIX, args.contentClass];
                $(args.container).addClass(classes.join(" "))
            },
            _appendItemToContainer: function($container, $itemFrame, index) {
                $itemFrame.appendTo($container)
            },
            _renderItemFrame: function(index, itemData, $container, $itemToReplace) {
                var $itemFrame = $("<div>");
                new this.constructor.ItemClass($itemFrame, this._itemOptions(), itemData || {});
                if ($itemToReplace && $itemToReplace.length) {
                    $itemToReplace.replaceWith($itemFrame)
                } else {
                    this._appendItemToContainer.call(this, $container, $itemFrame, index)
                }
                return $itemFrame
            },
            _itemOptions: function() {
                var that = this;
                return {
                    watchMethod: function() {
                        return that.option("integrationOptions.watchMethod")
                    },
                    fieldGetter: function(field) {
                        var expr = that.option(field + "Expr"),
                            getter = dataUtils.compileGetter(expr);
                        return getter
                    }
                }
            },
            _postprocessRenderItem: commonUtils.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: ["designMode", "disabled", "readOnly"],
                    category: "rendering"
                })
            },
            _getItemRenderAction: function() {
                return this._itemRenderAction || this._createItemRenderAction()
            },
            _getItemTemplateName: function(args) {
                var data = args.itemData,
                    templateProperty = args.templateProperty || this.option("itemTemplateProperty"),
                    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"),
                    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 || $("<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, extend(actionArgs, {
                    event: dxEvent
                }), actionConfig)
            },
            _itemEventHandler: function(initiator, handlerOptionName, actionArgs, actionConfig) {
                var action = this._createActionByOption(handlerOptionName, extend({
                    validatingTargetName: "itemElement"
                }, actionConfig));
                return this._itemEventHandlerImpl(initiator, action, actionArgs)
            },
            _itemEventHandlerByHandler: function(initiator, handler, actionArgs, actionConfig) {
                var action = this._createAction(handler, extend({
                    validatingTargetName: "itemElement"
                }, actionConfig));
                return this._itemEventHandlerImpl(initiator, action, actionArgs)
            },
            _itemEventHandlerImpl: function(initiator, action, actionArgs) {
                var $itemElement = this._closestItemElement($(initiator)),
                    args = extend({}, actionArgs);
                return action(extend(actionArgs, this._extendActionArgs($itemElement), args))
            },
            _extendActionArgs: function($itemElement) {
                return {
                    itemElement: getPublicElement($itemElement),
                    itemIndex: this._itemElements().index($itemElement),
                    itemData: this._getItemData($itemElement)
                }
            },
            _closestItemElement: function($element) {
                return $($element).closest(this._itemSelector())
            },
            _getItemData: function(itemElement) {
                return $(itemElement).data(this._itemDataKey())
            },
            _getSummaryItemsWidth: function(items, includeMargin) {
                var result = 0;
                if (items) {
                    iteratorUtils.each(items, function(_, item) {
                        result += $(item).outerWidth(includeMargin || false)
                    })
                }
                return result
            },
            getFocusedItemId: function() {
                if (!this._focusedItemId) {
                    this._focusedItemId = "dx-" + new Guid
                }
                return this._focusedItemId
            },
            itemElements: function() {
                return this._itemElements()
            },
            itemsContainer: function() {
                return this._itemContainer()
            }
        }).include(DataHelperMixin);
        CollectionWidget.ItemClass = CollectionWidgetItem;
        module.exports = CollectionWidget
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/data/remote_query.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var queryAdapters = __webpack_require__( /*! ./query_adapters */ 190),
            errorsModule = __webpack_require__( /*! ./errors */ 35),
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            isFunction = __webpack_require__( /*! ../core/utils/type */ 1).isFunction,
            Deferred = __webpack_require__( /*! ../core/utils/deferred */ 7).Deferred,
            arrayQueryImpl = __webpack_require__( /*! ./array_query */ 153);
        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 _adapterFactory, _adapter, _taskQueue, _currentTask, _mergedSortArgs, d = new Deferred;
                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],
                        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),
            Class = __webpack_require__( /*! ../../core/class */ 10),
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            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 commonUtils.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)
                }
                return this._getItemByNormalizedIndex(this.getIndexByItemData(value))
            },
            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),
            SelectionStrategy = __webpack_require__( /*! ./selection.strategy */ 259),
            errors = __webpack_require__( /*! ../widget/ui.errors */ 18),
            dataQuery = __webpack_require__( /*! ../../data/query */ 43),
            Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7).Deferred;
        module.exports = SelectionStrategy.inherit({
            getSelectedItems: function() {
                return this._loadFilteredData(this.options.selectionFilter)
            },
            getSelectedItemKeys: function() {
                var d = new Deferred,
                    that = this,
                    key = this.options.key(),
                    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, false)
                    }
                } 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
            },
            _processSelectedItem: function(key) {
                var keyField = this.options.key(),
                    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._processSelectedItem(key);
                this._addSelectionFilter(false, filter, true)
            },
            removeSelectedItem: function(key) {
                var filter = this._processSelectedItem(key);
                this._addSelectionFilter(true, filter, true)
            },
            validate: function() {
                var key = this.options.key;
                if (key && void 0 === key()) {
                    throw errors.Error("E1042")
                }
            },
            _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, isUnique) {
                var that = this,
                    needAddFilter = true,
                    currentFilter = isDeselect ? ["!", filter] : filter,
                    currentOperation = isDeselect ? "and" : "or",
                    selectionFilter = that.options.selectionFilter || [];
                selectionFilter = that._denormalizeFilter(selectionFilter);
                if (selectionFilter && selectionFilter.length) {
                    that._removeSameFilter(selectionFilter, filter, isDeselect);
                    var lastOperation = that._removeSameFilter(selectionFilter, filter, !isDeselect);
                    if (lastOperation && ("or" !== lastOperation && isDeselect || "and" !== lastOperation && !isDeselect)) {
                        needAddFilter = false;
                        selectionFilter = []
                    }
                    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
            },
            _removeSameFilter: function(selectionFilter, filter, inverted) {
                filter = inverted ? ["!", filter] : filter;
                var filterIndex = this._findSubFilter(selectionFilter, filter);
                if (JSON.stringify(filter) === JSON.stringify(selectionFilter)) {
                    selectionFilter.splice(0, selectionFilter.length);
                    return "undefined"
                }
                if (filterIndex >= 0) {
                    if (filterIndex > 0) {
                        return selectionFilter.splice(filterIndex - 1, 2)[0]
                    } else {
                        return selectionFilter.splice(filterIndex, 2)[1] || "undefined"
                    }
                } else {
                    for (var i = 0; i < selectionFilter.length; i++) {
                        var lastRemoveOperation = Array.isArray(selectionFilter[i]) && selectionFilter[i].length > 2 && this._removeSameFilter(selectionFilter[i], filter);
                        if (lastRemoveOperation) {
                            if (1 === selectionFilter[i].length) {
                                selectionFilter[i] = selectionFilter[i][0]
                            }
                            return lastRemoveOperation
                        }
                    }
                }
            },
            getSelectAllState: function() {
                var filter = this.options.filter(),
                    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 */ 4),
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            getKeyHash = commonUtils.getKeyHash,
            dataQuery = __webpack_require__( /*! ../../data/query */ 43),
            deferredUtils = __webpack_require__( /*! ../../core/utils/deferred */ 7),
            SelectionFilterCreator = __webpack_require__( /*! ../../core/utils/selection_filter */ 270).SelectionFilterCreator,
            when = deferredUtils.when,
            Deferred = deferredUtils.Deferred,
            errors = __webpack_require__( /*! ../widget/ui.errors */ 18),
            SelectionStrategy = __webpack_require__( /*! ./selection.strategy */ 259);
        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 keyIndicesToRemoveMap, keyIndex, i, keyOf = this.options.keyOf;
                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],
                        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,
                    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),
                    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().filter(this.options.isSelectableItem).map(this.options.getItemData);
                var localFilter = selectionFilterCreator.getLocalFilter(this.options.keyOf, this.equalKeys.bind(this), this.options.equalByReference);
                filteredItems = filteredItems.filter(localFilter);
                if (deselectedItems.length || !isSelectAll && filteredItems.length === keys.length) {
                    deferred.resolve(filteredItems)
                } else {
                    deferred = this._loadFilteredData(combinedFilter, localFilter)
                }
                return deferred
            },
            _replaceSelectionUpdate: function(items) {
                var internalKeys = [],
                    keyOf = this.options.keyOf;
                if (!keyOf) {
                    return
                }
                for (var i = 0; i < items.length; i++) {
                    var item = items[i],
                        key = keyOf(item);
                    internalKeys.push(key)
                }
                this.setSelectedItems(internalKeys, items)
            },
            _warnOnIncorrectKeys: function(keys) {
                for (var i = 0; i < keys.length; i++) {
                    if (!this.isItemKeySelected(keys[i])) {
                        errors.log("W1002", keys[i])
                    }
                }
            },
            _loadSelectedItems: function(keys, isDeselect, isSelectAll) {
                var that = this,
                    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,
                    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) {
                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],
                        currentKeyHash = getKeyHash(currentKey),
                        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),
                    isBatchDeselect = !!keyIndicesToRemoveMap,
                    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,
                    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 eventRegistratorCallbacks = __webpack_require__( /*! ../../events/core/event_registrator_callbacks */ 119),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            ngModule = __webpack_require__( /*! ./module */ 189);
        eventRegistratorCallbacks.add(function(name) {
            var ngEventName = name.slice(0, 2) + name.charAt(2).toUpperCase() + name.slice(3);
            ngModule.directive(ngEventName, ["$parse", function($parse) {
                return function(scope, element, attr) {
                    var handler, attrValue = attr[ngEventName].trim(),
                        eventOptions = {};
                    if ("{" === attrValue.charAt(0)) {
                        eventOptions = scope.$eval(attrValue);
                        handler = $parse(eventOptions.execute)
                    } else {
                        handler = $parse(attr[ngEventName])
                    }
                    eventsEngine.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 */ 21),
            ngModule = __webpack_require__( /*! ./module */ 189);
        ngModule.service("dxDigestCallbacks", ["$rootScope", function($rootScope) {
            var begin = Callbacks(),
                prioritizedEnd = Callbacks(),
                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 */ 81);
        Action.registerExecutor({
            ngExpression: {
                execute: function(e) {
                    if ("string" === typeof e.action) {
                        e.context.$eval(e.action)
                    }
                }
            }
        })
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/localization/globalize/message.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ./core */ 124);
        var Globalize = __webpack_require__( /*! globalize */ 70),
            messageLocalization = __webpack_require__( /*! ../message */ 14),
            coreLocalization = __webpack_require__( /*! ../core */ 86);
        __webpack_require__( /*! globalize/message */ 70);
        if (Globalize && Globalize.formatMessage) {
            var DEFAULT_LOCALE = "en";
            var originalLoadMessages = Globalize.loadMessages;
            Globalize.loadMessages = function(messages) {
                messageLocalization.load(messages)
            };
            var globalizeMessageLocalization = {
                ctor: function() {
                    this.load(this._dictionary)
                },
                load: function(messages) {
                    this.callBase(messages);
                    originalLoadMessages(messages)
                },
                getMessagesByLocales: function() {
                    return Globalize.cldr.get("globalize-messages")
                },
                getFormatter: function(key, locale) {
                    var currentLocale = locale || coreLocalization.locale(),
                        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 result, currentGlobalize = !locale || locale === coreLocalization.locale() ? Globalize : new Globalize(locale);
                    if (this._messageLoaded(key, locale)) {
                        result = currentGlobalize.messageFormatter(key)
                    }
                    return result
                },
                _messageLoaded: function(key, locale) {
                    var currentCldr = locale ? new Globalize(locale).cldr : Globalize.locale(),
                        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)
                }
            };
            messageLocalization.inject(globalizeMessageLocalization)
        }
    },
    /*!*************************************************************!*\
      !*** ./artifacts/transpiled/localization/globalize/date.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ./core */ 124);
        __webpack_require__( /*! ./number */ 192);
        __webpack_require__( /*! globalize/date */ 70);
        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} – {1}",
                                        d: {
                                            d: "d – d"
                                        },
                                        h: {
                                            a: "h a – h a",
                                            h: "h – h a"
                                        },
                                        H: {
                                            H: "HH – HH"
                                        },
                                        hm: {
                                            a: "h:mm a – h:mm a",
                                            h: "h:mm – h:mm a",
                                            m: "h:mm – h:mm a"
                                        },
                                        Hm: {
                                            H: "HH:mm – HH:mm",
                                            m: "HH:mm – HH:mm"
                                        },
                                        hmv: {
                                            a: "h:mm a – h:mm a v",
                                            h: "h:mm – h:mm a v",
                                            m: "h:mm – h:mm a v"
                                        },
                                        Hmv: {
                                            H: "HH:mm – HH:mm v",
                                            m: "HH:mm – HH:mm v"
                                        },
                                        hv: {
                                            a: "h a – h a v",
                                            h: "h – h a v"
                                        },
                                        Hv: {
                                            H: "HH – HH v"
                                        },
                                        M: {
                                            M: "M – M"
                                        },
                                        Md: {
                                            d: "M/d – M/d",
                                            M: "M/d – M/d"
                                        },
                                        MEd: {
                                            d: "E, M/d – E, M/d",
                                            M: "E, M/d – E, M/d"
                                        },
                                        MMM: {
                                            M: "MMM – MMM"
                                        },
                                        MMMd: {
                                            d: "MMM d – d",
                                            M: "MMM d – MMM d"
                                        },
                                        MMMEd: {
                                            d: "E, MMM d – E, MMM d",
                                            M: "E, MMM d – E, MMM d"
                                        },
                                        y: {
                                            y: "y – y"
                                        },
                                        yM: {
                                            M: "M/y – M/y",
                                            y: "M/y – M/y"
                                        },
                                        yMd: {
                                            d: "M/d/y – M/d/y",
                                            M: "M/d/y – M/d/y",
                                            y: "M/d/y – M/d/y"
                                        },
                                        yMEd: {
                                            d: "E, M/d/y – E, M/d/y",
                                            M: "E, M/d/y – E, M/d/y",
                                            y: "E, M/d/y – E, M/d/y"
                                        },
                                        yMMM: {
                                            M: "MMM – MMM y",
                                            y: "MMM y – MMM y"
                                        },
                                        yMMMd: {
                                            d: "MMM d – d, y",
                                            M: "MMM d – MMM d, y",
                                            y: "MMM d, y – MMM d, y"
                                        },
                                        yMMMEd: {
                                            d: "E, MMM d – E, MMM d, y",
                                            M: "E, MMM d – E, MMM d, y",
                                            y: "E, MMM d, y – E, MMM d, y"
                                        },
                                        yMMMM: {
                                            M: "MMMM – MMMM y",
                                            y: "MMMM y – 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 Globalize = __webpack_require__( /*! globalize */ 70),
            dateLocalization = __webpack_require__( /*! ../date */ 32),
            isObject = __webpack_require__( /*! ../../core/utils/type */ 1).isObject,
            inArray = __webpack_require__( /*! ../../core/utils/array */ 11).inArray,
            iteratorUtils = __webpack_require__( /*! ../../core/utils/iterator */ 3);
        if (Globalize && Globalize.formatDate) {
            if ("en" === Globalize.locale().locale) {
                Globalize.load(weekData, timeData, enCaGregorian);
                Globalize.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"]
                },
                mediumdatemediumtime: {
                    path: "dateTimeFormats/medium",
                    parts: ["shorttime", "monthandday"]
                },
                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 = {
                _getPatternByFormat: function(format) {
                    var that = this,
                        lowerFormat = format.toLowerCase(),
                        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) {
                        iteratorUtils.each(globalizeFormat.parts, function(index, part) {
                            result = result.replace("{" + index + "}", that._getPatternByFormat(part))
                        })
                    }
                    return result
                },
                _getFormatStringByPath: function(path) {
                    return Globalize.locale().main("dates/calendars/gregorian/" + path)
                },
                getMonthNames: function(format) {
                    var months = Globalize.locale().main("dates/calendars/gregorian/months/stand-alone/" + (format || "wide"));
                    return iteratorUtils.map(months, function(month) {
                        return month
                    })
                },
                getDayNames: function(format) {
                    var days = Globalize.locale().main("dates/calendars/gregorian/days/stand-alone/" + (format || "wide"));
                    return iteratorUtils.map(days, function(day) {
                        return day
                    })
                },
                getTimeSeparator: function() {
                    return Globalize.locale().main("numbers/symbols-numberSystem-latn/timeSeparator")
                },
                format: function(date, _format) {
                    if (!date) {
                        return
                    }
                    if (!_format) {
                        return date
                    }
                    var formatter, formatCacheKey;
                    if ("function" === typeof _format) {
                        return _format(date)
                    }
                    if (_format.formatter) {
                        return _format.formatter(date)
                    }
                    _format = _format.type || _format;
                    if ("string" === typeof _format) {
                        formatCacheKey = Globalize.locale().locale + ":" + _format;
                        formatter = formattersCache[formatCacheKey];
                        if (!formatter) {
                            _format = {
                                raw: this._getPatternByFormat(_format) || _format
                            };
                            formatter = formattersCache[formatCacheKey] = Globalize.dateFormatter(_format)
                        }
                    } else {
                        if (!this._isAcceptableFormat(_format)) {
                            return
                        }
                        formatter = Globalize.dateFormatter(_format)
                    }
                    return formatter(date)
                },
                parse: function(text, format) {
                    if (!text) {
                        return
                    }
                    if (!format || "function" === typeof format || isObject(format) && !this._isAcceptableFormat(format)) {
                        if (format) {
                            var parsedValue = this.callBase(text, format);
                            if (parsedValue) {
                                return parsedValue
                            }
                        }
                        return Globalize.parseDate(text)
                    }
                    if (format.parser) {
                        return format.parser(text)
                    }
                    if ("string" === typeof format) {
                        format = {
                            raw: this._getPatternByFormat(format) || format
                        }
                    }
                    return Globalize.parseDate(text, format)
                },
                _isAcceptableFormat: function(format) {
                    if (format.parser) {
                        return true
                    }
                    for (var i = 0; i < ACCEPTABLE_JSON_FORMAT_PROPERTIES.length; i++) {
                        if (format.hasOwnProperty(ACCEPTABLE_JSON_FORMAT_PROPERTIES[i])) {
                            return true
                        }
                    }
                },
                firstDayOfWeekIndex: function() {
                    var firstDay = Globalize.locale().supplemental.weekData.firstDay();
                    return inArray(firstDay, this._getDayKeys())
                },
                _getDayKeys: function() {
                    var days = Globalize.locale().main("dates/calendars/gregorian/days/format/short");
                    return iteratorUtils.map(days, function(day, key) {
                        return key
                    })
                }
            };
            dateLocalization.inject(globalizeDateLocalization)
        }
    },
    /*!*****************************************************************!*\
      !*** ./artifacts/transpiled/localization/globalize/currency.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _typeof = "function" === typeof Symbol && "symbol" === typeof Symbol.iterator ? function(obj) {
            return typeof obj
        } : function(obj) {
            return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
        };
        __webpack_require__( /*! ./core */ 124);
        __webpack_require__( /*! ./number */ 192);
        __webpack_require__( /*! ../currency */ 146);
        __webpack_require__( /*! globalize/currency */ 70);
        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"
                        }
                    }
                }
            }
        };
        var Globalize = __webpack_require__( /*! globalize */ 70),
            config = __webpack_require__( /*! ../../core/config */ 25),
            numberLocalization = __webpack_require__( /*! ../number */ 49);
        if (Globalize && Globalize.formatCurrency) {
            if ("en" === Globalize.locale().locale) {
                Globalize.load(enCurrencyUSD, currencyData);
                Globalize.locale("en")
            }
            var formattersCache = {};
            var getFormatter = function(currency, format) {
                var formatter, formatCacheKey;
                if ("object" === ("undefined" === typeof format ? "undefined" : _typeof(format))) {
                    formatCacheKey = Globalize.locale().locale + ":" + currency + ":" + JSON.stringify(format)
                } else {
                    formatCacheKey = Globalize.locale().locale + ":" + currency + ":" + format
                }
                formatter = formattersCache[formatCacheKey];
                if (!formatter) {
                    formatter = formattersCache[formatCacheKey] = Globalize.currencyFormatter(currency, format)
                }
                return formatter
            };
            var globalizeCurrencyLocalization = {
                _formatNumberCore: function(value, format, formatConfig) {
                    if ("currency" === format) {
                        var currency = formatConfig && formatConfig.currency || config().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 = config().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 = config().defaultCurrency
                    }
                    return Globalize.cldr.main("numbers/currencies/" + currency)
                },
                getOpenXmlCurrencyFormat: function(currency) {
                    var i, result, symbol, encodeSymbols, currencySymbol = this.getCurrencySymbol(currency).symbol,
                        currencyFormat = Globalize.cldr.main("numbers/currencyFormats-numberSystem-latn");
                    if (currencyFormat.accounting) {
                        encodeSymbols = {
                            ".00": "{0}",
                            "'": "\\'",
                            "\\(": "\\(",
                            "\\)": "\\)",
                            " ": "\\ ",
                            '"': "&quot;",
                            "\\¤": currencySymbol
                        };
                        result = currencyFormat.accounting.split(";");
                        for (i = 0; i < result.length; i++) {
                            for (symbol in encodeSymbols) {
                                if (encodeSymbols.hasOwnProperty(symbol)) {
                                    result[i] = result[i].replace(new RegExp(symbol, "g"), encodeSymbols[symbol])
                                }
                            }
                        }
                        return 2 === result.length ? result[0] + "_);" + result[1] : result[0]
                    }
                }
            };
            numberLocalization.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 */ 50).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),
            domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 13),
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6),
            window = windowUtils.getWindow(),
            Class = __webpack_require__( /*! ../core/class */ 10),
            abstract = Class.abstract,
            errors = __webpack_require__( /*! ./errors */ 35).errors,
            ArrayStore = __webpack_require__( /*! ./array_store */ 80);
        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 */ 19),
            window = __webpack_require__( /*! ../core/utils/window */ 6).getWindow(),
            proxyUrlFormatter = __webpack_require__( /*! ./proxy_url_formatter */ 261);
        var IS_WINJS_ORIGIN, 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 */ 260);
        DevExpress.data.ODataStore = __webpack_require__( /*! ../../data/odata/store */ 262);
        DevExpress.data.ODataContext = __webpack_require__( /*! ../../data/odata/context */ 378);
        DevExpress.data.utils = DevExpress.data.utils || {};
        DevExpress.data.utils.odata = {};
        DevExpress.data.utils.odata.keyConverters = __webpack_require__( /*! ../../data/odata/utils */ 106).keyConverters;
        DevExpress.data.EdmLiteral = __webpack_require__( /*! ../../data/odata/utils */ 106).EdmLiteral;
        var ODataUtilsModule = __webpack_require__( /*! ../../data/odata/utils */ 106);
        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 */ 155).odata
    },
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/data/odata/context.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ../../core/class */ 10),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            errorsModule = __webpack_require__( /*! ../errors */ 35),
            ODataStore = __webpack_require__( /*! ./store */ 262),
            mixins = __webpack_require__( /*! ./mixins */ 263),
            deferredUtils = __webpack_require__( /*! ../../core/utils/deferred */ 7),
            when = deferredUtils.when,
            Deferred = deferredUtils.Deferred;
        __webpack_require__( /*! ./query_adapter */ 155);
        var ODataContext = Class.inherit({
            ctor: function(options) {
                var that = this;
                that._extractServiceOptions(options);
                that._errorHandler = options.errorHandler;
                each(options.entities || [], function(entityAlias, entityOptions) {
                    that[entityAlias] = new ODataStore(extend({}, options, {
                        url: that._url + "/" + encodeURIComponent(entityOptions.name || entityAlias)
                    }, entityOptions))
                })
            },
            get: function(operationName, params) {
                return this.invoke(operationName, params, "GET")
            },
            invoke: function(operationName, params, httpMethod) {
                params = params || {};
                httpMethod = (httpMethod || "POST").toLowerCase();
                var payload, d = new Deferred,
                    url = this._url + "/" + encodeURIComponent(operationName);
                if (4 === this.version()) {
                    if ("get" === httpMethod) {
                        url = mixins.formatFunctionInvocationUrl(url, mixins.escapeServiceOperationParams(params, this.version()));
                        params = null
                    } else {
                        if ("post" === httpMethod) {
                            payload = params;
                            params = null
                        }
                    }
                }
                when(this._sendRequest(url, httpMethod, mixins.escapeServiceOperationParams(params, this.version()), payload)).done(function(r) {
                    if (typeUtils.isPlainObject(r) && operationName in r) {
                        r = r[operationName]
                    }
                    d.resolve(r)
                }).fail(this._errorHandler).fail(errorsModule._errorHandler).fail(d.reject);
                return d.promise()
            },
            objectLink: function(entityAlias, key) {
                var store = this[entityAlias];
                if (!store) {
                    throw errorsModule.errors.Error("E4015", entityAlias)
                }
                if (!typeUtils.isDefined(key)) {
                    return null
                }
                return {
                    __metadata: {
                        uri: store._byKeyUrl(key, true)
                    }
                }
            }
        }).include(mixins.SharedMethods);
        module.exports = ODataContext
    }, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
    /*!****************************************************!*\
      !*** ./artifacts/transpiled/bundles/modules/ui.js ***!
      \****************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ./core */ 131);
        module.exports = DevExpress.ui = {};
        DevExpress.ui.templateRendered = __webpack_require__( /*! ../../ui/widget/ui.template_base */ 71).renderedCallbacks
    },
    /*!********************************************************!*\
      !*** ./artifacts/transpiled/ui/set_template_engine.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! ./widget/jquery.template */ 269).setTemplateEngine
    },
    /*!**************************************************************************!*\
      !*** ./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 */ 47);
        var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 4);

        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,
                    itemDeferred = new _deferred.Deferred,
                    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/notify.js ***!
      \*******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            Action = __webpack_require__( /*! ../core/action */ 81),
            viewPortUtils = __webpack_require__( /*! ../core/utils/view_port */ 66),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            isPlainObject = __webpack_require__( /*! ../core/utils/type */ 1).isPlainObject,
            Toast = __webpack_require__( /*! ./toast */ 295);
        var $notify = null;
        var notify = function(message, type, displayTime) {
            var options = isPlainObject(message) ? message : {
                message: message
            };
            var userHiddenAction = options.onHidden;
            extend(options, {
                type: type,
                displayTime: displayTime,
                onHidden: function(args) {
                    $(args.element).remove();
                    new Action(userHiddenAction, {
                        context: args.model
                    }).execute(arguments)
                }
            });
            $notify = $("<div>").appendTo(viewPortUtils.value());
            new Toast($notify, options).show()
        };
        module.exports = notify
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/ui/autocomplete.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            noop = __webpack_require__( /*! ../core/utils/common */ 4).noop,
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            DropDownList = __webpack_require__( /*! ./drop_down_editor/ui.drop_down_list */ 213),
            themes = __webpack_require__( /*! ./themes */ 20),
            Deferred = __webpack_require__( /*! ../core/utils/deferred */ 7).Deferred;
        var AUTOCOMPLETE_CLASS = "dx-autocomplete",
            AUTOCOMPLETE_POPUP_WRAPPER_CLASS = "dx-autocomplete-popup-wrapper";
        var Autocomplete = DropDownList.inherit({
            _supportedKeys: function() {
                var item = this._list ? this._list.option("focusedElement") : null,
                    parent = this.callBase();
                item = item && $(item);
                return extend({}, parent, {
                    upArrow: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        if (item && !item.prev().length) {
                            this._clearFocusedItem();
                            return false
                        }
                        return true
                    },
                    downArrow: function(e) {
                        e.preventDefault();
                        e.stopPropagation();
                        if (item && !item.next().length) {
                            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
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return themes.isAndroid5()
                    },
                    options: {
                        popupPosition: {
                            offset: {
                                h: -16,
                                v: -8
                            }
                        }
                    }
                }])
            },
            _initMarkup: function() {
                this.callBase();
                this.$element().addClass(AUTOCOMPLETE_CLASS);
                this.setAria("autocomplete", "inline")
            },
            _loadValue: function() {
                return (new Deferred).resolve(this.option("value"))
            },
            _displayGetterExpr: function() {
                return this.option("valueExpr")
            },
            _setSelectedItem: function(item) {
                this.callBase(item);
                this.option("displayValue", this.option("value"))
            },
            _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",
                    indicateLoading: false
                })
            },
            _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()
            },
            _dataSourceOptions: function() {
                return {
                    paginate: true
                }
            },
            _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.callBase(args);
                        break;
                    default:
                        this.callBase(args)
                }
            },
            reset: function() {
                this.callBase();
                this.close()
            }
        });
        registerComponent("dxAutocomplete", Autocomplete);
        module.exports = Autocomplete
    },
    /*!******************************************************!*\
      !*** ./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),
            windowUtils = __webpack_require__( /*! ../../core/utils/window */ 6),
            window = windowUtils.getWindow(),
            navigator = windowUtils.getNavigator(),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            inArray = __webpack_require__( /*! ../../core/utils/array */ 11).inArray,
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            TextEditor = __webpack_require__( /*! ./ui.text_editor */ 296),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9);
        var ua = navigator.userAgent,
            ignoreCode = [8, 9, 13, 33, 34, 35, 36, 37, 38, 39, 40, 46],
            TEXTBOX_CLASS = "dx-textbox",
            SEARCHBOX_CLASS = "dx-searchbox",
            ICON_CLASS = "dx-icon",
            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._isAndroid()) {
                    eventsEngine.on(this._input(), eventUtils.addNamespace("keydown", this.NAME), this._onKeyDownAndroidHandler.bind(this));
                    eventsEngine.on(this._input(), eventUtils.addNamespace("change", this.NAME), this._onChangeAndroidHandler.bind(this))
                }
            },
            _renderProps: function() {
                this.callBase();
                this._toggleMaxLengthProp()
            },
            _toggleMaxLengthProp: function() {
                if (this._isAndroid()) {
                    return
                }
                var maxLength = this.option("maxLength");
                if (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;
                    default:
                        this.callBase(args)
                }
            },
            _onKeyDownAndroidHandler: function(e) {
                var maxLength = this.option("maxLength");
                if (maxLength) {
                    var $input = $(e.target),
                        code = e.keyCode;
                    this._cutOffExtraChar($input);
                    return $input.val().length < maxLength || inArray(code, ignoreCode) !== -1 || "" !== window.getSelection().toString()
                } else {
                    return true
                }
            },
            _onChangeAndroidHandler: function(e) {
                var $input = $(e.target);
                if (this.option("maxLength")) {
                    this._cutOffExtraChar($input)
                }
            },
            _cutOffExtraChar: function($input) {
                var maxLength = this.option("maxLength"),
                    textInput = $input.val();
                if (textInput.length > maxLength) {
                    $input.val(textInput.substr(0, maxLength))
                }
            },
            _isAndroid: function() {
                var realDevice = devices.real();
                var version = realDevice.version.join(".");
                return "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),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            caret = __webpack_require__( /*! ./utils.caret */ 297),
            domUtils = __webpack_require__( /*! ../../core/utils/dom */ 12),
            focused = __webpack_require__( /*! ../widget/selectors */ 58).focused,
            isDefined = __webpack_require__( /*! ../../core/utils/type */ 1).isDefined,
            stringUtils = __webpack_require__( /*! ../../core/utils/string */ 40),
            inArray = __webpack_require__( /*! ../../core/utils/array */ 11).inArray,
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14),
            TextEditorBase = __webpack_require__( /*! ./ui.text_editor.base */ 474),
            MaskRules = __webpack_require__( /*! ./ui.text_editor.mask.rule */ 475),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9);
        var stubCaret = function() {
            return {}
        };
        var EMPTY_CHAR = " ";
        var EMPTY_CHAR_CODE = 32;
        var ESCAPED_CHAR = "\\";
        var TEXTEDITOR_MASKED_CLASS = "dx-texteditor-masked";
        var MASK_EVENT_NAMESPACE = "dxMask";
        var FORWARD_DIRECTION = "forward";
        var BACKWARD_DIRECTION = "backward";
        var BLUR_EVENT = "blur beforedeactivate";
        var BACKSPACE_INPUT_TYPE = "deleteContentBackward";
        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)
            }
        };
        var isNumericChar = function(char) {
            return /[0-9]/.test(char)
        };
        var isLiteralChar = function(char) {
            var code = char.charCodeAt();
            return 64 < code && code < 91 || 96 < code && code < 123 || code > 127
        };
        var isSpaceChar = function(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._maskBackspaceHandler,
                    del: that._maskDelHandler,
                    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
            },
            _initMarkup: function() {
                this._renderHiddenElement();
                this.callBase()
            },
            _render: function() {
                this.callBase();
                this._renderMask()
            },
            _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._detachMaskEventHandlers();
                if (!this.option("mask")) {
                    return
                }
                this.$element().addClass(TEXTEDITOR_MASKED_CLASS);
                this._attachMaskEventHandlers();
                this._parseMask();
                this._renderMaskedValue();
                this._changedValue = this._input().val()
            },
            _attachMaskEventHandlers: function() {
                var $input = this._input();
                eventsEngine.on($input, eventUtils.addNamespace("focusin", MASK_EVENT_NAMESPACE), this._maskFocusHandler.bind(this));
                eventsEngine.on($input, eventUtils.addNamespace("focusout", MASK_EVENT_NAMESPACE), this._maskBlurHandler.bind(this));
                eventsEngine.on($input, eventUtils.addNamespace("keydown", MASK_EVENT_NAMESPACE), this._maskKeyDownHandler.bind(this));
                eventsEngine.on($input, eventUtils.addNamespace("keypress", MASK_EVENT_NAMESPACE), this._maskKeyPressHandler.bind(this));
                eventsEngine.on($input, eventUtils.addNamespace("input", MASK_EVENT_NAMESPACE), this._maskInputHandler.bind(this));
                eventsEngine.on($input, eventUtils.addNamespace("paste", MASK_EVENT_NAMESPACE), this._maskPasteHandler.bind(this));
                eventsEngine.on($input, eventUtils.addNamespace("cut", MASK_EVENT_NAMESPACE), this._maskCutHandler.bind(this));
                eventsEngine.on($input, eventUtils.addNamespace("drop", MASK_EVENT_NAMESPACE), this._maskDragHandler.bind(this));
                this._attachChangeEventHandlers()
            },
            _detachMaskEventHandlers: function() {
                eventsEngine.off(this._input(), "." + MASK_EVENT_NAMESPACE)
            },
            _attachChangeEventHandlers: function() {
                if (inArray("change", this.option("valueChangeEvent").split(" ")) === -1) {
                    return
                }
                eventsEngine.on(this._input(), eventUtils.addNamespace(BLUR_EVENT, MASK_EVENT_NAMESPACE), function(e) {
                    this._suppressCaretChanging(this._changeHandler, [e]);
                    this._changeHandler(e)
                }.bind(this))
            },
            _suppressCaretChanging: function(callback, args) {
                var originalCaret = caret;
                caret = stubCaret;
                try {
                    callback.apply(this, args)
                } finally {
                    caret = originalCaret
                }
            },
            _changeHandler: function(e) {
                var $input = this._input(),
                    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),
                    textAfter = text.slice(selection.end),
                    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(),
                            hiddenElementValue = this._isMaskedValueMode() ? text : value;
                        this._$hiddenElement.val(!stringUtils.isEmpty(value) ? hiddenElementValue : "")
                    }
                }
                this.callBase()
            },
            _valueChangeEventHandler: function(e) {
                if (!this._maskRulesChain) {
                    this.callBase.apply(this, arguments);
                    return
                }
                this._saveValueChangeEvent(e);
                this.option("value", this._convertToValue().replace(/\s+$/, ""))
            },
            _maskFocusHandler: function() {
                this._showMaskPlaceholder();
                this._direction(FORWARD_DIRECTION);
                if (!this._isValueEmpty() && this.option("isValid")) {
                    this._adjustCaret()
                } else {
                    var caret = this._maskRulesChain.first();
                    this._caretTimeout = setTimeout(function() {
                        this._caret({
                            start: caret,
                            end: caret
                        })
                    }.bind(this), 0)
                }
            },
            _maskBlurHandler: function() {
                if ("onFocus" === this.option("showMaskMode") && this._isValueEmpty()) {
                    this.option("text", "");
                    this._renderDisplayText("")
                }
            },
            _maskKeyDownHandler: function() {
                this._keyPressHandled = false
            },
            _maskKeyPressHandler: function(e) {
                if (this._keyPressHandled) {
                    return
                }
                this._keyPressHandled = true;
                if (this._isControlKeyFired(e)) {
                    return
                }
                this._maskKeyHandler(e, function() {
                    this._handleKey(e.which);
                    return true
                })
            },
            _maskInputHandler: function(e) {
                if (this._backspaceInputHandled(e.originalEvent && e.originalEvent.inputType)) {
                    this._handleBackspaceInput(e)
                }
                if (this._keyPressHandled) {
                    return
                }
                this._keyPressHandled = true;
                var inputValue = this._input().val();
                var caret = this._caret();
                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];
                this._input().val(oldValue);
                this._inputHandlerTimer = setTimeout(function() {
                    this._caret({
                        start: caret.start,
                        end: caret.start
                    });
                    this._maskKeyHandler(e, function() {
                        this._handleKey(char.charCodeAt());
                        return true
                    })
                }.bind(this))
            },
            _backspaceInputHandled: function(inputType) {
                return inputType === BACKSPACE_INPUT_TYPE && !this._keyPressHandled
            },
            _handleBackspaceInput: function(e) {
                var caret = this._caret();
                this._caret({
                    start: caret.start + 1,
                    end: caret.end + 1
                });
                this._maskBackspaceHandler(e)
            },
            _isControlKeyFired: function(e) {
                return this._isControlKey(e.key) || e.ctrlKey || e.metaKey
            },
            _maskBackspaceHandler: function(e) {
                var that = this;
                that._keyPressHandled = true;
                var afterBackspaceHandler = function(needAdjustCaret, callBack) {
                    if (needAdjustCaret) {
                        that._direction(FORWARD_DIRECTION);
                        that._adjustCaret()
                    }
                    var currentCaret = that._caret();
                    clearTimeout(that._backspaceHandlerTimeout);
                    that._backspaceHandlerTimeout = setTimeout(function() {
                        callBack(currentCaret)
                    })
                };
                that._maskKeyHandler(e, function() {
                    if (that._hasSelection()) {
                        afterBackspaceHandler(true, function(currentCaret) {
                            that._displayMask(currentCaret);
                            that._maskRulesChain.reset()
                        });
                        return
                    }
                    if (that._tryMoveCaretBackward()) {
                        afterBackspaceHandler(false, function(currentCaret) {
                            that._caret(currentCaret)
                        });
                        return
                    }
                    that._handleKey(EMPTY_CHAR_CODE, BACKWARD_DIRECTION);
                    afterBackspaceHandler(true, function(currentCaret) {
                        that._displayMask(currentCaret);
                        that._maskRulesChain.reset()
                    })
                })
            },
            _maskDelHandler: function(e) {
                this._keyPressHandled = true;
                this._maskKeyHandler(e, function() {
                    !this._hasSelection() && this._handleKey(EMPTY_CHAR_CODE);
                    return true
                })
            },
            _maskPasteHandler: function(e) {
                this._keyPressHandled = true;
                var caret = this._caret();
                this._maskKeyHandler(e, function() {
                    var pastingText = domUtils.clipboardText(e);
                    var restText = this._maskRulesChain.text().substring(caret.end);
                    var accepted = this._handleChain({
                        text: pastingText,
                        start: caret.start,
                        length: pastingText.length
                    });
                    var newCaret = caret.start + accepted;
                    this._handleChain({
                        text: restText,
                        start: newCaret,
                        length: restText.length
                    });
                    this._caret({
                        start: newCaret,
                        end: newCaret
                    });
                    return true
                })
            },
            _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
            },
            _maskCutHandler: function(e) {
                var caret = this._caret();
                var selectedText = this._input().val().substring(caret.start, caret.end);
                this._maskKeyHandler(e, function() {
                    domUtils.clipboardText(e, selectedText);
                    return true
                })
            },
            _maskDragHandler: function() {
                this._clearDragTimer();
                this._dragTimer = setTimeout(function() {
                    this.option("value", this._convertToValue(this._input().val()))
                }.bind(this))
            },
            _convertToValue: function(text) {
                if (this._isMaskedValueMode()) {
                    text = (text || this._textValue || "").replace(new RegExp(this.option("maskChar"), "g"), EMPTY_CHAR)
                } else {
                    text = text || this._value || ""
                }
                return text
            },
            _maskKeyHandler: function(e, tryHandleKeyCallback) {
                if (this.option("readOnly")) {
                    return
                }
                this._direction(FORWARD_DIRECTION);
                e.preventDefault();
                this._handleSelection();
                if (!tryHandleKeyCallback.call(this)) {
                    return
                }
                this._direction(FORWARD_DIRECTION);
                this._adjustCaret();
                this._displayMask();
                this._maskRulesChain.reset()
            },
            _handleKey: function(keyCode, direction) {
                var char = String.fromCharCode(keyCode);
                this._direction(direction || FORWARD_DIRECTION);
                this._adjustCaret(char);
                this._handleKeyChain(char);
                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._direction(BACKWARD_DIRECTION);
                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) {
                if (!arguments.length) {
                    return caret(this._input())
                }
                caret(this._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
            },
            _isForwardDirection: function() {
                return this._direction() === FORWARD_DIRECTION
            },
            _clearDragTimer: function() {
                clearTimeout(this._dragTimer)
            },
            _clean: function() {
                this._clearDragTimer();
                this.callBase()
            },
            _validateMask: function() {
                if (!this._maskRulesChain) {
                    return
                }
                var isValid = this._maskRulesChain.isValid(this._normalizeChainArguments());
                this.option({
                    isValid: isValid,
                    validationError: isValid ? null : {
                        editorSpecific: true,
                        message: this.option("maskInvalidMessage")
                    }
                })
            },
            _dispose: function() {
                clearTimeout(this._inputHandlerTimer);
                clearTimeout(this._backspaceHandlerTimeout);
                clearTimeout(this._caretTimeout);
                this.callBase()
            },
            _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);
                        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.base.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            domUtils = __webpack_require__( /*! ../../core/utils/dom */ 12),
            focused = __webpack_require__( /*! ../widget/selectors */ 58).focused,
            isDefined = __webpack_require__( /*! ../../core/utils/type */ 1).isDefined,
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            inArray = __webpack_require__( /*! ../../core/utils/array */ 11).inArray,
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            themes = __webpack_require__( /*! ../themes */ 20),
            Editor = __webpack_require__( /*! ../editor/editor */ 45),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            pointerEvents = __webpack_require__( /*! ../../events/pointer */ 27),
            clickEvent = __webpack_require__( /*! ../../events/click */ 17),
            config = __webpack_require__( /*! ../../core/config */ 25);
        var TEXTEDITOR_CLASS = "dx-texteditor",
            TEXTEDITOR_INPUT_CLASS = "dx-texteditor-input",
            TEXTEDITOR_INPUT_SELECTOR = "." + TEXTEDITOR_INPUT_CLASS,
            TEXTEDITOR_CONTAINER_CLASS = "dx-texteditor-container",
            TEXTEDITOR_BUTTONS_CONTAINER_CLASS = "dx-texteditor-buttons-container",
            TEXTEDITOR_PLACEHOLDER_CLASS = "dx-placeholder",
            TEXTEDITOR_SHOW_CLEAR_BUTTON_CLASS = "dx-show-clear-button",
            TEXTEDITOR_ICON_CLASS = "dx-icon",
            TEXTEDITOR_CLEAR_ICON_CLASS = "dx-icon-clear",
            TEXTEDITOR_CLEAR_BUTTON_CLASS = "dx-clear-button-area",
            TEXTEDITOR_EMPTY_INPUT_CLASS = "dx-texteditor-empty",
            TEXTEDITOR_STYLING_MODE_PREFIX = "dx-editor-",
            ALLOWED_STYLE_CLASSES = [TEXTEDITOR_STYLING_MODE_PREFIX + "outlined", TEXTEDITOR_STYLING_MODE_PREFIX + "filled", TEXTEDITOR_STYLING_MODE_PREFIX + "underlined"],
            STATE_INVISIBLE_CLASS = "dx-state-invisible";
        var EVENTS_LIST = ["KeyDown", "KeyPress", "KeyUp", "Change", "Cut", "Copy", "Paste", "Input"];
        var CONTROL_KEYS = ["Tab", "Enter", "Shift", "Control", "Alt", "Escape", "PageUp", "PageDown", "End", "Home", "ArrowLeft", "ArrowUp", "ArrowRight", "ArrowDown", "Esc", "Left", "Up", "Right", "Down"];
        var TextEditorBase = Editor.inherit({
            _supportedKeys: function() {
                var stop = function(e) {
                    e.stopPropagation()
                };
                return {
                    space: stop,
                    enter: stop,
                    leftArrow: stop,
                    rightArrow: stop
                }
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    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,
                    valueFormat: function(value) {
                        return isDefined(value) && false !== value ? value : ""
                    },
                    stylingMode: config().editorStylingMode || "outlined"
                })
            },
            _defaultOptionsRules: function() {
                var themeName = themes.current();
                return this.callBase().concat([{
                    device: function() {
                        return themes.isAndroid5(themeName)
                    },
                    options: {
                        validationMessageOffset: {
                            v: -8
                        }
                    }
                }, {
                    device: function() {
                        return themes.isMaterial(themeName)
                    },
                    options: {
                        stylingMode: config().editorStylingMode || "underlined"
                    }
                }])
            },
            _input: function() {
                return this.$element().find(TEXTEDITOR_INPUT_SELECTOR).first()
            },
            _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";
                ALLOWED_STYLE_CLASSES.forEach(function(className) {
                    return _this.$element().removeClass(className)
                });
                var stylingModeClass = TEXTEDITOR_STYLING_MODE_PREFIX + this.option(optionName);
                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)
            },
            _initMarkup: function() {
                this.$element().addClass(TEXTEDITOR_CLASS);
                this._renderStylingMode();
                this._renderInput();
                this._renderInputType();
                this._renderPlaceholderMarkup();
                this._renderProps();
                this.callBase();
                this._renderValue()
            },
            _render: function() {
                this._renderPlaceholder();
                this._refreshValueChangeEvent();
                this._renderEvents();
                this._renderEnterKeyAction();
                this._renderEmptinessEvent();
                this.callBase()
            },
            _renderInput: function() {
                $("<div>").addClass(TEXTEDITOR_CONTAINER_CLASS).append(this._createInput()).append($("<div>").addClass(TEXTEDITOR_BUTTONS_CONTAINER_CLASS)).appendTo(this.$element())
            },
            _createInput: function() {
                var $input = $("<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" : "")
            },
            _renderValue: function() {
                this._renderInputValue();
                this._renderInputAddons()
            },
            _renderInputValue: function(value) {
                value = value || this.option("value");
                var text = this.option("text"),
                    displayValue = this.option("displayValue"),
                    valueFormat = this.option("valueFormat");
                if (void 0 !== displayValue && null !== value) {
                    text = valueFormat(displayValue)
                } else {
                    if (!isDefined(text)) {
                        text = valueFormat(value)
                    }
                }
                this.option("text", text);
                if (this._input().val() !== (isDefined(text) ? text : "")) {
                    this._renderDisplayText(text)
                } else {
                    this._toggleEmptinessEventHandler()
                }
            },
            _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(),
                    disabled = this.option("disabled"),
                    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(),
                    placeholderText = this.option("placeholder"),
                    $placeholder = this._$placeholder = $("<div>").attr("data-dx_placeholder", placeholderText);
                $placeholder.insertAfter($input);
                $placeholder.addClass(TEXTEDITOR_PLACEHOLDER_CLASS)
            },
            _attachPlaceholderEvents: function() {
                var that = this,
                    startEvent = eventUtils.addNamespace(pointerEvents.up, that.NAME);
                eventsEngine.on(that._$placeholder, startEvent, function() {
                    eventsEngine.trigger(that._input(), "focus")
                });
                that._toggleEmptinessEventHandler()
            },
            _placeholder: function() {
                return this._$placeholder || $()
            },
            _renderInputAddons: function() {
                this._renderClearButton()
            },
            _renderClearButton: function() {
                var clearButtonVisibility = this._clearButtonVisibility();
                this.$element().toggleClass(TEXTEDITOR_SHOW_CLEAR_BUTTON_CLASS, clearButtonVisibility);
                if (clearButtonVisibility) {
                    if (!this._$clearButton || this._$clearButton && !this._$clearButton.closest(this.$element()).length) {
                        this._$clearButton = this._createClearButton()
                    }
                    this._$clearButton.prependTo(this._buttonsContainer())
                }
                if (this._$clearButton) {
                    this._$clearButton.toggleClass(STATE_INVISIBLE_CLASS, !clearButtonVisibility)
                }
            },
            _clearButtonVisibility: function() {
                return this.option("showClearButton") && !this.option("readOnly")
            },
            _createClearButton: function() {
                var $clearButton = $("<span>").addClass(TEXTEDITOR_CLEAR_BUTTON_CLASS).append($("<span>").addClass(TEXTEDITOR_ICON_CLASS).addClass(TEXTEDITOR_CLEAR_ICON_CLASS));
                eventsEngine.on($clearButton, eventUtils.addNamespace(pointerEvents.down, this.NAME), function(e) {
                    if ("mouse" === e.pointerType) {
                        e.preventDefault()
                    }
                });
                eventsEngine.on($clearButton, eventUtils.addNamespace(clickEvent.name, this.NAME), this._clearValueHandler.bind(this));
                return $clearButton
            },
            _clearValueHandler: function(e) {
                var $input = this._input();
                e.stopPropagation();
                this._saveValueChangeEvent(e);
                this.reset();
                !focused($input) && eventsEngine.trigger($input, "focus");
                eventsEngine.trigger($input, "input")
            },
            _renderEvents: function() {
                var that = this,
                    $input = that._input();
                each(EVENTS_LIST, function(_, event) {
                    if (that.hasActionSubscription("on" + event)) {
                        var action = that._createActionByOption("on" + event, {
                            excludeValidators: ["readOnly"]
                        });
                        eventsEngine.on($input, eventUtils.addNamespace(event.toLowerCase(), that.NAME), function(e) {
                            if (that._disposed) {
                                return
                            }
                            action({
                                event: e
                            })
                        })
                    }
                })
            },
            _refreshEvents: function() {
                var that = this,
                    $input = this._input();
                each(EVENTS_LIST, function(_, event) {
                    eventsEngine.off($input, eventUtils.addNamespace(event.toLowerCase(), that.NAME))
                });
                this._renderEvents()
            },
            _keyPressHandler: function() {
                this.option("text", this._input().val())
            },
            _renderValueChangeEvent: function() {
                var keyPressEvent = eventUtils.addNamespace(this._renderValueEventName(), this.NAME + "TextChange"),
                    valueChangeEvent = eventUtils.addNamespace(this.option("valueChangeEvent"), this.NAME + "ValueChange");
                eventsEngine.on(this._input(), keyPressEvent, this._keyPressHandler.bind(this));
                eventsEngine.on(this._input(), valueChangeEvent, this._valueChangeEventHandler.bind(this))
            },
            _cleanValueChangeEvent: function() {
                var eventNamespace = this.NAME + "ValueChange",
                    keyPressEvent = eventUtils.addNamespace(this._renderValueEventName(), this.NAME + "TextChange");
                eventsEngine.off(this._input(), "." + eventNamespace);
                eventsEngine.off(this._input(), keyPressEvent)
            },
            _refreshValueChangeEvent: function() {
                this._cleanValueChangeEvent();
                this._renderValueChangeEvent()
            },
            _renderValueEventName: function() {
                return "input change keypress"
            },
            _focusTarget: function() {
                return this._input()
            },
            _focusClassTarget: function() {
                return this.$element()
            },
            _toggleFocusClass: function(isFocused, $element) {
                this.callBase(isFocused, this._focusClassTarget($element))
            },
            _hasFocusClass: function(element) {
                return this.callBase($(element || this.$element()))
            },
            _renderEmptinessEvent: function() {
                var $input = this._input();
                eventsEngine.on($input, "input blur", this._toggleEmptinessEventHandler.bind(this))
            },
            _toggleEmptinessEventHandler: function() {
                var text = this._input().val(),
                    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"]
                });
                eventsEngine.off(this._input(), "keyup.onEnterKey.dxTextEditor");
                eventsEngine.on(this._input(), "keyup.onEnterKey.dxTextEditor", this._enterKeyHandlerUp.bind(this))
            },
            _enterKeyHandlerUp: function(e) {
                if (this._disposed) {
                    return
                }
                if (13 === e.which) {
                    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 (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 "readOnly":
                        this.callBase(args);
                        this._renderInputAddons();
                        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 "showClearButton":
                        this._renderInputAddons();
                        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();
                    case "valueFormat":
                        this._invalidate();
                        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")
                }
            },
            focus: function() {
                eventsEngine.trigger(this._input(), "focus")
            },
            blur: function() {
                if (this._input().is(domAdapter.getActiveElement())) {
                    domUtils.resetActiveElement()
                }
            },
            reset: function() {
                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),
                    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.mask.rule.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Class = __webpack_require__( /*! ../../core/class */ 10),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            inArray = __webpack_require__( /*! ../../core/utils/array */ 11).inArray,
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            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 = args.hasOwnProperty("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 = args.hasOwnProperty("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 = args.hasOwnProperty("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/list/ui.list.edit.search.js ***!
      \*************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var ListEdit = __webpack_require__( /*! ./ui.list.edit */ 477),
            searchBoxMixin = __webpack_require__( /*! ../widget/ui.search_box_mixin */ 265);
        var ListSearch = ListEdit.inherit(searchBoxMixin).inherit({
            _addWidgetPrefix: function(className) {
                return "dx-list-" + className
            },
            _getCombinedFilter: function() {
                var filter, storeLoadOptions, dataSource = this._dataSource;
                if (dataSource) {
                    storeLoadOptions = {
                        filter: dataSource.filter()
                    };
                    dataSource._addSearchFilter(storeLoadOptions);
                    filter = storeLoadOptions.filter
                }
                return filter
            },
            _initDataSource: function() {
                var value = this.option("searchValue"),
                    expr = this.option("searchExpr"),
                    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.js ***!
      \******************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            GroupedEditStrategy = __webpack_require__( /*! ./ui.list.edit.strategy.grouped */ 478),
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14),
            EditProvider = __webpack_require__( /*! ./ui.list.edit.provider */ 479),
            ListBase = __webpack_require__( /*! ./ui.list.base */ 174);
        var LIST_ITEM_SELECTED_CLASS = "dx-list-item-selected",
            LIST_ITEM_RESPONSE_WAIT_CLASS = "dx-list-item-response-wait";
        var ListEdit = ListBase.inherit({
            _supportedKeys: function() {
                var that = this,
                    parent = this.callBase();
                var deleteFocusedItem = function(e) {
                    if (that.option("allowItemDeleting")) {
                        e.preventDefault();
                        that.deleteItem(that.option("focusedElement"))
                    }
                };
                var moveFocusedItemUp = function(e) {
                    var focusedItemIndex = that._editStrategy.getNormalizedIndex(that.option("focusedElement"));
                    if (e.shiftKey && that.option("allowItemReordering")) {
                        e.preventDefault();
                        var $prevItem = that._editStrategy.getItemElement(focusedItemIndex - 1);
                        that.reorderItem(that.option("focusedElement"), $prevItem);
                        that.scrollToItem(that.option("focusedElement"))
                    } else {
                        if (0 === focusedItemIndex && this._editProvider.handleKeyboardEvents(focusedItemIndex, false)) {
                            return
                        } else {
                            this._editProvider.handleKeyboardEvents(focusedItemIndex, true)
                        }
                        parent.upArrow(e)
                    }
                };
                var moveFocusedItemDown = function(e) {
                    var focusedItemIndex = that._editStrategy.getNormalizedIndex(that.option("focusedElement"));
                    if (e.shiftKey && that.option("allowItemReordering")) {
                        e.preventDefault();
                        var $nextItem = that._editStrategy.getItemElement(focusedItemIndex + 1);
                        that.reorderItem(that.option("focusedElement"), $nextItem);
                        that.scrollToItem(that.option("focusedElement"))
                    } else {
                        if (focusedItemIndex === this._getLastItemIndex() && this._editProvider.handleKeyboardEvents(focusedItemIndex, false)) {
                            return
                        } else {
                            this._editProvider.handleKeyboardEvents(focusedItemIndex, true)
                        }
                        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 extend({}, parent, {
                    del: deleteFocusedItem,
                    upArrow: moveFocusedItemUp,
                    downArrow: moveFocusedItemDown,
                    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)
                }
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    showSelectionControls: false,
                    selectionMode: "none",
                    selectAllMode: "page",
                    onSelectAllValueChanged: null,
                    selectAllText: messageLocalization.format("dxList-selectAll"),
                    menuItems: [],
                    menuMode: "context",
                    allowItemDeleting: false,
                    itemDeleteMode: "static",
                    allowItemReordering: false
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function(_device) {
                        return "ios" === _device.platform
                    },
                    options: {
                        menuMode: "slide",
                        itemDeleteMode: "slideItem"
                    }
                }, {
                    device: {
                        platform: "android"
                    },
                    options: {
                        itemDeleteMode: "swipe"
                    }
                }, {
                    device: {
                        platform: "win"
                    },
                    options: {
                        itemDeleteMode: "context"
                    }
                }])
            },
            _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 EditProvider(this)
            },
            _disposeEditProvider: function() {
                if (this._editProvider) {
                    this._editProvider.dispose()
                }
            },
            _refreshEditProvider: function() {
                this._disposeEditProvider();
                this._initEditProvider()
            },
            _initEditStrategy: function() {
                if (this.option("grouped")) {
                    this._editStrategy = new GroupedEditStrategy(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 = $(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 = $(e.currentTarget);
                if ($itemElement.is(".dx-state-disabled, .dx-state-disabled *")) {
                    return
                }
                var isTouchEvent = eventUtils.isTouchEvent(e),
                    handledByEditProvider = isTouchEvent && this._editProvider.handleContextMenu($itemElement, e);
                if (handledByEditProvider) {
                    e.handledByEditProvider = true;
                    return
                }
                this.callBase.apply(this, arguments)
            },
            _itemContextMenuHandler: function(e) {
                var $itemElement = $(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 "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 $()
                }
                return $itemElements.eq(flatIndex)
            },
            getItemByIndex: function(index) {
                return this._editStrategy.getItemDataByIndex(index)
            }
        });
        module.exports = ListEdit
    },
    /*!***********************************************************************!*\
      !*** ./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),
            isNumeric = __webpack_require__( /*! ../../core/utils/type */ 1).isNumeric,
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            queryByOptions = __webpack_require__( /*! ../../data/store_helper */ 83).queryByOptions,
            query = __webpack_require__( /*! ../../data/query */ 43),
            EditStrategy = __webpack_require__( /*! ../collection/ui.collection_widget.edit.strategy.plain */ 191);
        var LIST_ITEM_CLASS = "dx-list-item",
            LIST_GROUP_CLASS = "dx-list-group";
        var SELECTION_SHIFT = 20,
            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"),
                    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 = [],
                    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),
                    itemGroup = this._collectionWidget.option("items")[indices.group].items;
                itemGroup.splice(indices.item, 1)
            },
            getKeysByItems: function(items) {
                var plainItems = [];
                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])
                    }
                }
                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"),
                    index = -1,
                    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(),
                    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"),
                    movingIndices = splitIndex(movingIndex),
                    destinationIndices = splitIndex(destinationIndex),
                    movingItemGroup = items[movingIndices.group].items,
                    destinationItemGroup = items[destinationIndices.group].items,
                    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),
                    $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),
                    $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),
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            Class = __webpack_require__( /*! ../../core/class */ 10),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            errors = __webpack_require__( /*! ../widget/ui.errors */ 18),
            decoratorRegistry = __webpack_require__( /*! ./ui.list.edit.decorator_registry */ 97);
        __webpack_require__( /*! ./ui.list.edit.decorator.static */ 480);
        __webpack_require__( /*! ./ui.list.edit.decorator.switchable.button */ 481);
        __webpack_require__( /*! ./ui.list.edit.decorator.switchable.slide */ 482);
        __webpack_require__( /*! ./ui.list.edit.decorator.swipe */ 483);
        __webpack_require__( /*! ./ui.list.edit.decorator.context */ 484);
        __webpack_require__( /*! ./ui.list.edit.decorator.selection */ 492);
        __webpack_require__( /*! ./ui.list.edit.decorator.reorder */ 494);
        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("allowItemReordering")
        }, function() {
            return "reorder"
        }, function() {
            return "default"
        });
        var LIST_ITEM_BEFORE_BAG_CLASS = "dx-list-item-before-bag",
            LIST_ITEM_AFTER_BAG_CLASS = "dx-list-item-after-bag",
            DECORATOR_BEFORE_BAG_CREATE_METHOD = "beforeBag",
            DECORATOR_AFTER_BAG_CREATE_METHOD = "afterBag",
            DECORATOR_MODIFY_ELEMENT_METHOD = "modifyElement",
            DECORATOR_AFTER_RENDER_METHOD = "afterRender",
            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),
                            decoratorSubType = option.decoratorSubType.call(this._list),
                            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,
                    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,
                    decorators = this._decorators,
                    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(itemIndex, focusOnList) {
                return this._eventHandler("handleKeyboardEvents", itemIndex, focusOnList)
            },
            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),
            Button = __webpack_require__( /*! ../button */ 36),
            registerDecorator = __webpack_require__( /*! ./ui.list.edit.decorator_registry */ 97).register,
            EditDecorator = __webpack_require__( /*! ./ui.list.edit.decorator */ 130);
        var STATIC_DELETE_BUTTON_CONTAINER_CLASS = "dx-list-static-delete-button-container",
            STATIC_DELETE_BUTTON_CLASS = "dx-list-static-delete-button";
        registerDecorator("delete", "static", EditDecorator.inherit({
            afterBag: function(config) {
                var $itemElement = config.$itemElement,
                    $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),
            fx = __webpack_require__( /*! ../../animation/fx */ 31),
            Button = __webpack_require__( /*! ../button */ 36),
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14),
            registerDecorator = __webpack_require__( /*! ./ui.list.edit.decorator_registry */ 97).register,
            SwitchableEditDecorator = __webpack_require__( /*! ./ui.list.edit.decorator.switchable */ 298);
        var SWITCHABLE_DELETE_BUTTON_CONTAINER_CLASS = "dx-list-switchable-delete-button-container",
            SWITCHABLE_DELETE_BUTTON_WRAPPER_CLASS = "dx-list-switchable-delete-button-wrapper",
            SWITCHABLE_DELETE_BUTTON_INNER_WRAPPER_CLASS = "dx-list-switchable-delete-button-inner-wrapper",
            SWITCHABLE_DELETE_BUTTON_CLASS = "dx-list-switchable-delete-button",
            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),
                    $buttonWrapper = $("<div>").addClass(SWITCHABLE_DELETE_BUTTON_WRAPPER_CLASS),
                    $buttonInnerWrapper = $("<div>").addClass(SWITCHABLE_DELETE_BUTTON_INNER_WRAPPER_CLASS),
                    $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(),
                    listWidth = this._list.$element().width(),
                    buttonWidth = this._buttonWidth(),
                    fromValue = rtl ? listWidth : -buttonWidth,
                    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(),
                    listWidth = this._list.$element().width(),
                    buttonWidth = this._buttonWidth(),
                    fromValue = rtl ? listWidth - buttonWidth : 0,
                    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",
            TOGGLE_DELETE_SWITCH_CLASS = "dx-list-toggle-delete-switch";
        registerDecorator("delete", "toggle", SwitchableButtonEditDecorator.inherit({
            beforeBag: function(config) {
                var $itemElement = config.$itemElement,
                    $container = config.$container;
                var $toggle = $("<div>").addClass(TOGGLE_DELETE_SWITCH_CLASS);
                this._list._createComponent($toggle, Button, {
                    icon: "toggle-delete",
                    onClick: function(e) {
                        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) {
                    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),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            clickEvent = __webpack_require__( /*! ../../events/click */ 17),
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14),
            translator = __webpack_require__( /*! ../../animation/translator */ 24),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            feedbackEvents = __webpack_require__( /*! ../../events/core/emitter.feedback */ 103),
            EditDecoratorMenuHelperMixin = __webpack_require__( /*! ./ui.list.edit.decorator_menu_helper */ 299),
            registerDecorator = __webpack_require__( /*! ./ui.list.edit.decorator_registry */ 97).register,
            SwitchableEditDecorator = __webpack_require__( /*! ./ui.list.edit.decorator.switchable */ 298),
            fx = __webpack_require__( /*! ../../animation/fx */ 31),
            themes = __webpack_require__( /*! ../themes */ 20),
            ActionSheet = __webpack_require__( /*! ../action_sheet */ 212);
        var LIST_EDIT_DECORATOR = "dxListEditDecorator",
            CLICK_EVENT_NAME = eventUtils.addNamespace(clickEvent.name, LIST_EDIT_DECORATOR),
            ACTIVE_EVENT_NAME = eventUtils.addNamespace(feedbackEvents.active, LIST_EDIT_DECORATOR),
            SLIDE_MENU_CLASS = "dx-list-slide-menu",
            SLIDE_MENU_WRAPPER_CLASS = "dx-list-slide-menu-wrapper",
            SLIDE_MENU_CONTENT_CLASS = "dx-list-slide-menu-content",
            SLIDE_MENU_BUTTONS_CONTAINER_CLASS = "dx-list-slide-menu-buttons-container",
            SLIDE_MENU_BUTTONS_CLASS = "dx-list-slide-menu-buttons",
            SLIDE_MENU_BUTTON_CLASS = "dx-list-slide-menu-button",
            SLIDE_MENU_BUTTON_MENU_CLASS = "dx-list-slide-menu-button-menu",
            SLIDE_MENU_BUTTON_DELETE_CLASS = "dx-list-slide-menu-button-delete",
            SLIDE_MENU_ANIMATION_DURATION = 400,
            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)
            },
            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(),
                    signCorrection = rtl ? -1 : 1,
                    isItemReadyToDelete = this._isReadyToDelete($itemElement),
                    moveJustStarted = this._getCurrentPositions().content === this._getStartPositions().content;
                if (moveJustStarted && !isItemReadyToDelete && args.offset * signCorrection > 0) {
                    args.cancel = true;
                    return
                }
                var offset = this._cachedItemWidth * args.offset,
                    startOffset = isItemReadyToDelete ? -this._cachedButtonWidth * signCorrection : 0,
                    correctedOffset = (offset + startOffset) * signCorrection,
                    percent = correctedOffset < 0 ? Math.abs((offset + startOffset) / this._cachedButtonWidth) : 0;
                this._setPositions(this._getPositions(percent));
                return true
            },
            _getStartPositions: function() {
                var rtl = this._isRtlEnabled(),
                    signCorrection = rtl ? -1 : 1;
                return {
                    content: 0,
                    buttonsContainer: rtl ? -this._cachedButtonWidth : this._cachedItemWidth,
                    buttons: -this._cachedButtonWidth * signCorrection
                }
            },
            _getPositions: function(percent) {
                var rtl = this._isRtlEnabled(),
                    signCorrection = rtl ? -1 : 1,
                    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,
                    offset = this._cachedItemWidth * args.offset,
                    endedAtReadyToDelete = !this._isReadyToDelete($itemElement) && offset * signCorrection > .2 * this._cachedButtonWidth,
                    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,
                    currentPosition = this._getCurrentPositions(),
                    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 */ 24),
            fx = __webpack_require__( /*! ../../animation/fx */ 31),
            registerDecorator = __webpack_require__( /*! ./ui.list.edit.decorator_registry */ 97).register,
            EditDecorator = __webpack_require__( /*! ./ui.list.edit.decorator */ 130),
            Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7).Deferred;
        registerDecorator("delete", "swipe", EditDecorator.inherit({
            _shouldHandleSwipe: true,
            _renderItemPosition: function($itemElement, offset, animate) {
                var deferred = new Deferred,
                    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),
            EditDecoratorMenuHelperMixin = __webpack_require__( /*! ./ui.list.edit.decorator_menu_helper */ 299),
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14),
            registerDecorator = __webpack_require__( /*! ./ui.list.edit.decorator_registry */ 97).register,
            EditDecorator = __webpack_require__( /*! ./ui.list.edit.decorator */ 130),
            Overlay = __webpack_require__( /*! ../overlay */ 64),
            ListBase = __webpack_require__( /*! ./ui.list.base */ 174);
        var CONTEXTMENU_CLASS = "dx-list-context-menu",
            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),
            CollectionWidgetItem = __webpack_require__( /*! ../collection/item */ 154);
        var LIST_ITEM_BADGE_CONTAINER_CLASS = "dx-list-item-badge-container",
            LIST_ITEM_BADGE_CLASS = "dx-list-item-badge",
            BADGE_CLASS = "dx-badge",
            LIST_ITEM_CHEVRON_CONTAINER_CLASS = "dx-list-item-chevron-container",
            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),
                    $chevron = $("<div>").addClass(LIST_ITEM_CHEVRON_CLASS);
                $chevronContainer.append($chevron).appendTo(this._$element)
            }
        });
        module.exports = ListItem
    },
    /*!***************************************************************!*\
      !*** ./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),
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            windowUtils = __webpack_require__( /*! ../../core/utils/window */ 6),
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14),
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            getPublicElement = __webpack_require__( /*! ../../core/utils/dom */ 12).getPublicElement,
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            PullDownStrategy = __webpack_require__( /*! ./ui.scroll_view.native.pull_down */ 487),
            SwipeDownStrategy = __webpack_require__( /*! ./ui.scroll_view.native.swipe_down */ 488),
            SlideDownStrategy = __webpack_require__( /*! ./ui.scroll_view.native.slide_down */ 489),
            SimulatedStrategy = __webpack_require__( /*! ./ui.scroll_view.simulated */ 490),
            Scrollable = __webpack_require__( /*! ./ui.scrollable */ 96),
            LoadIndicator = __webpack_require__( /*! ../load_indicator */ 89),
            config = __webpack_require__( /*! ../../core/config */ 25),
            themes = __webpack_require__( /*! ./../themes */ 20),
            LoadPanel = __webpack_require__( /*! ../load_panel */ 202);
        var SCROLLVIEW_CLASS = "dx-scrollview",
            SCROLLVIEW_CONTENT_CLASS = SCROLLVIEW_CLASS + "-content",
            SCROLLVIEW_TOP_POCKET_CLASS = SCROLLVIEW_CLASS + "-top-pocket",
            SCROLLVIEW_BOTTOM_POCKET_CLASS = SCROLLVIEW_CLASS + "-bottom-pocket",
            SCROLLVIEW_PULLDOWN_CLASS = SCROLLVIEW_CLASS + "-pull-down",
            SCROLLVIEW_REACHBOTTOM_CLASS = SCROLLVIEW_CLASS + "-scrollbottom",
            SCROLLVIEW_REACHBOTTOM_INDICATOR_CLASS = SCROLLVIEW_REACHBOTTOM_CLASS + "-indicator",
            SCROLLVIEW_REACHBOTTOM_TEXT_CLASS = SCROLLVIEW_REACHBOTTOM_CLASS + "-text",
            SCROLLVIEW_LOADPANEL = SCROLLVIEW_CLASS + "-loadpanel";
        var refreshStrategies = {
            pullDown: PullDownStrategy,
            swipeDown: SwipeDownStrategy,
            slideDown: SlideDownStrategy,
            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 "win" === devices.real().platform
                    },
                    options: {
                        refreshStrategy: "slideDown"
                    }
                }, {
                    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),
                    $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),
                    $reachBottom = this._$reachBottom = $("<div>").addClass(SCROLLVIEW_REACHBOTTOM_CLASS),
                    $loadContainer = $("<div>").addClass(SCROLLVIEW_REACHBOTTOM_INDICATOR_CLASS),
                    $loadIndicator = new LoadIndicator($("<div>")).$element(),
                    $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._refreshPocketState()
            },
            _refreshPocketState: function() {
                this._pullDownEnable(this.hasActionSubscription("onPullDown") && !config().designMode);
                this._reachBottomEnable(this.hasActionSubscription("onReachBottom") && !config().designMode)
            },
            on: function(eventName) {
                var result = this.callBase.apply(this, arguments);
                if ("pullDown" === eventName || "reachBottom" === eventName) {
                    this._refreshPocketState()
                }
                return result
            },
            _pullDownEnable: function(enabled) {
                if (0 === arguments.length) {
                    return this._pullDownEnabled
                }
                this._$pullDown.toggle(enabled);
                this._strategy.pullDownEnable(enabled);
                this._pullDownEnabled = enabled
            },
            _reachBottomEnable: function(enabled) {
                if (0 === arguments.length) {
                    return this._reachBottomEnabled
                }
                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.scroll_view.native.pull_down.js ***!
      \********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            Callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 21),
            translator = __webpack_require__( /*! ../../animation/translator */ 24),
            NativeStrategy = __webpack_require__( /*! ./ui.scrollable.native */ 175),
            LoadIndicator = __webpack_require__( /*! ../load_indicator */ 89),
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7).Deferred;
        var SCROLLVIEW_PULLDOWN_REFRESHING_CLASS = "dx-scrollview-pull-down-loading",
            SCROLLVIEW_PULLDOWN_READY_CLASS = "dx-scrollview-pull-down-ready",
            SCROLLVIEW_PULLDOWN_IMAGE_CLASS = "dx-scrollview-pull-down-image",
            SCROLLVIEW_PULLDOWN_INDICATOR_CLASS = "dx-scrollview-pull-down-indicator",
            SCROLLVIEW_PULLDOWN_TEXT_CLASS = "dx-scrollview-pull-down-text",
            SCROLLVIEW_PULLDOWN_VISIBLE_TEXT_CLASS = "dx-scrollview-pull-down-text-visible",
            STATE_RELEASED = 0,
            STATE_READY = 1,
            STATE_REFRESHING = 2,
            STATE_LOADING = 3,
            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),
                    $loadContainer = $("<div>").addClass(SCROLLVIEW_PULLDOWN_INDICATOR_CLASS),
                    $loadIndicator = new LoadIndicator($("<div>")).$element(),
                    $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,
                    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();
                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,
                    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
            },
            _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),
            Callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 21),
            translator = __webpack_require__( /*! ../../animation/translator */ 24),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            NativeStrategy = __webpack_require__( /*! ./ui.scrollable.native */ 175),
            LoadIndicator = __webpack_require__( /*! ../load_indicator */ 89),
            Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7).Deferred;
        var SCROLLVIEW_PULLDOWN_DOWN_LOADING_CLASS = "dx-scrollview-pull-down-loading",
            SCROLLVIEW_PULLDOWN_INDICATOR_CLASS = "dx-scrollview-pull-down-indicator",
            SCROLLVIEW_PULLDOWN_REFRESHING_CLASS = "dx-scrollview-pull-down-refreshing",
            PULLDOWN_ICON_CLASS = "dx-icon-pulldown",
            STATE_RELEASED = 0,
            STATE_READY = 1,
            STATE_REFRESHING = 2,
            STATE_TOUCHED = 4,
            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),
                    $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(),
                    top = Math.min(3 * pullDownHeight, this._deltaY + this._getPullDownStartPosition()),
                    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,
                    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.native.slide_down.js ***!
      \*********************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var Callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 21),
            NativeStrategy = __webpack_require__( /*! ./ui.scrollable.native */ 175),
            Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7).Deferred;
        var STATE_RELEASED = 0,
            STATE_READY = 1,
            STATE_LOADING = 2,
            LOADING_HEIGHT = 80;
        var SlideDownNativeScrollViewStrategy = NativeStrategy.inherit({
            _init: function(scrollView) {
                this.callBase(scrollView);
                this._$topPocket = scrollView._$topPocket;
                this._$bottomPocket = scrollView._$bottomPocket;
                this._initCallbacks()
            },
            _initCallbacks: function() {
                this.pullDownCallbacks = Callbacks();
                this.releaseCallbacks = Callbacks();
                this.reachBottomCallbacks = Callbacks()
            },
            render: function() {
                this.callBase();
                this._renderPullDown();
                this._renderBottom();
                this._releaseState();
                this._updateDimensions()
            },
            _renderPullDown: function() {
                this._$topPocket.empty()
            },
            _renderBottom: function() {
                this._$bottomPocket.empty().append("<progress>")
            },
            _releaseState: function() {
                if (this._state === STATE_RELEASED) {
                    return
                }
                this._state = STATE_RELEASED
            },
            _updateDimensions: function() {
                this._scrollOffset = this._$container.prop("scrollHeight") - this._$container.prop("clientHeight");
                this._containerSize = {
                    height: this._$container.prop("clientHeight"),
                    width: this._$container.prop("clientWidth")
                };
                this._contentSize = this._componentContentSize = {
                    height: this._$container.prop("scrollHeight"),
                    width: this._$container.prop("scrollWidth")
                }
            },
            handleScroll: function(e) {
                this.callBase(e);
                if (this._isReachBottom(this._lastLocation.top)) {
                    this._reachBottom()
                }
            },
            _isReachBottom: function(location) {
                this._scrollContent = this._$container.prop("scrollHeight") - this._$container.prop("clientHeight");
                return this._reachBottomEnabled && location < -this._scrollContent + LOADING_HEIGHT
            },
            _reachBottom: function() {
                if (this._state === STATE_LOADING) {
                    return
                }
                this._state = STATE_LOADING;
                this.reachBottomCallbacks.fire()
            },
            pullDownEnable: function(enabled) {
                this._pullDownEnabled = enabled
            },
            reachBottomEnable: function(enabled) {
                this._reachBottomEnabled = enabled;
                this._$bottomPocket.toggle(enabled)
            },
            pendingRelease: function() {
                this._state = STATE_READY
            },
            release: function() {
                var deferred = new Deferred;
                this._state = STATE_RELEASED;
                this.releaseCallbacks.fire();
                this.update();
                return deferred.resolve().promise()
            }
        });
        module.exports = SlideDownNativeScrollViewStrategy
    },
    /*!*************************************************************************!*\
      !*** ./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),
            Callbacks = __webpack_require__( /*! ../../core/utils/callbacks */ 21),
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            math = Math,
            simulatedStrategy = __webpack_require__( /*! ./ui.scrollable.simulated */ 301),
            LoadIndicator = __webpack_require__( /*! ../load_indicator */ 89);
        var SCROLLVIEW_PULLDOWN_REFRESHING_CLASS = "dx-scrollview-pull-down-loading",
            SCROLLVIEW_PULLDOWN_READY_CLASS = "dx-scrollview-pull-down-ready",
            SCROLLVIEW_PULLDOWN_IMAGE_CLASS = "dx-scrollview-pull-down-image",
            SCROLLVIEW_PULLDOWN_INDICATOR_CLASS = "dx-scrollview-pull-down-indicator",
            SCROLLVIEW_PULLDOWN_TEXT_CLASS = "dx-scrollview-pull-down-text",
            SCROLLVIEW_PULLDOWN_VISIBLE_TEXT_CLASS = "dx-scrollview-pull-down-text-visible",
            STATE_RELEASED = 0,
            STATE_READY = 1,
            STATE_REFRESHING = 2,
            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,
                    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 ? this._$topPocket[this._dimension]() : 0;
                this._bottomPocketSize = considerPockets ? 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
            },
            _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),
                    $loadContainer = $("<div>").addClass(SCROLLVIEW_PULLDOWN_INDICATOR_CLASS),
                    $loadIndicator = new LoadIndicator($("<div>")).$element(),
                    $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/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),
            Class = __webpack_require__( /*! ../../core/class */ 10),
            abstract = Class.abstract,
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            GestureEmitter = __webpack_require__( /*! ../../events/gesture/emitter.gesture */ 156),
            registerEmitter = __webpack_require__( /*! ../../events/core/emitter_registrator */ 92),
            animationFrame = __webpack_require__( /*! ../../animation/frame */ 115),
            realDevice = __webpack_require__( /*! ../../core/devices */ 16).real(),
            compareVersions = __webpack_require__( /*! ../../core/utils/version */ 62).compare;
        var SCROLL_INIT_EVENT = "dxscrollinit",
            SCROLL_START_EVENT = "dxscrollstart",
            SCROLL_MOVE_EVENT = "dxscroll",
            SCROLL_END_EVENT = "dxscrollend",
            SCROLL_STOP_EVENT = "dxscrollstop",
            SCROLL_CANCEL_EVENT = "dxscrollcancel";
        var isWheelEvent = function(e) {
            return "dxmousewheel" === e.type
        };
        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 (!isWheelEvent(e)) {
                        this._lastWheelDirection = null;
                        return
                    }
                    var direction = e.shiftKey || false,
                        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,
                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,
                            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,
                VELOCITY_CALC_TIMEOUT = 200,
                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 (isWheelEvent(e)) {
                            this._accept(e)
                        }
                    }.bind(this));
                    this._pointerLocker.check(e, function() {
                        var skipCheck = this.isNative && eventUtils.isMouseEvent(e);
                        if (!isWheelEvent(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 (!isWheelEvent(e) && endEventDelta.time < INERTIA_TIMEOUT) {
                        var eventDelta = eventUtils.eventDelta(this._savedEventData, this._prevEventData),
                            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/list/ui.list.edit.decorator.selection.js ***!
      \**************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            clickEvent = __webpack_require__( /*! ../../events/click */ 17),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            errors = __webpack_require__( /*! ../widget/ui.errors */ 18),
            CheckBox = __webpack_require__( /*! ../check_box */ 126),
            RadioButton = __webpack_require__( /*! ../radio_group/radio_button */ 493),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            registerDecorator = __webpack_require__( /*! ./ui.list.edit.decorator_registry */ 97).register,
            EditDecorator = __webpack_require__( /*! ./ui.list.edit.decorator */ 130);
        var SELECT_DECORATOR_ENABLED_CLASS = "dx-list-select-decorator-enabled",
            SELECT_DECORATOR_SELECT_ALL_CLASS = "dx-list-select-all",
            SELECT_DECORATOR_SELECT_ALL_CHECKBOX_CLASS = "dx-list-select-all-checkbox",
            SELECT_DECORATOR_SELECT_ALL_LABEL_CLASS = "dx-list-select-all-label",
            SELECT_CHECKBOX_CONTAINER_CLASS = "dx-list-select-checkbox-container",
            SELECT_CHECKBOX_CLASS = "dx-list-select-checkbox",
            SELECT_RADIO_BUTTON_CONTAINER_CLASS = "dx-list-select-radiobutton-container",
            SELECT_RADIO_BUTTON_CLASS = "dx-list-select-radiobutton",
            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,
                    $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,
                    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(itemIndex, focusOnList) {
                if (this._$selectAll && this._needMoveFocus(itemIndex, focusOnList)) {
                    this._list.option("focusedElement", void 0);
                    this._selectAllCheckBox.$element().addClass(FOCUSED_STATE_CLASS);
                    return true
                } else {
                    this._$selectAll && this._selectAllCheckBox.$element().removeClass(FOCUSED_STATE_CLASS);
                    this._list.focusListItem(itemIndex);
                    return false
                }
            },
            _needMoveFocus: function(itemIndex, focusOnList) {
                return !focusOnList && (0 === itemIndex || itemIndex === this._list._getLastItemIndex())
            },
            handleEnterPressing: function() {
                if (this._$selectAll && this._selectAllCheckBox.$element().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);
                this._selectAllCheckBox = this._list._createComponent($("<div>").addClass(SELECT_DECORATOR_SELECT_ALL_CHECKBOX_CLASS).appendTo($selectAll), CheckBox);
                $("<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,
                    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),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            inkRipple = __webpack_require__( /*! ../widget/utils.ink_ripple */ 72),
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            Editor = __webpack_require__( /*! ../editor/editor */ 45),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            themes = __webpack_require__( /*! ../themes */ 20),
            clickEvent = __webpack_require__( /*! ../../events/click */ 17);
        var RADIO_BUTTON_CLASS = "dx-radiobutton",
            RADIO_BUTTON_ICON_CLASS = "dx-radiobutton-icon",
            RADIO_BUTTON_ICON_DOT_CLASS = "dx-radiobutton-icon-dot",
            RADIO_BUTTON_CHECKED_CLASS = "dx-radiobutton-checked",
            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
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return "desktop" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }, {
                    device: function() {
                        return themes.isAndroid5()
                    },
                    options: {
                        useInkRipple: 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 $ = __webpack_require__( /*! ../../core/renderer */ 2),
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            translator = __webpack_require__( /*! ../../animation/translator */ 24),
            fx = __webpack_require__( /*! ../../animation/fx */ 31),
            dragEvents = __webpack_require__( /*! ../../events/drag */ 65),
            mathUtils = __webpack_require__( /*! ../../core/utils/math */ 30),
            Animator = __webpack_require__( /*! ../scroll_view/animator */ 302),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            registerDecorator = __webpack_require__( /*! ./ui.list.edit.decorator_registry */ 97).register,
            EditDecorator = __webpack_require__( /*! ./ui.list.edit.decorator */ 130);
        var ReorderScrollAnimator = Animator.inherit({
            ctor: function(strategy) {
                this.callBase();
                this._strategy = strategy
            },
            _isFinished: function() {
                return this._strategy.scrollFinished()
            },
            _step: function() {
                this._strategy.scrollByStep()
            }
        });
        var LIST_EDIT_DECORATOR = "dxListEditDecorator",
            DRAG_START_EVENT_NAME = eventUtils.addNamespace(dragEvents.start, LIST_EDIT_DECORATOR),
            DRAG_UPDATE_EVENT_NAME = eventUtils.addNamespace(dragEvents.move, LIST_EDIT_DECORATOR),
            DRAG_END_EVENT_NAME = eventUtils.addNamespace(dragEvents.end, LIST_EDIT_DECORATOR),
            REORDER_HANDLE_CONTAINER_CLASS = "dx-list-reorder-handle-container",
            REORDER_HANDLE_CLASS = "dx-list-reorder-handle",
            REOREDERING_ITEM_CLASS = "dx-list-item-reordering",
            REOREDERING_ITEM_GHOST_CLASS = "dx-list-item-ghost-reordering";
        registerDecorator("reorder", "default", EditDecorator.inherit({
            _init: function() {
                this._groupedEnabled = this._list.option("grouped");
                this._initAnimator()
            },
            _initAnimator: function() {
                this._scrollAnimator = new ReorderScrollAnimator(this)
            },
            _startAnimator: function() {
                if (!this._scrollAnimator.inProgress()) {
                    this._scrollAnimator.start()
                }
            },
            _stopAnimator: function() {
                this._scrollAnimator.stop()
            },
            afterBag: function(config) {
                var $itemElement = config.$itemElement,
                    $container = config.$container;
                var $handle = $("<div>").addClass(REORDER_HANDLE_CLASS);
                var lockedDrag = false;
                eventsEngine.on($handle, "dxpointerdown", function(e) {
                    lockedDrag = !eventUtils.isMouseEvent(e)
                });
                eventsEngine.on($handle, "dxhold", {
                    timeout: 30
                }, function(e) {
                    e.cancel = true;
                    lockedDrag = false
                });
                eventsEngine.on($handle, DRAG_START_EVENT_NAME, {
                    direction: "vertical",
                    immediate: true
                }, function(e) {
                    if (lockedDrag) {
                        e.cancel = true;
                        return
                    }
                    this._dragStartHandler($itemElement, e)
                }.bind(this));
                eventsEngine.on($handle, DRAG_UPDATE_EVENT_NAME, this._dragHandler.bind(this, $itemElement));
                eventsEngine.on($handle, DRAG_END_EVENT_NAME, this._dragEndHandler.bind(this, $itemElement));
                $container.addClass(REORDER_HANDLE_CONTAINER_CLASS);
                $container.append($handle)
            },
            _dragStartHandler: function($itemElement, e) {
                if ($itemElement.is(".dx-state-disabled, .dx-state-disabled *")) {
                    e.cancel = true;
                    return
                }
                this._stopPreviousAnimation();
                e.targetElements = [];
                this._cacheItemsPositions();
                this._startPointerOffset = e.pageY - $itemElement.offset().top;
                this._elementHeight = $itemElement.outerHeight();
                var itemIndex = this._list.getFlatIndexByItemElement($itemElement);
                this._startIndex = itemIndex;
                this._lastIndex = itemIndex;
                this._cacheScrollData();
                var that = this;
                this._createGhostTimeout = setTimeout(function() {
                    that._createGhost($itemElement);
                    that._updateGhostPosition();
                    $itemElement.addClass(REOREDERING_ITEM_CLASS)
                })
            },
            _stopPreviousAnimation: function() {
                fx.stop(this._$ghostItem, true)
            },
            _cacheItemsPositions: function() {
                var itemPositions = this._itemPositions = [];
                each(this._list.itemElements(), function(index, item) {
                    var cachedPosition = null;
                    itemPositions.push(function() {
                        cachedPosition = null === cachedPosition ? $(item).position().top : cachedPosition;
                        return cachedPosition
                    })
                })
            },
            _getDraggingElementPosition: function() {
                return this._itemPositions[this._startIndex]()
            },
            _getLastElementPosition: function() {
                return this._itemPositions[this._lastIndex]()
            },
            _cacheScrollData: function() {
                this._list.updateDimensions();
                this._startScrollTop = this._list.scrollTop();
                this._scrollOffset = 0;
                this._scrollHeight = this._list.scrollHeight();
                this._clientHeight = this._list.clientHeight()
            },
            _scrollTop: function() {
                return this._startScrollTop + this._scrollOffset
            },
            _createGhost: function($itemElement) {
                this._$ghostItem = $itemElement.clone();
                this._$ghostItem.addClass(REOREDERING_ITEM_GHOST_CLASS).appendTo(this._list.itemsContainer());
                this._startGhostPosition = this._getDraggingElementPosition() - this._$ghostItem.position().top;
                translator.move(this._$ghostItem, {
                    top: this._startGhostPosition
                })
            },
            _dragHandler: function($itemElement, e) {
                this._topOffset = e.offset.y;
                this._updateItemPositions();
                var pointerPosition = this._getPointerPosition();
                this._toggleScroll(pointerPosition)
            },
            _getPointerPosition: function() {
                return this._getDraggingElementPosition() + this._startPointerOffset + this._scrollOffset + this._topOffset
            },
            _toggleScroll: function(pointerPosition) {
                if (this._scrollHeight <= this._clientHeight) {
                    return
                }
                var minOffset = .7 * this._elementHeight,
                    topOffset = this._clientHeight - (pointerPosition - this._scrollTop()),
                    topOffsetRatio = topOffset / minOffset,
                    bottomOffset = pointerPosition - this._scrollTop(),
                    bottomOffsetRatio = bottomOffset / minOffset;
                if (topOffsetRatio < 1) {
                    this._stepSize = this._adjustRationIntoRange(topOffsetRatio);
                    this._startAnimator()
                } else {
                    if (bottomOffsetRatio < 1) {
                        this._stepSize = -this._adjustRationIntoRange(bottomOffsetRatio);
                        this._startAnimator()
                    } else {
                        this._stopAnimator()
                    }
                }
            },
            _adjustRationIntoRange: function(ratio) {
                return mathUtils.fitIntoRange(Math.round(7 * Math.abs(ratio - 1)), 1, 7)
            },
            _updateItemPositions: function() {
                this._updateGhostPosition();
                this._updateOthersPositions()
            },
            _updateGhostPosition: function() {
                if (!this._$ghostItem) {
                    return
                }
                translator.move(this._$ghostItem, {
                    top: this._startGhostPosition + this._scrollOffset + this._topOffset
                })
            },
            _updateOthersPositions: function() {
                var currentIndex = this._findItemIndexByPosition(this._getPointerPosition());
                if (this._lastIndex === currentIndex || this._groupedEnabled && !this._sameParent(currentIndex)) {
                    return
                }
                var currentIndexOffset = currentIndex - this._startIndex,
                    currentDirection = mathUtils.sign(currentIndexOffset),
                    minIndex = Math.min(currentIndex, this._lastIndex),
                    maxIndex = Math.max(currentIndex, this._lastIndex);
                for (var itemIndex = minIndex; itemIndex <= maxIndex; itemIndex++) {
                    if (itemIndex === this._startIndex) {
                        continue
                    }
                    var $item = this._list.getItemElementByFlatIndex(itemIndex),
                        itemIndexOffset = itemIndex - this._startIndex,
                        itemDirection = mathUtils.sign(itemIndexOffset),
                        offsetsDifference = Math.abs(itemIndexOffset) <= Math.abs(currentIndexOffset),
                        sameDirections = currentDirection === itemDirection,
                        setupPosition = offsetsDifference && sameDirections,
                        resetPosition = !offsetsDifference || !sameDirections;
                    fx.stop($item);
                    if (setupPosition) {
                        fx.animate($item, {
                            type: "slide",
                            to: {
                                top: this._elementHeight * -currentDirection
                            },
                            duration: 300
                        })
                    }
                    if (resetPosition) {
                        fx.animate($item, {
                            type: "slide",
                            to: {
                                top: 0
                            },
                            duration: 300
                        })
                    }
                }
                this._lastIndex = currentIndex
            },
            _sameParent: function(index) {
                var $dragging = this._list.getItemElementByFlatIndex(this._startIndex),
                    $over = this._list.getItemElementByFlatIndex(index);
                return $over.parent().get(0) === $dragging.parent().get(0)
            },
            scrollByStep: function() {
                this._scrollOffset += this._stepSize;
                this._list.scrollBy(this._stepSize);
                this._updateItemPositions()
            },
            scrollFinished: function() {
                var scrollTop = this._scrollTop(),
                    rejectScrollTop = scrollTop <= 0 && this._stepSize < 0,
                    rejectScrollBottom = scrollTop >= this._scrollHeight - this._clientHeight && this._stepSize > 0;
                return rejectScrollTop || rejectScrollBottom
            },
            _dragEndHandler: function($itemElement) {
                this._scrollAnimator.stop();
                fx.animate(this._$ghostItem, {
                    type: "slide",
                    to: {
                        top: this._startGhostPosition + this._getLastElementPosition() - this._getDraggingElementPosition()
                    },
                    duration: 300
                }).done(function() {
                    $itemElement.removeClass(REOREDERING_ITEM_CLASS);
                    this._resetPositions();
                    this._list.reorderItem($itemElement, this._list.getItemElementByFlatIndex(this._lastIndex));
                    this._deleteGhost()
                }.bind(this))
            },
            _deleteGhost: function() {
                if (!this._$ghostItem) {
                    return
                }
                this._$ghostItem.remove()
            },
            _resetPositions: function() {
                var minIndex = Math.min(this._startIndex, this._lastIndex),
                    maxIndex = Math.max(this._startIndex, this._lastIndex);
                for (var itemIndex = minIndex; itemIndex <= maxIndex; itemIndex++) {
                    var $item = this._list.getItemElementByFlatIndex(itemIndex);
                    translator.resetPosition($item)
                }
            },
            _findItemIndexByPosition: function(position) {
                var minIndex = 0;
                var maxIndex = this._itemPositions.length - 1;
                var currentIndex;
                var currentPosition;
                while (minIndex <= maxIndex) {
                    currentIndex = (minIndex + maxIndex) / 2 | 0;
                    currentPosition = this._itemPositions[currentIndex]();
                    if (currentPosition < position) {
                        minIndex = currentIndex + 1
                    } else {
                        if (currentPosition > position) {
                            maxIndex = currentIndex - 1
                        } else {
                            return currentIndex
                        }
                    }
                }
                return mathUtils.fitIntoRange(minIndex, 0, Math.max(maxIndex, 0))
            },
            getExcludedSelectors: function(selectors) {
                selectors.push("." + REOREDERING_ITEM_GHOST_CLASS)
            },
            dispose: function() {
                clearTimeout(this._createGhostTimeout);
                this.callBase.apply(this, arguments)
            }
        }))
    },
    /*!*************************************************!*\
      !*** ./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 */ 28);
        var _ui2 = _interopRequireDefault(_ui);
        var _button = __webpack_require__( /*! ./button */ 36);
        var _button2 = _interopRequireDefault(_button);
        var _uiCollection_widget = __webpack_require__( /*! ./collection/ui.collection_widget.edit */ 47);
        var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget);
        var _component_registrator = __webpack_require__( /*! ../core/component_registrator */ 8);
        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__( /*! ./widget/bindable_template */ 60);
        var _bindable_template2 = _interopRequireDefault(_bindable_template);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var BUTTON_GROUP_CLASS = "dx-buttongroup",
            BUTTON_GROUP_WRAPPER_CLASS = BUTTON_GROUP_CLASS + "-wrapper",
            BUTTON_GROUP_ITEM_CLASS = BUTTON_GROUP_CLASS + "-item",
            BUTTON_GROUP_FIRST_ITEM_CLASS = BUTTON_GROUP_CLASS + "-first-item",
            BUTTON_GROUP_LAST_ITEM_CLASS = BUTTON_GROUP_CLASS + "-last-item",
            BUTTON_GROUP_ITEM_HAS_WIDTH = BUTTON_GROUP_ITEM_CLASS + "-has-width",
            SHAPE_STANDARD_CLASS = "dx-shape-standard";
        var ButtonCollection = _uiCollection_widget2.default.inherit({
            _renderItemContent: function(options) {
                options.container = (0, _renderer2.default)(options.container).parent();
                this.callBase(options)
            },
            _focusTarget: function() {
                return this.$element().parent()
            },
            _keyboardEventBindingTarget: function() {
                return this._focusTarget()
            },
            _refreshContent: function() {
                this._prepareContent();
                this._renderContent()
            },
            _itemClass: function() {
                return BUTTON_GROUP_ITEM_CLASS
            }
        });
        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: [],
                    itemTemplate: "item",
                    onSelectionChanged: 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);
                var width = this.option("width");
                (0, _type.isDefined)(width) && $item.addClass(BUTTON_GROUP_ITEM_HAS_WIDTH);
                $item.addClass(SHAPE_STANDARD_CLASS)
            },
            _initTemplates: function() {
                var _this = this;
                this.callBase();
                this._defaultTemplates.item = new _bindable_template2.default(function($container, data) {
                    _this._prepareItemStyles($container);
                    _this._createComponent($container, _button2.default, (0, _extend.extend)({}, data, _this._getBasicButtonOptions()))
                }, ["text", "type", "icon", "disabled", "visible", "hint"], this.option("integrationOptions.watchMethod"))
            },
            _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
                })
            },
            _getBasicButtonOptions: function() {
                return {
                    focusStateEnabled: false,
                    stylingMode: this.option("stylingMode"),
                    hoverStateEnabled: this.option("hoverStateEnabled"),
                    activeStateEnabled: this.option("activeStateEnabled")
                }
            },
            _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"),
                    itemTemplate: this._getTemplateByOption("itemTemplate"),
                    scrollingEnabled: false,
                    selectedItemKeys: this.option("selectedItemKeys"),
                    focusStateEnabled: this.option("focusStateEnabled"),
                    accessKey: this.option("accessKey"),
                    tabIndex: this.option("tabIndex"),
                    noDataText: "",
                    selectionRequired: "single" === this.option("selectionMode"),
                    onSelectionChanged: function(e) {
                        _this2._syncSelectionOptions();
                        _this2._fireSelectionChangeEvent(e.addedItems, e.removedItems)
                    }
                };
                if (selectedItems.length) {
                    options.selectedItems = selectedItems
                }
                this._buttonsCollection = this._createComponent($buttons, ButtonCollection, options)
            },
            _syncSelectionOptions: function() {
                this._setOptionSilent("selectedItems", this._buttonsCollection.option("selectedItems"));
                this._setOptionSilent("selectedItemKeys", this._buttonsCollection.option("selectedItemKeys"))
            },
            _setOptionSilent: function(name, value) {
                this._cancelOptionChange = name;
                this.option(name, value);
                this._cancelOptionChange = false
            },
            _optionChanged: function(args) {
                if (this._cancelOptionChange === args.name) {
                    return
                }
                switch (args.name) {
                    case "stylingMode":
                    case "selectionMode":
                    case "keyExpr":
                    case "itemTemplate":
                    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 "onSelectionChanged":
                        break;
                    case "width":
                        this.callBase(args);
                        var $items = this.$element().find("." + BUTTON_GROUP_ITEM_CLASS);
                        $items.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/ui.calendar.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            Guid = __webpack_require__( /*! ../../core/guid */ 48),
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            Button = __webpack_require__( /*! ../button */ 36),
            Editor = __webpack_require__( /*! ../editor/editor */ 45),
            Swipeable = __webpack_require__( /*! ../../events/gesture/swipeable */ 117),
            Navigator = __webpack_require__( /*! ./ui.calendar.navigator */ 497),
            Views = __webpack_require__( /*! ./ui.calendar.views */ 498),
            translator = __webpack_require__( /*! ../../animation/translator */ 24),
            browser = __webpack_require__( /*! ../../core/utils/browser */ 38),
            dateUtils = __webpack_require__( /*! ../../core/utils/date */ 22),
            dateSerialization = __webpack_require__( /*! ../../core/utils/date_serialization */ 63),
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            config = __webpack_require__( /*! ../../core/config */ 25),
            fx = __webpack_require__( /*! ../../animation/fx */ 31),
            windowUtils = __webpack_require__( /*! ../../core/utils/window */ 6),
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14),
            FunctionTemplate = __webpack_require__( /*! ../widget/function_template */ 99);
        var CALENDAR_CLASS = "dx-calendar",
            CALENDAR_BODY_CLASS = "dx-calendar-body",
            CALENDAR_CELL_CLASS = "dx-calendar-cell",
            CALENDAR_FOOTER_CLASS = "dx-calendar-footer",
            CALENDAR_TODAY_BUTTON_CLASS = "dx-calendar-today-button",
            CALENDAR_HAS_FOOTER_CLASS = "dx-calendar-with-footer",
            CALENDAR_VIEWS_WRAPPER_CLASS = "dx-calendar-views-wrapper",
            CALENDAR_VIEW_CLASS = "dx-calendar-view",
            FOCUSED_STATE_CLASS = "dx-state-focused",
            ANIMATION_DURATION_SHOW_VIEW = 250,
            POP_ANIMATION_FROM = .6,
            POP_ANIMATION_TO = 1,
            CALENDAR_INPUT_STANDARD_PATTERN = "yyyy-MM-dd",
            CALENDAR_DATE_VALUE_KEY = "dxDateValueKey",
            LEVEL_COMPARE_MAP = {
                month: 3,
                year: 2,
                decade: 1,
                century: 0
            };
        var Calendar = Editor.inherit({
            _activeStateUnit: "." + CALENDAR_CELL_CLASS,
            _getDefaultOptions: function() {
                return 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: "month",
                    maxZoomLevel: "month",
                    minZoomLevel: "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" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }])
            },
            _supportedKeys: function() {
                return extend(this.callBase(), {
                    rightArrow: function(e) {
                        e.preventDefault();
                        if (e.ctrlKey) {
                            this._waitRenderView(1)
                        } else {
                            this._moveCurrentDate(1 * this._getRtlCorrection())
                        }
                    },
                    leftArrow: function(e) {
                        e.preventDefault();
                        if (e.ctrlKey) {
                            this._waitRenderView(-1)
                        } else {
                            this._moveCurrentDate(-1 * this._getRtlCorrection())
                        }
                    },
                    upArrow: function(e) {
                        e.preventDefault();
                        if (e.ctrlKey) {
                            this._navigateUp()
                        } else {
                            if (fx.isAnimating(this._view.$element())) {
                                return
                            }
                            this._moveCurrentDate(-1 * this._view.option("colCount"))
                        }
                    },
                    downArrow: function(e) {
                        e.preventDefault();
                        if (e.ctrlKey) {
                            this._navigateDown()
                        } else {
                            if (fx.isAnimating(this._view.$element())) {
                                return
                            }
                            this._moveCurrentDate(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");
                        var date = dateUtils.sameView(zoomLevel, currentDate, min) ? min : dateUtils.getViewFirstCellDate(zoomLevel, currentDate);
                        this._moveToClosestAvailableDate(date, 1)
                    },
                    end: function(e) {
                        e.preventDefault();
                        var zoomLevel = this.option("zoomLevel");
                        var currentDate = this.option("currentDate");
                        var max = this._dateOption("max");
                        var date = dateUtils.sameView(zoomLevel, currentDate, max) ? max : dateUtils.getViewLastCellDate(zoomLevel, currentDate);
                        this._moveToClosestAvailableDate(date, -1)
                    },
                    pageUp: function(e) {
                        e.preventDefault();
                        this._waitRenderView(-1)
                    },
                    pageDown: function(e) {
                        e.preventDefault();
                        this._waitRenderView(1)
                    },
                    tab: noop,
                    enter: function(e) {
                        if (!this._isMaxZoomLevel()) {
                            this._navigateDown()
                        } else {
                            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 (typeUtils.isNumeric(value)) {
                    return "number"
                }
                if (!typeUtils.isString(value)) {
                    return
                }
                return dateSerialization.getDateSerializationFormat(value)
            },
            _convertToDate: function(value, optionName) {
                return dateSerialization.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, dateSerialization.serializeDate(optionValue, serializationFormat))
            },
            _moveCurrentDate: function(offset, baseDate) {
                var newDate, currentDate = baseDate || new Date(this.option("currentDate")),
                    maxDate = this.option("max"),
                    minDate = this.option("min"),
                    zoomLevel = this.option("zoomLevel"),
                    isAvailableDateFound = false;
                while (!isAvailableDateFound) {
                    newDate = new Date(currentDate);
                    switch (zoomLevel) {
                        case "month":
                            newDate.setDate(currentDate.getDate() + offset);
                            break;
                        case "year":
                            newDate.setMonth(currentDate.getMonth() + offset);
                            break;
                        case "decade":
                            newDate.setFullYear(currentDate.getFullYear() + offset);
                            break;
                        case "century":
                            newDate.setFullYear(currentDate.getFullYear() + 10 * offset)
                    }
                    var offsetCorrection = 2 * offset / Math.abs(offset);
                    if (Math.abs(offset) > 1 && !dateUtils.sameView(zoomLevel, currentDate, newDate)) {
                        if ("decade" === zoomLevel) {
                            newDate.setFullYear(currentDate.getFullYear() + offset - offsetCorrection)
                        }
                        if ("century" === zoomLevel) {
                            newDate.setFullYear(currentDate.getFullYear() + 10 * (offset - offsetCorrection))
                        }
                    }
                    if (this._view.isDateDisabled(newDate) && newDate <= new Date(maxDate) && newDate >= new Date(minDate)) {
                        currentDate = newDate
                    } else {
                        isAvailableDateFound = true
                    }
                }
                this.option("currentDate", newDate)
            },
            _moveToClosestAvailableDate: function(baseDate, offset) {
                if (this._view.isDateDisabled(baseDate)) {
                    this._moveCurrentDate(offset, baseDate)
                } else {
                    this.option("currentDate", baseDate)
                }
            },
            _init: function() {
                this.callBase();
                this._correctZoomLevel();
                this._initCurrentDate();
                this._initActions()
            },
            _correctZoomLevel: function() {
                var minZoomLevel = this.option("minZoomLevel"),
                    maxZoomLevel = this.option("maxZoomLevel"),
                    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 = dateUtils.normalizeDate(date, this._getMinDate(), this._getMaxDate());
                return typeUtils.isDefined(date) ? new Date(date) : date
            },
            _initActions: function() {
                this._cellClickAction = this._createActionByOption("onCellClick");
                this._onContouredChanged = this._createActionByOption("onContouredChanged")
            },
            _initTemplates: function() {
                this.callBase();
                this._defaultTemplates.cell = new FunctionTemplate(function(options) {
                    var data = options.model;
                    $(options.container).append($("<span>").text(data && data.text || String(data)))
                }, this)
            },
            _updateCurrentDate: function(date) {
                if (fx.isAnimating(this._$viewsWrapper)) {
                    fx.stop(this._$viewsWrapper, true)
                }
                var min = this._getMinDate(),
                    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 ("month" === zoomLevel) {
                    return this._getMonthsOffset(startDate, endDate)
                }
                var zoomCorrection;
                switch (zoomLevel) {
                    case "century":
                        zoomCorrection = 100;
                        break;
                    case "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(),
                    monthOffset = endDate.getMonth() - startDate.getMonth();
                return 12 * yearOffset + monthOffset
            },
            _waitRenderView: function(offset) {
                if (this._alreadyViewRender) {
                    return
                }
                this._alreadyViewRender = true;
                var date = this._getDateByOffset(offset * this._getRtlCorrection());
                this._moveToClosestAvailableDate(date, offset);
                setTimeout(function() {
                    this._alreadyViewRender = false
                }.bind(this))
            },
            _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 = dateUtils.getDifferenceInMonth(this.option("zoomLevel")) * offset;
                date.setDate(1);
                date.setMonth(date.getMonth() + difference);
                var lastDay = dateUtils.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.setAria({
                    role: "listbox",
                    label: messageLocalization.format("dxCalendar-ariaWidgetName")
                });
                this._updateAriaSelected();
                this._updateAriaId();
                if (this._view.isDateDisabled(this.option("currentDate"))) {
                    this._moveCurrentDate(1)
                }
            },
            _render: function() {
                this.callBase();
                this._setViewContoured(this.option("currentDate"))
            },
            _renderBody: function() {
                if (!this._$viewsWrapper) {
                    this.$body = $("<div>").addClass(CALENDAR_BODY_CLASS);
                    this._$viewsWrapper = $("<div>").addClass(CALENDAR_VIEWS_WRAPPER_CLASS);
                    this.$body.append(this._$viewsWrapper)
                }
            },
            _renderViews: function() {
                this.$element().addClass(CALENDAR_VIEW_CLASS + "-" + this.option("zoomLevel"));
                var currentDate = this.option("currentDate");
                this._view = this._renderSpecificView(currentDate);
                this._view.option("_keyboardProcessor", this._viewKeyboardProcessor);
                if (windowUtils.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 = Views[this.option("zoomLevel")],
                    $view = $("<div>").appendTo(this._$viewsWrapper),
                    config = this._viewConfig(date);
                return new specificView($view, config)
            },
            _viewConfig: function(date) {
                var disabledDates = this.option("disabledDates");
                disabledDates = typeUtils.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"),
                    rtl: this.option("rtlEnabled"),
                    disabled: this.option("disabled") || config().designMode,
                    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) {
                    extend(params, {
                        component: that
                    });
                    return func(params)
                }
            },
            _isViewAvailable: function(date) {
                var zoomLevel = this.option("zoomLevel");
                var min = dateUtils.getViewMinBoundaryDate(zoomLevel, this._getMinDate());
                var max = dateUtils.getViewMaxBoundaryDate(zoomLevel, this._getMaxDate());
                return dateUtils.dateInRange(date, min, max)
            },
            _translateViews: function() {
                translator.move(this._view.$element(), {
                    left: 0,
                    top: 0
                });
                this._beforeView && translator.move(this._beforeView.$element(), {
                    left: this._getViewPosition(-1),
                    top: 0
                });
                this._afterView && translator.move(this._afterView.$element(), {
                    left: this._getViewPosition(1),
                    top: 0
                })
            },
            _getViewPosition: function(coefficient) {
                var rtlCorrection = this.option("rtlEnabled") && !browser.msie ? -1 : 1;
                return 100 * coefficient * rtlCorrection + "%"
            },
            _cellClickHandler: function(e) {
                var zoomLevel = this.option("zoomLevel"),
                    nextView = dateUtils.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 = dateUtils.getViewDown(zoomLevel);
                if (!nextView) {
                    return
                }
                var newCurrentDate = this._view.option("contouredDate") || this._view.option("date");
                if (cell) {
                    newCurrentDate = $(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._setViewContoured(this._getNormalizedDate(newCurrentDate))
            },
            _renderNavigator: function() {
                if (!this._navigator) {
                    this._navigator = new Navigator($("<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, 1 * e.direction);
                this._updateNavigatorCaption(-e.direction * this._getRtlCorrection())
            },
            _navigateUp: function() {
                var zoomLevel = this.option("zoomLevel"),
                    nextView = dateUtils.getViewUp(zoomLevel);
                if (!nextView || this._isMinZoomLevel(zoomLevel)) {
                    return
                }
                var contouredDate = this._view.option("contouredDate");
                this.option("zoomLevel", nextView);
                this.option("currentDate", contouredDate || this._view.option("date"));
                this._renderNavigator();
                this._animateShowView().done(function() {
                    this._setViewContoured(contouredDate)
                }.bind(this))
            },
            _isMinZoomLevel: function(zoomLevel) {
                var min = this._getMinDate(),
                    max = this._getMaxDate();
                return dateUtils.sameView(zoomLevel, min, max) || this.option("minZoomLevel") === zoomLevel
            },
            _updateButtonsVisibility: function() {
                this._navigator.toggleButton("next", !typeUtils.isDefined(this._getRequiredView("next")));
                this._navigator.toggleButton("prev", !typeUtils.isDefined(this._getRequiredView("prev")))
            },
            _renderSwipeable: function() {
                if (!this._swipeable) {
                    this._swipeable = this._createComponent(this.$element(), Swipeable, {
                        onStart: this._swipeStartHandler.bind(this),
                        onUpdated: this._swipeUpdateHandler.bind(this),
                        onEnd: this._swipeEndHandler.bind(this),
                        itemSizeFunc: this._viewWidth.bind(this)
                    })
                }
            },
            _swipeStartHandler: function(e) {
                fx.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;
                translator.move(this._$viewsWrapper, {
                    left: offset * this._viewWidth(),
                    top: 0
                });
                this._updateNavigatorCaption(offset)
            },
            _swipeEndHandler: function(e) {
                var targetOffset = e.event.targetOffset,
                    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(),
                    max = this._getMaxDate(),
                    normalizedDate = dateUtils.normalizeDate(date, min, max);
                return normalizedDate === min || normalizedDate === max
            },
            _renderFooter: function() {
                var showTodayButton = this.option("showTodayButton");
                if (showTodayButton) {
                    var $todayButton = this._createComponent($("<a>"), Button, {
                        focusStateEnabled: false,
                        text: messageLocalization.format("dxCalendar-todayButtonText"),
                        onClick: function() {
                            this._toTodayView()
                        }.bind(this),
                        integrationOptions: {}
                    }).$element().addClass(CALENDAR_TODAY_BUTTON_CLASS);
                    this._$footer = $("<div>").addClass(CALENDAR_FOOTER_CLASS).append($todayButton);
                    this.$element().append(this._$footer)
                }
                this.$element().toggleClass(CALENDAR_HAS_FOOTER_CLASS, showTodayButton)
            },
            _renderSubmitElement: function() {
                this._$submitElement = $("<input>").attr("type", "hidden").appendTo(this.$element());
                this._setSubmitValue(this.option("value"))
            },
            _setSubmitValue: function(value) {
                var dateValue = this._convertToDate(value);
                this._$submitElement.val(dateSerialization.serializeDate(dateValue, CALENDAR_INPUT_STANDARD_PATTERN))
            },
            _getSubmitElement: function() {
                return this._$submitElement
            },
            _animateShowView: function() {
                fx.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 fx.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(),
                    offsetSign = offset > 0 ? 1 : offset < 0 ? -1 : 0,
                    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 fx.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, viewToCreateKey, 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() {
                translator.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
            },
            _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 Guid;
                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", typeUtils.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)
                }
            }
        });
        registerComponent("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),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            Widget = __webpack_require__( /*! ../widget/ui.widget */ 28),
            Button = __webpack_require__( /*! ../button */ 36);
        var CALENDAR_NAVIGATOR_CLASS = "dx-calendar-navigator",
            CALENDAR_NAVIGATOR_PREVIOUS_MONTH_CLASS = "dx-calendar-navigator-previous-month",
            CALENDAR_NAVIGATOR_NEXT_MONTH_CLASS = "dx-calendar-navigator-next-month",
            CALENDAR_NAVIGATOR_PREVIOUS_VIEW_CLASS = "dx-calendar-navigator-previous-view",
            CALENDAR_NAVIGATOR_NEXT_VIEW_CLASS = "dx-calendar-navigator-next-view",
            CALENDAR_NAVIGATOR_DISABLED_LINK_CLASS = "dx-calendar-disabled-navigator-link",
            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,
                    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",
                    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 $ = __webpack_require__( /*! ../../core/renderer */ 2),
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            BaseView = __webpack_require__( /*! ./ui.calendar.base_view */ 499),
            dateUtils = __webpack_require__( /*! ../../core/utils/date */ 22),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            dateLocalization = __webpack_require__( /*! ../../localization/date */ 32),
            dateSerialization = __webpack_require__( /*! ../../core/utils/date_serialization */ 63),
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var CALENDAR_OTHER_MONTH_CLASS = "dx-calendar-other-month",
            CALENDAR_OTHER_VIEW_CLASS = "dx-calendar-other-view";
        var Views = {
            month: BaseView.inherit({
                _getViewName: function() {
                    return "month"
                },
                _getDefaultOptions: function() {
                    return extend(this.callBase(), {
                        firstDayOfWeek: void 0,
                        rowCount: 6,
                        colCount: 7
                    })
                },
                _renderImpl: function() {
                    this.callBase();
                    this._renderHeader()
                },
                _renderBody: function() {
                    this.callBase();
                    this._$table.find("." + CALENDAR_OTHER_VIEW_CLASS).addClass(CALENDAR_OTHER_MONTH_CLASS)
                },
                _renderFocusTarget: noop,
                getCellAriaLabel: function(date) {
                    return dateLocalization.format(date, "longdate")
                },
                _renderHeader: function() {
                    var that = this;
                    var $header = $("<thead>");
                    this._$table.prepend($header);
                    var $headerRow = $("<tr>");
                    $header.append($headerRow);
                    var appendCell = this.option("rtl") ? function(row, cell) {
                        row.prepend(cell)
                    } : function(row, cell) {
                        row.append(cell)
                    };
                    this._iterateCells(this.option("colCount"), function(i) {
                        var $cell = $("<th>").text(that._getDayCaption(that._getFirstDayOfWeek() + i));
                        appendCell($headerRow, $cell)
                    })
                },
                getNavigatorCaption: function() {
                    return dateLocalization.format(this.option("date"), "monthandyear")
                },
                _isTodayCell: function(cellDate) {
                    var today = new Date;
                    return dateUtils.sameDate(cellDate, today)
                },
                _isDateOutOfRange: function(cellDate) {
                    var minDate = this.option("min"),
                        maxDate = this.option("max");
                    return !dateUtils.dateInRange(cellDate, minDate, maxDate, "date")
                },
                _isOtherView: function(cellDate) {
                    return cellDate.getMonth() !== this.option("date").getMonth()
                },
                _getCellText: function(cellDate) {
                    return dateLocalization.format(cellDate, "d")
                },
                _getDayCaption: function(day) {
                    var daysInWeek = this.option("colCount");
                    return dateLocalization.getDayNames("abbreviated")[day % daysInWeek]
                },
                _getFirstCellData: function() {
                    var firstDay = dateUtils.getFirstMonthDate(this.option("date")),
                        firstMonthDayOffset = this._getFirstDayOfWeek() - firstDay.getDay(),
                        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 typeUtils.isDefined(this.option("firstDayOfWeek")) ? this.option("firstDayOfWeek") : dateLocalization.firstDayOfWeekIndex()
                },
                _getCellByDate: function(date) {
                    return this._$table.find("td[data-value='" + dateSerialization.serializeDate(date, dateUtils.getShortDateFormat()) + "']")
                },
                isBoundary: function(date) {
                    return dateUtils.sameMonthAndYear(date, this.option("min")) || dateUtils.sameMonthAndYear(date, this.option("max"))
                },
                _getDefaultDisabledDatesHandler: function(disabledDates) {
                    return function(args) {
                        var isDisabledDate = disabledDates.some(function(item) {
                            return dateUtils.sameDate(item, args.date)
                        });
                        if (isDisabledDate) {
                            return true
                        }
                    }
                }
            }),
            year: BaseView.inherit({
                _getViewName: function() {
                    return "year"
                },
                _isTodayCell: function(cellDate) {
                    return dateUtils.sameMonthAndYear(cellDate, new Date)
                },
                _isDateOutOfRange: function(cellDate) {
                    return !dateUtils.dateInRange(cellDate, dateUtils.getFirstMonthDate(this.option("min")), dateUtils.getLastMonthDate(this.option("max")))
                },
                _isOtherView: function() {
                    return false
                },
                _getCellText: function(cellDate) {
                    return dateLocalization.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='" + dateSerialization.serializeDate(foundDate, dateUtils.getShortDateFormat()) + "']")
                },
                getCellAriaLabel: function(date) {
                    return dateLocalization.format(date, "monthandyear")
                },
                getNavigatorCaption: function() {
                    return dateLocalization.format(this.option("date"), "yyyy")
                },
                isBoundary: function(date) {
                    return dateUtils.sameYear(date, this.option("min")) || dateUtils.sameYear(date, this.option("max"))
                }
            }),
            decade: BaseView.inherit({
                _getViewName: function() {
                    return "decade"
                },
                _isTodayCell: function(cellDate) {
                    return dateUtils.sameYear(cellDate, new Date)
                },
                _isDateOutOfRange: function(cellDate) {
                    var min = this.option("min"),
                        max = this.option("max");
                    return !dateUtils.dateInRange(cellDate.getFullYear(), min && min.getFullYear(), max && max.getFullYear())
                },
                _isOtherView: function(cellDate) {
                    var date = new Date(cellDate);
                    date.setMonth(1);
                    return !dateUtils.sameDecade(date, this.option("date"))
                },
                _getCellText: function(cellDate) {
                    return dateLocalization.format(cellDate, "yyyy")
                },
                _getFirstCellData: function() {
                    var year = dateUtils.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"),
                        firstYearInDecade = dateUtils.getFirstYearInDecade(currentDate),
                        startDate = new Date(currentDate),
                        endDate = new Date(currentDate);
                    startDate.setFullYear(firstYearInDecade);
                    endDate.setFullYear(firstYearInDecade + 9);
                    return dateLocalization.format(startDate, "yyyy") + "-" + dateLocalization.format(endDate, "yyyy")
                },
                _isValueOnCurrentView: function(currentDate, value) {
                    return dateUtils.sameDecade(currentDate, value)
                },
                _getCellByDate: function(date) {
                    var foundDate = new Date(date);
                    foundDate.setDate(1);
                    foundDate.setMonth(0);
                    return this._$table.find("td[data-value='" + dateSerialization.serializeDate(foundDate, dateUtils.getShortDateFormat()) + "']")
                },
                isBoundary: function(date) {
                    return dateUtils.sameDecade(date, this.option("min")) || dateUtils.sameDecade(date, this.option("max"))
                }
            }),
            century: BaseView.inherit({
                _getViewName: function() {
                    return "century"
                },
                _isTodayCell: function(cellDate) {
                    return dateUtils.sameDecade(cellDate, new Date)
                },
                _isDateOutOfRange: function(cellDate) {
                    var decade = dateUtils.getFirstYearInDecade(cellDate),
                        minDecade = dateUtils.getFirstYearInDecade(this.option("min")),
                        maxDecade = dateUtils.getFirstYearInDecade(this.option("max"));
                    return !dateUtils.dateInRange(decade, minDecade, maxDecade)
                },
                _isOtherView: function(cellDate) {
                    var date = new Date(cellDate);
                    date.setMonth(1);
                    return !dateUtils.sameCentury(date, this.option("date"))
                },
                _getCellText: function(cellDate) {
                    var startDate = dateLocalization.format(cellDate, "yyyy"),
                        endDate = new Date(cellDate);
                    endDate.setFullYear(endDate.getFullYear() + 9);
                    return startDate + " - " + dateLocalization.format(endDate, "yyyy")
                },
                _getFirstCellData: function() {
                    var decade = dateUtils.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(dateUtils.getFirstYearInDecade(foundDate));
                    return this._$table.find("td[data-value='" + dateSerialization.serializeDate(foundDate, dateUtils.getShortDateFormat()) + "']")
                },
                getNavigatorCaption: function() {
                    var currentDate = this.option("date"),
                        firstDecadeInCentury = dateUtils.getFirstDecadeInCentury(currentDate),
                        startDate = new Date(currentDate),
                        endDate = new Date(currentDate);
                    startDate.setFullYear(firstDecadeInCentury);
                    endDate.setFullYear(firstDecadeInCentury + 99);
                    return dateLocalization.format(startDate, "yyyy") + "-" + dateLocalization.format(endDate, "yyyy")
                },
                isBoundary: function(date) {
                    return dateUtils.sameCentury(date, this.option("min")) || dateUtils.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 $ = __webpack_require__( /*! ../../core/renderer */ 2),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            dataUtils = __webpack_require__( /*! ../../core/element_data */ 37),
            domUtils = __webpack_require__( /*! ../../core/utils/dom */ 12),
            Widget = __webpack_require__( /*! ../widget/ui.widget */ 28),
            dateUtils = __webpack_require__( /*! ../../core/utils/date */ 22),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            dateSerialization = __webpack_require__( /*! ../../core/utils/date_serialization */ 63),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            clickEvent = __webpack_require__( /*! ../../events/click */ 17);
        var abstract = Widget.abstract,
            CALENDAR_OTHER_VIEW_CLASS = "dx-calendar-other-view",
            CALENDAR_CELL_CLASS = "dx-calendar-cell",
            CALENDAR_EMPTY_CELL_CLASS = "dx-calendar-empty-cell",
            CALENDAR_TODAY_CLASS = "dx-calendar-today",
            CALENDAR_SELECTED_DATE_CLASS = "dx-calendar-selected-date",
            CALENDAR_CONTOURED_DATE_CLASS = "dx-calendar-contoured-date",
            CALENDAR_DXCLICK_EVENT_NAME = eventUtils.addNamespace(clickEvent.name, "dxCalendar"),
            CALENDAR_DATE_VALUE_KEY = "dxDateValueKey";
        var BaseView = Widget.inherit({
            _getViewName: function() {
                return "base"
            },
            _getDefaultOptions: function() {
                return 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._$table = $("<table>");
                this.$element().append(this._$table);
                this._createDisabledDatesHandler();
                this._renderBody();
                this._renderContouredDate();
                this._renderValue();
                this._renderEvents()
            },
            _renderBody: function() {
                this.$body = $("<tbody>").appendTo(this._$table);
                var that = this,
                    cellTemplate = this.option("cellTemplate");
                var appendChild = this.option("rtl") ? function(row, cell) {
                    row.insertBefore(cell, row.firstChild)
                } : function(row, cell) {
                    row.appendChild(cell)
                };

                function renderCell(cellIndex) {
                    if (prevCellDate) {
                        dateUtils.fixTimezoneGap(prevCellDate, cellDate)
                    }
                    prevCellDate = cellDate;
                    var cell = domAdapter.createElement("td"),
                        $cell = $(cell),
                        className = CALENDAR_CELL_CLASS;
                    if (that._isTodayCell(cellDate)) {
                        className = className + " " + CALENDAR_TODAY_CLASS
                    }
                    if (that._isDateOutOfRange(cellDate) || that.isDateDisabled(cellDate)) {
                        className = className + " " + CALENDAR_EMPTY_CELL_CLASS
                    }
                    if (that._isOtherView(cellDate)) {
                        className = className + " " + CALENDAR_OTHER_VIEW_CLASS
                    }
                    cell.className = className;
                    cell.setAttribute("data-value", dateSerialization.serializeDate(cellDate, dateUtils.getShortDateFormat()));
                    dataUtils.data(cell, CALENDAR_DATE_VALUE_KEY, cellDate);
                    that.setAria({
                        role: "option",
                        label: that.getCellAriaLabel(cellDate)
                    }, $cell);
                    appendChild(row, cell);
                    if (cellTemplate) {
                        cellTemplate.render({
                            model: {
                                text: that._getCellText(cellDate),
                                date: cellDate,
                                view: that._getViewName()
                            },
                            container: domUtils.getPublicElement($cell),
                            index: cellIndex
                        })
                    } else {
                        cell.innerHTML = that._getCellText(cellDate)
                    }
                    cellDate = that._getNextCellData(cellDate)
                }
                var prevCellDate, cellDate = this._getFirstCellData(),
                    colCount = this.option("colCount");
                for (var indexRow = 0, len = this.option("rowCount"); indexRow < len; indexRow++) {
                    var row = domAdapter.createElement("tr");
                    this.$body.get(0).appendChild(row);
                    this._iterateCells(colCount, renderCell)
                }
            },
            _iterateCells: function(colCount, delegate) {
                var i = 0;
                while (i < colCount) {
                    delegate(i);
                    ++i
                }
            },
            _renderEvents: function() {
                this._createCellClickAction();
                eventsEngine.off(this._$table, CALENDAR_DXCLICK_EVENT_NAME);
                eventsEngine.on(this._$table, CALENDAR_DXCLICK_EVENT_NAME, "td", function(e) {
                    if (!$(e.currentTarget).hasClass(CALENDAR_EMPTY_CELL_CLASS)) {
                        this._cellClickAction({
                            event: e,
                            value: $(e.currentTarget).data(CALENDAR_DATE_VALUE_KEY)
                        })
                    }
                }.bind(this))
            },
            _createCellClickAction: function() {
                this._cellClickAction = this._createActionByOption("onCellClick")
            },
            _createDisabledDatesHandler: function() {
                var disabledDates = this.option("disabledDates");
                this._disabledDatesHandler = Array.isArray(disabledDates) ? this._getDefaultDisabledDatesHandler(disabledDates) : disabledDates || noop
            },
            _getDefaultDisabledDatesHandler: function(disabledDates) {
                return 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("." + CALENDAR_CONTOURED_DATE_CLASS);
                var $newContouredCell = this._getCellByDate(contouredDate);
                $oldContouredCell.removeClass(CALENDAR_CONTOURED_DATE_CLASS);
                $newContouredCell.addClass(CALENDAR_CONTOURED_DATE_CLASS)
            },
            _dispose: function() {
                this._keyboardProcessor = void 0;
                this.callBase()
            },
            _changeValue: function(cellDate) {
                if (cellDate) {
                    var value = this.option("value"),
                        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"),
                    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"),
                    min = this.option("min");
                date = dateUtils.getFirstDateView(this._getViewName(), date);
                return new Date(min && date < min ? min : date)
            },
            _getCellByDate: abstract,
            isBoundary: abstract,
            _optionChanged: function(args) {
                var name = args.name;
                switch (name) {
                    case "value":
                        this._renderValue();
                        break;
                    case "contouredDate":
                        this._renderContouredDate(args.value);
                        break;
                    case "onCellClick":
                        this._createCellClickAction();
                        break;
                    case "disabledDates":
                    case "cellTemplate":
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        module.exports = BaseView
    },
    /*!**********************************************!*\
      !*** ./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 */ 501)
    },
    /*!********************************************************!*\
      !*** ./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),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            Color = __webpack_require__( /*! ../../color */ 91),
            ColorView = __webpack_require__( /*! ./color_view */ 303),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            isFunction = __webpack_require__( /*! ../../core/utils/type */ 1).isFunction,
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            DropDownEditor = __webpack_require__( /*! ../drop_down_editor/ui.drop_down_editor */ 157);
        var COLOR_BOX_CLASS = "dx-colorbox",
            COLOR_BOX_INPUT_CLASS = COLOR_BOX_CLASS + "-input",
            COLOR_BOX_INPUT_CONTAINER_CLASS = COLOR_BOX_INPUT_CLASS + "-container",
            COLOR_BOX_COLOR_RESULT_PREVIEW_CLASS = COLOR_BOX_CLASS + "-color-result-preview",
            COLOR_BOX_COLOR_IS_NOT_DEFINED = COLOR_BOX_CLASS + "-color-is-not-defined",
            COLOR_BOX_OVERLAY_CLASS = COLOR_BOX_CLASS + "-overlay",
            COLOR_BOX_CONTAINER_CELL_CLASS = "dx-colorview-container-cell",
            COLOR_BOX_BUTTON_CELL_CLASS = "dx-colorview-button-cell",
            COLOR_BOX_BUTTONS_CONTAINER_CLASS = "dx-colorview-buttons-container",
            COLOR_BOX_APPLY_BUTTON_CLASS = "dx-colorview-apply-button",
            COLOR_BOX_CANCEL_BUTTON_CLASS = "dx-colorview-cancel-button";
        var colorEditorPrototype = ColorView.prototype,
            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,
                    onApplyButtonClick: null,
                    onCancelButtonClick: null,
                    buttonsLocation: "bottom after"
                })
            },
            _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());
                eventsEngine.on($colorView, "focus", function() {
                    this.focus()
                }.bind(this))
            },
            _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"),
                    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)
                    },
                    _keyboardProcessor: that._colorViewProcessor
                }
            },
            _enterKeyHandler: function() {
                var newValue = this._input().val(),
                    value = this.option("value"),
                    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"));
                if (isFunction(this.option("onApplyButtonClick"))) {
                    this.option("onApplyButtonClick")()
                }
                this.callBase()
            },
            _cancelButtonHandler: function() {
                this._resetInputValue();
                if (isFunction(this.option("onCancelButtonClick"))) {
                    this.option("onCancelButtonClick")()
                }
                this.callBase()
            },
            _attachChildKeyboardEvents: function() {
                this._colorViewProcessor = this._keyboardProcessor.attachChildProcessor();
                if (this._colorView) {
                    this._colorView.option("_keyboardProcessor", this._colorViewProcessor);
                    return
                }
            },
            _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._$colorBoxInputContainer);
                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);
                this.callBase()
            },
            _resetInputValue: function() {
                var $input = this._input(),
                    value = this.option("value");
                $input.val(value);
                this._colorView && this._colorView.option("value", value)
            },
            _valueChangeEventHandler: function(e) {
                var value = this._input().val();
                if (value) {
                    value = this._applyColorFromInput(value);
                    this._colorView && this._colorView.option("value", 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,
                    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")
                        }
                        if (this._colorView) {
                            this._colorView.option("value", value)
                        }
                        this.callBase(args);
                        break;
                    case "applyButtonText":
                    case "cancelButtonText":
                        this.callBase(args);
                        this._popup && this._addPopupBottomClasses();
                        break;
                    case "editAlphaChannel":
                    case "onCancelButtonClick":
                    case "onApplyButtonClick":
                    case "keyStep":
                        if (this._colorView) {
                            this._colorView.option(name, value)
                        }
                        break;
                    case "applyValueMode":
                        this.callBase(args);
                        break;
                    case "rtlEnabled":
                        if (this._colorView) {
                            this._colorView.option(name, value)
                        }
                        this.callBase(args);
                        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 */ 8),
            NumberBoxMask = __webpack_require__( /*! ./number_box.mask */ 503);
        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),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            isNumeric = __webpack_require__( /*! ../../core/utils/type */ 1).isNumeric,
            browser = __webpack_require__( /*! ../../core/utils/browser */ 38),
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            fitIntoRange = __webpack_require__( /*! ../../core/utils/math */ 30).fitIntoRange,
            inRange = __webpack_require__( /*! ../../core/utils/math */ 30).inRange,
            escapeRegExp = __webpack_require__( /*! ../../core/utils/common */ 4).escapeRegExp,
            number = __webpack_require__( /*! ../../localization/number */ 49),
            maskCaret = __webpack_require__( /*! ./number_box.caret */ 504),
            getLDMLFormat = __webpack_require__( /*! ../../localization/ldml/number */ 267).getFormat,
            NumberBoxBase = __webpack_require__( /*! ./number_box.base */ 505),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1);
        var NUMBER_FORMATTER_NAMESPACE = "dxNumberFormatter",
            MOVE_FORWARD = 1,
            MOVE_BACKWARD = -1,
            MINUS = "-",
            NUMPUD_MINUS_KEY_IE = "Subtract",
            INPUT_EVENT = "input";
        var ensureDefined = function(value, defaultValue) {
            return void 0 === value ? defaultValue : value
        };
        var NumberBoxMask = NumberBoxBase.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    useMaskBehavior: true,
                    format: null
                })
            },
            _isDeleteKey: function(key) {
                return "Delete" === key || "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._moveCaretToBoundary.bind(that, MOVE_FORWARD),
                    enter: that._updateFormattedValue.bind(that),
                    end: that._moveCaretToBoundary.bind(that, MOVE_BACKWARD)
                })
            },
            _focusInHandler: function(e) {
                this.callBase(e);
                var caret = this._caret();
                if (caret.start !== caret.end) {
                    return
                }
                if (browser.msie) {
                    clearTimeout(this._ieCaretTimeout);
                    this._ieCaretTimeout = setTimeout(this._moveCaretToBoundary.bind(this, MOVE_BACKWARD, e))
                } else {
                    this._moveCaretToBoundary(MOVE_BACKWARD, e)
                }
            },
            _focusOutHandler: function(e) {
                this._focusOutOccurs = true;
                if (this._useMaskBehavior()) {
                    this._updateFormattedValue()
                }
                this.callBase(e);
                this._focusOutOccurs = false
            },
            _updateFormattedValue: function() {
                this._parsedValue = this._tryParse(this._getInputVal(), this._caret());
                this._adjustParsedValue();
                this._setTextByParsedValue();
                if (this._isValueDirty()) {
                    this._isDirty = false;
                    eventsEngine.trigger(this._input(), "change")
                }
            },
            _isValueDirty: function() {
                return this._isDirty || this._parsedValue !== this.option("value")
            },
            _arrowHandler: function(step, e) {
                if (!this._useMaskBehavior()) {
                    return
                }
                var text = this._getInputVal(),
                    format = this._getFormatPattern(),
                    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, e) {
                if (!this._useMaskBehavior() || e.shiftKey) {
                    return
                }
                var boundaries = maskCaret.getCaretBoundaries(this._getInputVal(), this._getFormatPattern()),
                    newCaret = maskCaret.getCaretWithOffset(direction === MOVE_FORWARD ? boundaries.start : boundaries.end, 0);
                this._caret(newCaret);
                e && e.preventDefault()
            },
            _shouldMoveCaret: function(text, caret) {
                var decimalSeparator = number.getDecimalSeparator(),
                    isDecimalSeparatorNext = text.charAt(caret.end) === decimalSeparator,
                    isZeroNext = "0" === text.charAt(caret.end),
                    moveToFloat = this._lastKey === decimalSeparator && isDecimalSeparatorNext,
                    zeroToZeroReplace = "0" === this._lastKey && isZeroNext;
                return moveToFloat || zeroToZeroReplace
            },
            _getInputVal: function() {
                return number.convertDigits(this._input().val(), true)
            },
            _keyboardHandler: function(e) {
                this._lastKey = number.convertDigits(e.originalEvent.key, true);
                if (!this._shouldHandleKey(e.originalEvent)) {
                    return this.callBase(e)
                }
                var text = this._getInputVal(),
                    caret = this._caret();
                var enteredChar = this._lastKey === MINUS ? "" : this._lastKey,
                    newValue = this._tryParse(text, caret, enteredChar);
                if (void 0 === newValue) {
                    if (this._lastKey !== MINUS) {
                        e.originalEvent.preventDefault()
                    }
                    if (this._shouldMoveCaret(text, caret)) {
                        this._moveCaret(1)
                    }
                } else {
                    this._parsedValue = newValue
                }
                return this.callBase(e)
            },
            _keyPressHandler: function(e) {
                if (!this._useMaskBehavior()) {
                    this.callBase(e)
                }
            },
            _removeHandler: function(e) {
                var caret = this._caret(),
                    text = this._getInputVal(),
                    start = caret.start,
                    end = caret.end;
                this._lastKey = e.key;
                if (caret.start === caret.end) {
                    this._isDeleteKey(e.key) ? end++ : start--
                }
                var char = text.slice(start, end);
                if (this._isStub(char)) {
                    this._moveCaret(this._isDeleteKey(e.key) ? 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(this._isDeleteKey(e.key) ? 1 : -1);
                        e.preventDefault()
                    }
                    return
                }
                if (end - start < text.length) {
                    var editedText = this._replaceSelectedText(text, {
                            start: start,
                            end: end
                        }, ""),
                        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(),
                    noEscapedFormat = format.replace(/'[^']+'/g, "");
                return noEscapedFormat.indexOf("%") !== -1
            },
            _parse: function(text, format) {
                var formatOption = this.option("format"),
                    isCustomParser = typeUtils.isFunction(formatOption.formatter),
                    parser = isCustomParser ? formatOption.parser : number.parse;
                return parser(text, format)
            },
            _format: function(value, format) {
                var formatOption = this.option("format"),
                    isCustomFormatter = typeUtils.isFunction(formatOption.formatter),
                    formatter = isCustomFormatter ? formatOption.formatter : number.format;
                return formatter(value, format)
            },
            _getFormatPattern: function() {
                var format = this.option("format"),
                    isLDMLPattern = "string" === typeof format && (format.indexOf("0") >= 0 || format.indexOf("#") >= 0);
                if (isLDMLPattern) {
                    return format
                } else {
                    return getLDMLFormat(function(value) {
                        return this._format(value, format)
                    }.bind(this))
                }
            },
            _getFormatForSign: function(text) {
                var format = this._getFormatPattern(),
                    signParts = format.split(";"),
                    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),
                    thousandsSeparator = number.getThousandsSeparator(),
                    stubs = format.replace(/[#0.,]/g, ""),
                    regExp = new RegExp("[-" + escapeRegExp((excludeComma ? "" : thousandsSeparator) + stubs) + "]", "g");
                return text.replace(regExp, "")
            },
            _truncateToPrecision: function(value, decimalSeparator, maxPrecision) {
                if (typeUtils.isDefined(value)) {
                    var strValue = value.toString(),
                        decimalSeparatorIndex = strValue.indexOf(decimalSeparator);
                    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),
                    format = this._getFormatPattern(),
                    isTextSelected = selection.start !== selection.end,
                    parsed = this._parse(editedText, format),
                    maxPrecision = this._getPrecisionLimits(format, editedText).max,
                    isValueChanged = parsed !== this._parsedValue,
                    decimalSeparator = number.getDecimalSeparator();
                var isDecimalPointRestricted = char === decimalSeparator && 0 === maxPrecision,
                    isUselessCharRestricted = !isTextSelected && !isValueChanged && char !== MINUS && !this._isValueIncomplete(editedText) && this._isStub(char);
                if (isDecimalPointRestricted || isUselessCharRestricted) {
                    return
                }
                if ("" === editedText) {
                    parsed = 0
                }
                if (isNaN(parsed)) {
                    return
                }
                var value = null === parsed ? this._parsedValue : parsed;
                parsed = this._truncateToPrecision(value, decimalSeparator, maxPrecision);
                return this._isPercentFormat() ? parsed && parsed / 100 : parsed
            },
            _isValueIncomplete: function(text) {
                if (!this._useMaskBehavior()) {
                    return this.callBase(text)
                }
                var caret = this._caret(),
                    point = number.getDecimalSeparator(),
                    pointIndex = text.indexOf(point),
                    isCaretOnFloat = pointIndex > 0 && pointIndex < caret.start,
                    textParts = this._removeStubs(text, true).split(point);
                if (!isCaretOnFloat || 2 !== textParts.length) {
                    return false
                }
                var floatLength = textParts[1].length,
                    precision = this._getPrecisionLimits(this._getFormatPattern(), text),
                    isPrecisionInRange = inRange(floatLength, precision.min, precision.max),
                    endsWithZero = "0" === textParts[1].charAt(floatLength - 1);
                return isPrecisionInRange && (endsWithZero || !floatLength)
            },
            _isValueInRange: function(value) {
                var min = ensureDefined(this.option("min"), -(1 / 0)),
                    max = ensureDefined(this.option("max"), 1 / 0);
                return inRange(value, min, max)
            },
            _setInputText: function(text) {
                var newCaret = maskCaret.getCaretAfterFormat(this._getInputVal(), text, this._caret(), this._getFormatPattern()),
                    newValue = number.convertDigits(text);
                if (this._formattedValue && this._formattedValue !== newValue) {
                    this._isDirty = true
                }
                this._input().val(newValue);
                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"),
                    isMobileDevice = "desktop" !== devices.real().deviceType;
                if (this._useMaskBehavior() && isNumberType) {
                    this._setInputType(isMobileDevice ? "tel" : "text")
                } 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),
                    adjustedCaret = maskCaret.getCaretInBoundaries(newCaret, this._getInputVal(), this._getFormatPattern());
                this._caret(adjustedCaret)
            },
            _shouldHandleKey: function(e) {
                var isSpecialChar = e.ctrlKey || e.shiftKey || e.altKey || !this._isChar(e.key),
                    isMinusKey = e.key === MINUS,
                    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)
            },
            _attachFormatterEvents: function() {
                var $input = this._input();
                eventsEngine.on($input, eventUtils.addNamespace(INPUT_EVENT, NUMBER_FORMATTER_NAMESPACE), this._formatValue.bind(this));
                eventsEngine.on($input, eventUtils.addNamespace("dxclick", NUMBER_FORMATTER_NAMESPACE), function() {
                    this._caret(maskCaret.getCaretInBoundaries(this._caret(), this._getInputVal(), this._getFormatPattern()))
                }.bind(this))
            },
            _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()),
                    regExpString = "^[^0-9" + escapedDecimalSeparator + "]+$",
                    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),
                    floatPart = (currentFormat.split(".")[1] || "").replace(/[^#0]/g, ""),
                    minPrecision = floatPart.replace(/^(0*)#*/, "$1").length,
                    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 (e.key === MINUS || e.key === NUMPUD_MINUS_KEY_IE) {
                        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(),
                            previousText = this._getInputVal();
                        this._setTextByParsedValue();
                        e.preventDefault();
                        var currentText = this._getInputVal(),
                            offset = maskCaret.getCaretOffset(previousText, currentText, format);
                        caret = maskCaret.getCaretWithOffset(caret, offset);
                        var caretInBoundaries = maskCaret.getCaretInBoundaries(caret, currentText, format);
                        if (browser.msie) {
                            clearTimeout(this._ieCaretTimeout);
                            this._ieCaretTimeout = 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._lastKey === MINUS && 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(),
                    parsed = this._parseValue(),
                    formatted = this._format(parsed, format) || "";
                this._setInputText(formatted)
            },
            _formatValue: function() {
                var text = this._getInputVal(),
                    caret = this._caret(),
                    textWithoutMinus = this._removeMinusFromText(text, caret),
                    wasMinusRemoved = textWithoutMinus !== text;
                this._isDirty = false;
                text = textWithoutMinus;
                if (this._isValueIncomplete(textWithoutMinus)) {
                    this._formattedValue = text;
                    if (wasMinusRemoved) {
                        this._setTextByParsedValue()
                    }
                    return
                }
                var textWasChanged = this._formattedValue !== text;
                if (textWasChanged) {
                    var value = this._tryParse(text, 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()
                }
                this.callBase()
            },
            _adjustParsedValue: function() {
                if (!this._useMaskBehavior()) {
                    return
                }
                var clearedText = this._removeStubs(this._getInputVal()),
                    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)
                }
                this._saveValueChangeEvent(e);
                this._lastKey = null;
                this._adjustParsedValue();
                this.option("value", this._parsedValue)
            },
            _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)
                }
            },
            _optionValuesEqual: function(name, oldValue, newValue) {
                if ("value" === name && 0 === oldValue && 0 === newValue) {
                    return 1 / oldValue === 1 / newValue
                }
                return this.callBase.apply(this, arguments)
            },
            _clearCache: function() {
                delete this._formattedValue;
                delete this._lastKey;
                delete this._parsedValue;
                delete this._isDirty;
                delete this._focusOutOccurs;
                clearTimeout(this._ieCaretTimeout);
                delete this._ieCaretTimeout
            },
            _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 */ 30).fitIntoRange,
            escapeRegExp = __webpack_require__( /*! ../../core/utils/common */ 4).escapeRegExp,
            number = __webpack_require__( /*! ../../localization/number */ 49);
        var getCaretBoundaries = function(text, format) {
            var signParts = format.split(";"),
                sign = number.getSign(text, format);
            signParts[1] = signParts[1] || "-" + signParts[0];
            format = sign < 0 ? signParts[1] : signParts[0];
            var clearedFormat = format.replace(/'([^']*)'/g, "$1"),
                result = /^([^#0\.,]*)([#0\.,]*)([^#0\.,]*)$/.exec(clearedFormat);
            var startBorder = result[1].length,
                endBorder = text.length - result[3].length;
            return {
                start: startBorder,
                end: endBorder
            }
        };
        var _getDigitCountBeforeIndex = function(index, text) {
            var decimalSeparator = number.getDecimalSeparator(),
                regExp = new RegExp("[^0-9" + escapeRegExp(decimalSeparator) + "]", "g"),
                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,
                counter = 1,
                index = null,
                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(),
                pointPosition = text.indexOf(point),
                newPointPosition = formatted.indexOf(point),
                textParts = text.split(point),
                formattedParts = formatted.split(point),
                isCaretOnFloat = pointPosition !== -1 && caret.start > pointPosition;
            if (isCaretOnFloat) {
                var relativeIndex = caret.start - pointPosition - 1,
                    digitsBefore = _getDigitCountBeforeIndex(relativeIndex, textParts[1]),
                    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,
                    digitsFromEnd = _getDigitCountBeforeIndex(positionFromEnd, _reverseText(textParts[0])),
                    newPositionFromEnd = _getDigitPositionByIndex(digitsFromEnd, _reverseText(formattedParts[0])),
                    newPositionFromBegin = formattedParts[0].length - (newPositionFromEnd + 1);
                return getCaretInBoundaries(newPositionFromBegin, formatted, format)
            }
        };
        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
        };
        var getCaretInBoundaries = function(caret, text, format) {
            caret = getCaretWithOffset(caret, 0);
            var boundaries = getCaretBoundaries(text, format),
                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),
                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),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            commonUtils = __webpack_require__( /*! ../../core/utils/common */ 4),
            mathUtils = __webpack_require__( /*! ../../core/utils/math */ 30),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            inArray = __webpack_require__( /*! ../../core/utils/array */ 11).inArray,
            focused = __webpack_require__( /*! ../widget/selectors */ 58).focused,
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            TextEditor = __webpack_require__( /*! ../text_box/ui.text_editor */ 296),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            pointerEvents = __webpack_require__( /*! ../../events/pointer */ 27),
            wheelEvent = __webpack_require__( /*! ../../events/core/wheel */ 105),
            SpinButton = __webpack_require__( /*! ./number_box.spin */ 506),
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14);
        var math = Math;
        var WIDGET_CLASS = "dx-numberbox",
            SPIN_CLASS = "dx-numberbox-spin",
            SPIN_CONTAINER_CLASS = "dx-numberbox-spin-container",
            SPIN_TOUCH_FRIENDLY_CLASS = "dx-numberbox-spin-touch-friendly";
        var FIREFOX_CONTROL_KEYS = ["Tab", "Del", "Delete", "Backspace", "Left", "ArrowLeft", "Right", "ArrowRight", "Home", "End", "Enter"];
        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")
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return devices.real().generic && !devices.isSimulator()
                    },
                    options: {
                        useLargeSpinButtons: false
                    }
                }, {
                    device: function() {
                        return "generic" !== devices.real().platform
                    },
                    options: {
                        mode: "number"
                    }
                }])
            },
            _initMarkup: function() {
                this._renderSubmitElement();
                this.$element().addClass(WIDGET_CLASS);
                this.callBase()
            },
            _renderContentImpl: function() {
                this.option("isValid") && this._validateValue(this.option("value"));
                this.setAria("role", "spinbutton");
                this._renderMouseWheelHandler()
            },
            _renderSubmitElement: function() {
                this._$submitElement = $("<input>").attr("type", "hidden").appendTo(this.$element());
                this._setSubmitValue(this.option("value"))
            },
            _setSubmitValue: function(value) {
                this._$submitElement.val(commonUtils.applyServerDecimalSeparator(value))
            },
            _getSubmitElement: function() {
                return this._$submitElement
            },
            _keyPressHandler: function(e) {
                this.callBase(e);
                var ch = e.key || String.fromCharCode(e.which),
                    validCharRegExp = /[\d.,eE\-+]|Subtract/,
                    isInputCharValid = validCharRegExp.test(ch);
                if (!isInputCharValid) {
                    if (e.metaKey || e.ctrlKey || e.key && inArray(e.key, FIREFOX_CONTROL_KEYS) >= 0) {
                        return
                    }
                    e.preventDefault();
                    return false
                }
                this._keyPressed = true
            },
            _renderMouseWheelHandler: function() {
                var eventName = eventUtils.addNamespace(wheelEvent.name, this.NAME);
                var mouseWheelAction = this._createAction(function(e) {
                    this._mouseWheelHandler(e.event)
                }.bind(this));
                eventsEngine.off(this._input(), eventName);
                eventsEngine.on(this._input(), eventName, function(e) {
                    mouseWheelAction({
                        event: e
                    })
                })
            },
            _mouseWheelHandler: function(dxEvent) {
                if (!focused(this._input())) {
                    return
                }
                dxEvent.delta > 0 ? this._spinValueChange(1, dxEvent) : this._spinValueChange(-1, dxEvent);
                dxEvent.preventDefault();
                dxEvent.stopPropagation()
            },
            _renderValue: function() {
                var inputValue = this._input().val();
                if (!inputValue.length || Number(inputValue) !== this.option("value")) {
                    this._forceValueRender();
                    this._toggleEmptinessEventHandler()
                }
                var value = this.option("value");
                this._renderInputAddons();
                this.setAria("valuenow", value);
                this.option("text", this._input().val())
            },
            _renderValueEventName: function() {
                return this.callBase() + " keypress"
            },
            _toggleDisabledState: function(value) {
                if (this._$spinUp) {
                    SpinButton.getInstance(this._$spinUp).option("disabled", value)
                }
                if (this._$spinDown) {
                    SpinButton.getInstance(this._$spinDown).option("disabled", value)
                }
                this.callBase.apply(this, arguments)
            },
            _forceValueRender: function() {
                var value = this.option("value"),
                    number = Number(value),
                    formattedValue = isNaN(number) ? "" : this._applyValueFormat(value);
                this._renderDisplayText(formattedValue)
            },
            _applyValueFormat: function(value) {
                return this.option("valueFormat")(value)
            },
            _renderProps: function() {
                this.callBase();
                this._input().prop({
                    min: this.option("min"),
                    max: this.option("max"),
                    step: this.option("step")
                });
                this.setAria({
                    valuemin: this.option("min") || "undefined",
                    valuemax: this.option("max") || "undefined"
                })
            },
            _renderInputAddons: function() {
                this.callBase();
                this._renderSpinButtons()
            },
            _renderSpinButtons: function() {
                var spinButtonsVisible = this.option("showSpinButtons");
                this.$element().toggleClass(SPIN_CLASS, spinButtonsVisible);
                this._toggleTouchFriendlyClass();
                if (!spinButtonsVisible) {
                    this._$spinContainer && this._$spinContainer.remove();
                    this._$spinContainer = null;
                    return
                }
                if (!this._$spinContainer) {
                    this._$spinContainer = this._createSpinButtons()
                }
                this._$spinContainer.prependTo(this._buttonsContainer())
            },
            _toggleTouchFriendlyClass: function() {
                this.$element().toggleClass(SPIN_TOUCH_FRIENDLY_CLASS, this.option("showSpinButtons") && this.option("useLargeSpinButtons"))
            },
            _createSpinButtons: function() {
                var eventName = eventUtils.addNamespace(pointerEvents.down, this.NAME);
                var pointerDownAction = this._createAction(this._spinButtonsPointerDownHandler.bind(this));
                var $spinContainer = $("<div>").addClass(SPIN_CONTAINER_CLASS);
                eventsEngine.off($spinContainer, eventName);
                eventsEngine.on($spinContainer, eventName, function(e) {
                    pointerDownAction({
                        event: e
                    })
                });
                this._$spinUp = $("<div>").appendTo($spinContainer);
                this._createComponent(this._$spinUp, SpinButton, {
                    direction: "up",
                    onChange: this._spinUpChangeHandler.bind(this)
                });
                this._$spinDown = $("<div>").appendTo($spinContainer);
                this._createComponent(this._$spinDown, SpinButton, {
                    direction: "down",
                    onChange: this._spinDownChangeHandler.bind(this)
                });
                return $spinContainer
            },
            _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 value = parseFloat(this._normalizeInputValue()) || 0,
                    step = parseFloat(this.option("step"));
                value = this._correctRounding(value, step * sign);
                var min = this.option("min"),
                    max = this.option("max");
                if (void 0 !== min) {
                    value = Math.max(min, value)
                }
                if (void 0 !== max) {
                    value = Math.min(max, value)
                }
                this._saveValueChangeEvent(dxEvent);
                this.option("value", value)
            },
            _correctRounding: function(value, step) {
                var regex = /[,.](.*)/;
                var isFloatValue = regex.test(value),
                    isFloatStep = regex.test(step);
                if (isFloatValue || isFloatStep) {
                    var valueAccuracy = isFloatValue ? regex.exec(value)[0].length : 0,
                        stepAccuracy = isFloatStep ? regex.exec(step)[0].length : 0,
                        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();
                eventsEngine.on(this._input(), "focusout", this._forceRefreshInputValue.bind(this))
            },
            _forceRefreshInputValue: function() {
                if ("number" === this.option("mode")) {
                    return
                }
                var $input = this._input(),
                    formattedValue = this._applyValueFormat(this.option("value"));
                $input.val(null);
                $input.val(formattedValue)
            },
            _valueChangeEventHandler: function(e) {
                var $input = this._input(),
                    inputValue = this._normalizeText(),
                    value = this._parseValue(inputValue),
                    valueHasDigits = "." !== inputValue && "-" !== inputValue;
                if (this._isValueValid() && !this._validateValue(value)) {
                    $input.val(this._applyValueFormat(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),
                    isValueCorrect = this._isValueInRange(inputValue);
                if (!isValueIncomplete && !isValueCorrect && null !== parsedValue) {
                    if (Number(inputValue) !== parsedValue) {
                        this._input().val(this._applyValueFormat(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(),
                    isValueValid = this._isValueValid(),
                    isValid = true,
                    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"))
            },
            reset: function() {
                this.option("value", null)
            },
            _clean: function() {
                delete this._$spinContainer;
                delete this._$spinUp;
                delete this._$spinDown;
                this.callBase()
            },
            _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":
                        this._renderInputAddons();
                        break;
                    case "useLargeSpinButtons":
                        this._toggleTouchFriendlyClass();
                        break;
                    case "invalidValueMessage":
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        module.exports = NumberBoxBase
    },
    /*!***************************************************************!*\
      !*** ./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),
            domAdapter = __webpack_require__( /*! ../../core/dom_adapter */ 13),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            Widget = __webpack_require__( /*! ../widget/ui.widget */ 28),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            pointerEvents = __webpack_require__( /*! ../../events/pointer */ 27),
            feedbackEvents = __webpack_require__( /*! ../../events/core/emitter.feedback */ 103),
            holdEvent = __webpack_require__( /*! ../../events/hold */ 95),
            Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7).Deferred;
        var SPIN_CLASS = "dx-numberbox-spin",
            SPIN_BUTTON_CLASS = "dx-numberbox-spin-button",
            SPIN_HOLD_DELAY = 100,
            NUMBER_BOX = "dxNumberBox",
            POINTERUP_EVENT_NAME = eventUtils.addNamespace(pointerEvents.up, NUMBER_BOX),
            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),
                    $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 */ 8),
            DateBoxMask = __webpack_require__( /*! ./ui.date_box.mask */ 508);
        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 */ 9);
        var _utils2 = _interopRequireDefault(_utils);
        var _type = __webpack_require__( /*! ../../core/utils/type */ 1);
        var _dom = __webpack_require__( /*! ../../core/utils/dom */ 12);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _math = __webpack_require__( /*! ../../core/utils/math */ 30);
        var _events_engine = __webpack_require__( /*! ../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _wheel = __webpack_require__( /*! ../../events/core/wheel */ 105);
        var _wheel2 = _interopRequireDefault(_wheel);
        var _uiDate_boxMask = __webpack_require__( /*! ./ui.date_box.mask.parts */ 509);
        var _date = __webpack_require__( /*! ../../localization/date */ 32);
        var _date2 = _interopRequireDefault(_date);
        var _date3 = __webpack_require__( /*! ../../localization/ldml/date.format */ 201);
        var _uiDate_box = __webpack_require__( /*! ./ui.date_box.base */ 510);
        var _uiDate_box2 = _interopRequireDefault(_uiDate_box);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var MASK_EVENT_NAMESPACE = "dateBoxMask",
            FORWARD = 1,
            BACKWARD = -1;
        var DateBoxMask = _uiDate_box2.default.inherit({
            _supportedKeys: function(e) {
                if (!this._useMaskBehavior() || this.option("opened") || e.altKey) {
                    return this.callBase(e)
                }
                var that = this;
                return (0, _extend.extend)(this.callBase(e), {
                    del: that._revertPart.bind(that, FORWARD),
                    backspace: that._revertPart.bind(that, BACKWARD),
                    home: that._selectFirstPart.bind(that),
                    end: that._selectLastPart.bind(that),
                    escape: that._revertChanges.bind(that),
                    enter: that._fireChangeEvent.bind(that),
                    leftArrow: that._selectNextPart.bind(that, BACKWARD),
                    rightArrow: that._selectNextPart.bind(that, FORWARD),
                    upArrow: that._partIncrease.bind(that, FORWARD),
                    downArrow: that._partIncrease.bind(that, BACKWARD)
                })
            },
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    useMaskBehavior: false,
                    advanceCaret: true
                })
            },
            _isSingleCharKey: function(e) {
                var key = e.originalEvent.key;
                return "string" === typeof key && 1 === key.length && !e.ctrl && !e.alt
            },
            _keyboardHandler: function(e) {
                var key = e.originalEvent.key;
                var result = this.callBase(e);
                if (!this._useMaskBehavior() || !this._isSingleCharKey(e)) {
                    return result
                }
                this._setNewDateIfEmpty();
                isNaN(parseInt(key)) ? this._searchString(key) : this._searchNumber(key);
                e.originalEvent.preventDefault();
                return result
            },
            _getFormatPattern: function() {
                var format = this._strategy.getDisplayFormat(this.option("displayFormat")),
                    isLDMLPattern = "string" === typeof format && (format.indexOf("0") >= 0 || format.indexOf("#") >= 0);
                if (isLDMLPattern) {
                    return format
                } else {
                    return (0, _date3.getFormat)(function(value) {
                        return _date2.default.format(value, format)
                    })
                }
            },
            _setNewDateIfEmpty: function() {
                if (!this._maskValue) {
                    this._maskValue = new Date;
                    this._renderDateParts()
                }
            },
            _searchNumber: function(char) {
                this._searchValue += char;
                var limits = this._getActivePartLimits(),
                    getter = this._getActivePartProp("getter"),
                    newValue = parseInt(this._searchValue);
                if ("getMonth" === getter) {
                    newValue--
                }
                if (!(0, _math.inRange)(newValue, limits.min, limits.max)) {
                    this._searchValue = char;
                    newValue = parseInt(char)
                }
                this._setActivePartValue(newValue);
                if (this.option("advanceCaret")) {
                    if (parseInt(this._searchValue + "0") > limits.max) {
                        this._selectNextPart(FORWARD)
                    }
                }
            },
            _searchString: function(char) {
                if (!isNaN(parseInt(this._getActivePartProp("text")))) {
                    return
                }
                var limits = this._getActivePartProp("limits")(this._maskValue),
                    startString = this._searchValue + char.toLowerCase(),
                    endLimit = limits.max - limits.min;
                for (var i = 0; i <= endLimit; i++) {
                    this._partIncrease(1);
                    if (0 === this._getActivePartProp("text").toLowerCase().indexOf(startString)) {
                        this._searchValue = startString;
                        return
                    }
                }
                this._revertPart(0);
                if (this._searchValue) {
                    this._clearSearchValue();
                    this._searchString(char)
                }
            },
            _clearSearchValue: function() {
                this._searchValue = ""
            },
            _revertPart: function(direction, e) {
                var value = this.dateOption("value");
                var caret = this._caret();
                var isAllSelected = caret.end - caret.start === this.option("text").length;
                if (value && !isAllSelected) {
                    var actual = this._getActivePartValue(value);
                    this._setActivePartValue(actual);
                    this._selectNextPart(direction, e)
                }
            },
            _useMaskBehavior: function() {
                return this.option("useMaskBehavior") && "text" === this.option("mode")
            },
            _renderMask: function() {
                this.callBase();
                this._detachMaskEvents();
                this._clearState();
                if (this._useMaskBehavior()) {
                    this._activePartIndex = 0;
                    this._attachMaskEvents();
                    this._loadMaskValue();
                    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._getFormatPattern());
                    this._selectNextPart(0)
                }
            },
            _detachMaskEvents: function() {
                _events_engine2.default.off(this._input(), "." + MASK_EVENT_NAMESPACE)
            },
            _attachMaskEvents: function() {
                var _this = this;
                _events_engine2.default.on(this._input(), _utils2.default.addNamespace("dxclick", MASK_EVENT_NAMESPACE), this._maskClickHandler.bind(this));
                _events_engine2.default.on(this._input(), _utils2.default.addNamespace("paste", MASK_EVENT_NAMESPACE), this._maskPasteHandler.bind(this));
                _events_engine2.default.on(this._input(), _utils2.default.addNamespace("drop", MASK_EVENT_NAMESPACE), function(e) {
                    _this._renderDisplayText(_this._getDisplayedText(_this._maskValue));
                    _this._selectNextPart(0, e)
                });
                _events_engine2.default.on(this._input(), _utils2.default.addNamespace(_wheel2.default.name, MASK_EVENT_NAMESPACE), this._mouseWheelHandler.bind(this))
            },
            _selectLastPart: function(e) {
                if (this.option("text")) {
                    this._activePartIndex = this._dateParts.length;
                    this._selectNextPart(BACKWARD, e)
                }
            },
            _selectFirstPart: function(e) {
                if (this.option("text")) {
                    this._activePartIndex = -1;
                    this._selectNextPart(FORWARD, e)
                }
            },
            _mouseWheelHandler: function(e) {
                this._partIncrease(e.delta > 0 ? FORWARD : BACKWARD, e)
            },
            _selectNextPart: function(step, e) {
                if (!this.option("text")) {
                    return
                }
                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, e);
                        return
                    } else {
                        index = this._activePartIndex
                    }
                }
                this._activePartIndex = index;
                this._caret(this._getActivePartProp("caret"));
                if (0 !== step) {
                    this._clearSearchValue()
                }
                e && e.preventDefault()
            },
            _getActivePartLimits: function() {
                var limitFunction = this._getActivePartProp("limits");
                return limitFunction(this._maskValue)
            },
            _getActivePartValue: function(dateValue) {
                dateValue = dateValue || this._maskValue;
                var getter = this._getActivePartProp("getter");
                return (0, _type.isFunction)(getter) ? getter(dateValue) : dateValue[getter]()
            },
            _setActivePartValue: function(value, dateValue) {
                dateValue = dateValue || this._maskValue;
                var setter = this._getActivePartProp("setter"),
                    limits = this._getActivePartLimits();
                value = (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 = this.dateOption("value");
                this._maskValue = value && new Date(value)
            },
            _saveMaskValue: function() {
                var value = this._maskValue && new Date(this._maskValue);
                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, e) {
                this._setNewDateIfEmpty();
                var limits = this._getActivePartLimits(),
                    newValue = step + this._getActivePartValue();
                newValue = newValue > limits.max ? limits.min : newValue;
                newValue = newValue < limits.min ? limits.max : newValue;
                this._setActivePartValue(newValue);
                e && e.preventDefault()
            },
            _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._renderDateParts();
                    this._maskValue = date;
                    this._renderDisplayText(this._getDisplayedText(this._maskValue));
                    this._selectNextPart(0, e)
                } else {
                    e.preventDefault()
                }
            },
            _isValueDirty: function() {
                var value = this.dateOption("value");
                return (this._maskValue && this._maskValue.getTime()) !== (value && value.getTime())
            },
            _fireChangeEvent: function() {
                this._clearSearchValue();
                this._selectNextPart(FORWARD);
                if (this._isValueDirty()) {
                    _events_engine2.default.trigger(this._input(), "change")
                }
            },
            _focusOutHandler: function(e) {
                this.callBase(e);
                if (this._useMaskBehavior()) {
                    this._fireChangeEvent()
                }
            },
            _valueChangeEventHandler: function(e) {
                if (this._useMaskBehavior()) {
                    this._saveValueChangeEvent(e);
                    if (!this.option("text")) {
                        this._maskValue = null
                    }
                    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 "advanceCaret":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _clearState: function() {
                this._clearSearchValue();
                delete this._dateParts;
                delete this._activePartIndex;
                delete this._maskValue
            },
            reset: function() {
                this.callBase();
                this._clearState();
                this._activePartIndex = 0
            },
            _clean: function() {
                this.callBase();
                this._detachMaskEvents();
                this._clearState()
            }
        });
        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 _date = __webpack_require__( /*! ../../localization/ldml/date.parser */ 268);
        var _date2 = __webpack_require__( /*! ../../localization/date */ 32);
        var _date3 = _interopRequireDefault(_date2);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _math = __webpack_require__( /*! ../../core/utils/math */ 30);
        var _common = __webpack_require__( /*! ../../core/utils/common */ 4);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var PATTERN_GETTERS = {
            a: function(date) {
                return date.getHours() < 12 ? 0 : 1
            },
            E: "getDay",
            y: "getFullYear",
            M: "getMonth",
            L: "getMonth",
            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(),
                    current = hours >= 12;
                if (current === value) {
                    return
                }
                date.setHours((hours + 12) % 24)
            },
            M: function(date, value) {
                var day = date.getDate();
                date.setMonth(value, 1);
                var dayLimits = getLimits("getDate", date),
                    newDay = (0, _math.fitIntoRange)(day, dayLimits.min, dayLimits.max);
                date.setDate(newDay)
            },
            E: function(date, value) {
                if (value < 0) {
                    return
                }
                date.setDate(date.getDate() - date.getDay() + value)
            },
            y: function(date, value) {
                var currentYear = date.getFullYear();
                if (value < 100) {
                    date.setFullYear(currentYear - currentYear % 100 + value)
                } else {
                    date.setFullYear(value)
                }
            }
        });
        var getPatternGetter = function(patternChar) {
            var unsupportedCharGetter = function() {
                return patternChar
            };
            return PATTERN_GETTERS[patternChar] || unsupportedCharGetter
        };
        var renderDateParts = function(text, format) {
            var regExpInfo = (0, _date.getRegExpInfo)(format, _date3.default),
                result = regExpInfo.regexp.exec(text);
            var start = 0,
                end = 0,
                sections = [];
            for (var i = 1; i < result.length; i++) {
                start = end;
                end = start + result[i].length;
                var pattern = regExpInfo.patterns[i - 1],
                    getter = getPatternGetter(pattern[0]);
                sections.push({
                    index: i - 1,
                    isStub: pattern === (0, _common.escapeRegExp)(result[i]),
                    caret: {
                        start: start,
                        end: end
                    },
                    pattern: pattern,
                    text: result[i],
                    limits: getLimits.bind(void 0, getter),
                    setter: PATTERN_SETTERS[pattern[0]] || _common.noop,
                    getter: getter
                })
            }
            return sections
        };
        var getLimits = function(getter, date) {
            var limits = {
                getFullYear: {
                    min: 0,
                    max: 9999
                },
                getMonth: {
                    min: 0,
                    max: 11
                },
                getDate: {
                    min: 1,
                    max: new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate()
                },
                getDay: {
                    min: 0,
                    max: 6
                },
                getHours: {
                    min: 0,
                    max: 23
                },
                getMinutes: {
                    min: 0,
                    max: 59
                },
                getAmPm: {
                    min: 0,
                    max: 1
                }
            };
            return limits[getter] || 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 $ = __webpack_require__( /*! ../../core/renderer */ 2),
            windowUtils = __webpack_require__( /*! ../../core/utils/window */ 6),
            window = windowUtils.getWindow(),
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            compareVersions = __webpack_require__( /*! ../../core/utils/version */ 62).compare,
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            support = __webpack_require__( /*! ../../core/utils/support */ 44),
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            config = __webpack_require__( /*! ../../core/config */ 25),
            dateUtils = __webpack_require__( /*! ../../core/utils/date */ 22),
            uiDateUtils = __webpack_require__( /*! ./ui.date_utils */ 98),
            dateSerialization = __webpack_require__( /*! ../../core/utils/date_serialization */ 63),
            DropDownEditor = __webpack_require__( /*! ../drop_down_editor/ui.drop_down_editor */ 157),
            dateLocalization = __webpack_require__( /*! ../../localization/date */ 32),
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14),
            DATEBOX_CLASS = "dx-datebox",
            DX_AUTO_WIDTH_CLASS = "dx-auto-width",
            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 */ 304),
            DateView: __webpack_require__( /*! ./ui.date_box.strategy.date_view */ 511),
            Native: __webpack_require__( /*! ./ui.date_box.strategy.native */ 514),
            CalendarWithTime: __webpack_require__( /*! ./ui.date_box.strategy.calendar_with_time */ 515),
            List: __webpack_require__( /*! ./ui.date_box.strategy.list */ 517)
        };
        var isRealWidthSet = function($element) {
            var explicitWidth = $element[0].style.width;
            if (explicitWidth && "auto" !== explicitWidth && "inherit" !== explicitWidth) {
                return true
            }
            return false
        };
        var calculateWidth = function(value, $input, $element) {
            var IE_ROUNDING_ERROR = 10;
            var NATIVE_BUTTONS_WIDTH = 48;
            var $longestValueElement = $("<div>").text(value).css({
                fontStyle: $input.css("fontStyle"),
                fontVariant: $input.css("fontVariant"),
                fontWeight: $input.css("fontWeight"),
                fontSize: $input.css("fontSize"),
                fontFamily: $input.css("fontFamily"),
                letterSpacing: $input.css("letterSpacing"),
                border: $input.css("border"),
                visibility: "hidden",
                whiteSpace: "nowrap",
                position: "absolute",
                "float": "left"
            });
            $longestValueElement.appendTo($element);
            var elementWidth = parseFloat(window.getComputedStyle($longestValueElement.get(0)).width),
                rightPadding = parseFloat(window.getComputedStyle($input.get(0)).paddingRight),
                leftPadding = parseFloat(window.getComputedStyle($input.get(0)).paddingLeft);
            var width = elementWidth + rightPadding + leftPadding + IE_ROUNDING_ERROR + ("text" !== $input.prop("type") ? NATIVE_BUTTONS_WIDTH : 0);
            $longestValueElement.remove();
            return width
        };
        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"
                    }
                })
            },
            _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("Done"),
                    adaptivityEnabled: false,
                    calendarOptions: {}
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: {
                        platform: "ios"
                    },
                    options: {
                        showPopupTitle: true
                    }
                }, {
                    device: {
                        platform: "android"
                    },
                    options: {
                        buttonsLocation: "bottom after"
                    }
                }, {
                    device: function() {
                        var realDevice = devices.real(),
                            platform = realDevice.platform;
                        return "ios" === platform || "android" === platform
                    },
                    options: {
                        pickerType: PICKER_TYPE.native
                    }
                }, {
                    device: function(_device) {
                        return "win" === _device.platform && _device.version && 8 === _device.version[0]
                    },
                    options: {
                        buttonsLocation: "bottom after"
                    }
                }, {
                    device: function(_device2) {
                        return "win" === _device2.platform && _device2.version && 10 === _device2.version[0]
                    },
                    options: {
                        buttonsLocation: "bottom center"
                    }
                }, {
                    device: function(currentDevice) {
                        var realDevice = devices.real(),
                            platform = realDevice.platform,
                            version = realDevice.version,
                            isPhone = realDevice.phone;
                        return "generic" === platform && "desktop" !== currentDevice.deviceType || "win" === platform && isPhone || "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()),
                    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),
                    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._renderSubmitElement();
                this.callBase();
                this._refreshFormatClass();
                this._refreshPickerTypeClass();
                this._strategy.renderInputMinMax(this._input())
            },
            _render: function() {
                this.callBase();
                this._updateSize()
            },
            _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)
            },
            _renderSubmitElement: function() {
                this._$submitElement = $("<input>").attr("type", "hidden").appendTo(this.$element())
            },
            _getSubmitElement: function() {
                return this._$submitElement
            },
            _updateSize: function() {
                var $element = this.$element(),
                    widthOption = this.option("width"),
                    isWidthSet = typeUtils.isDefined(widthOption) || isRealWidthSet($element) && !this._isSizeUpdatable,
                    pickerType = this._pickerType,
                    shouldCalculateWidth = pickerType !== PICKER_TYPE.rollers && "generic" === devices.current().platform;
                if (!windowUtils.hasWindow() || isWidthSet || !(shouldCalculateWidth && $element.is(":visible"))) {
                    return
                }
                var $input = this._input(),
                    format = this._strategy.getDisplayFormat(this.option("displayFormat")),
                    longestValue = dateLocalization.format(uiDateUtils.getLongestDate(format, dateLocalization.getMonthNames(), dateLocalization.getDayNames()), format);
                $element.width(calculateWidth(longestValue, $input, this.$element()));
                this._isSizeUpdatable = true
            },
            _attachChildKeyboardEvents: function() {
                this._strategy.attachKeyboardEvents(this._keyboardProcessor)
            },
            _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._updateSize()
                }
            },
            _clearValueHandler: function(e) {
                this.option("text", "");
                this.callBase(e)
            },
            _readOnlyPropValue: function() {
                return this.callBase() || this._pickerType === PICKER_TYPE.rollers
            },
            _clearButtonVisibility: function() {
                return this.callBase() && !this._isNativeType()
            },
            _renderValue: function() {
                var value = this.dateOption("value"),
                    dateSerializationFormat = this.option("dateSerializationFormat");
                this.option("text", this._getDisplayedText(value));
                var submitFormat = uiDateUtils.SUBMIT_FORMATS_MAP[this.option("type")];
                var submitValue = dateSerializationFormat ? dateSerialization.serializeDate(value, dateSerializationFormat) : uiDateUtils.toStandardDateFormat(value, submitFormat);
                this._$submitElement.val(submitValue);
                this._strategy.renderValue();
                this.callBase();
                this._validateValue(value)
            },
            _getDisplayedText: function(value) {
                var displayedText, mode = this.option("mode");
                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"),
                    parsedDate = this._getParsedDate(text),
                    value = this.dateOption("value") || this._getDateByDefault(),
                    type = this.option("type"),
                    newValue = uiDateUtils.mergeDates(value, parsedDate, type),
                    date = parsedDate && "time" === type ? newValue : parsedDate;
                if (this._validateValue(date)) {
                    var displayedText = this._getDisplayedText(newValue);
                    if (value && newValue && value.getTime() === newValue.getTime() && displayedText !== text) {
                        this._renderValue()
                    } else {
                        this.dateValue(newValue, e)
                    }
                }
                this.validationRequest.fire({
                    value: newValue,
                    editor: this
                })
            },
            _getDateByDefault: function() {
                return this._strategy.useCurrentDateByDefault() && new Date
            },
            _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
            },
            _validateValue: function(value) {
                var text = this.option("text"),
                    hasText = !!text && null !== value,
                    isDate = !!value && typeUtils.isDate(value) && !isNaN(value.getTime()),
                    isDateInRange = isDate && dateUtils.dateInRange(value, this.dateOption("min"), this.dateOption("max"), this.option("type")),
                    isValid = !hasText || !hasText && !value || isDateInRange,
                    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
            },
            _isValueChanged: function(newValue) {
                var oldValue = this.dateOption("value"),
                    oldTime = oldValue && oldValue.getTime(),
                    newTime = newValue && newValue.getTime();
                return oldTime !== newTime
            },
            _isTextChanged: function(newValue) {
                var oldText = this.dateOption("text"),
                    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() {
                this.dateValue(this._strategy.getValue());
                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":
                        this.callBase.apply(this, arguments);
                        this._updateSize();
                        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._updateSize();
                        break;
                    case "placeholder":
                        this._renderPlaceholder();
                        break;
                    case "min":
                    case "max":
                        this._validateValue(this.dateOption("value"));
                        this._invalidate();
                        break;
                    case "dateSerializationFormat":
                    case "readOnly":
                    case "interval":
                    case "disabledDates":
                    case "calendarOptions":
                    case "minZoomLevel":
                    case "maxZoomLevel":
                        this._invalidate();
                        break;
                    case "displayFormat":
                        this._updateValue();
                        break;
                    case "formatWidthCalculator":
                        break;
                    case "closeOnValueChange":
                        var applyValueMode = args.value ? "instantly" : "useButtons";
                        this.option("applyValueMode", applyValueMode);
                        break;
                    case "applyValueMode":
                        this._suppressDeprecatedWarnings();
                        this.option("closeOnValueChange", "instantly" === args.value);
                        this._resumeDeprecatedWarnings();
                        this.callBase.apply(this, arguments);
                        break;
                    case "text":
                        this._strategy.textChangedHandler(args.value);
                        this.callBase.apply(this, arguments);
                        break;
                    case "isValid":
                        this.callBase.apply(this, arguments);
                        this._updateSize();
                        break;
                    case "showDropDownButton":
                    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)
            },
            dateValue: function(value, dxEvent) {
                if (this._isValueChanged(value) && dxEvent) {
                    this._saveValueChangeEvent(dxEvent)
                } else {
                    if (this._isTextChanged(value)) {
                        this._updateValue();
                        this._validateValue(value)
                    }
                }
                return this.dateOption("value", value)
            },
            dateOption: function(optionName, value) {
                if (1 === arguments.length) {
                    return dateSerialization.deserializeDate(this.option(optionName))
                }
                var serializationFormat = this._getSerializationFormat();
                this.option(optionName, dateSerialization.serializeDate(value, serializationFormat))
            },
            reset: function() {
                this.callBase();
                this._updateValue()
            }
        });
        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),
            window = __webpack_require__( /*! ../../core/utils/window */ 6).getWindow(),
            DateView = __webpack_require__( /*! ./ui.date_view */ 512),
            DateBoxStrategy = __webpack_require__( /*! ./ui.date_box.strategy */ 177),
            support = __webpack_require__( /*! ../../core/utils/support */ 44),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            themes = __webpack_require__( /*! ../themes */ 20),
            dateUtils = __webpack_require__( /*! ./ui.date_utils */ 98),
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14);
        var DateViewStrategy = DateBoxStrategy.inherit({
            NAME: "DateView",
            getDefaultOptions: function() {
                return extend(this.callBase(), {
                    openOnFieldClick: true,
                    applyButtonText: messageLocalization.format("Done")
                })
            },
            getDisplayFormat: function(displayFormat) {
                return displayFormat || dateUtils.FORMATS_MAP[this.dateBox.option("type")]
            },
            popupConfig: function(config) {
                var themeName = themes.current();
                return {
                    showTitle: true,
                    toolbarItems: this.dateBox._popupToolbarItemsConfig(),
                    onInitialized: config.onInitialized,
                    defaultOptionsRules: [{
                        device: function(_device) {
                            return "win" === _device.platform && _device.version && 8 === _device.version[0]
                        },
                        options: {
                            showNames: true
                        }
                    }, {
                        device: function(_device2) {
                            return "win" === _device2.platform && _device2.phone && _device2.version && 8 === _device2.version[0]
                        },
                        options: {
                            animation: null
                        }
                    }, {
                        device: function() {
                            return themes.isWin8(themeName)
                        },
                        options: {
                            fullScreen: true
                        }
                    }, {
                        device: {
                            platform: "android"
                        },
                        options: {
                            width: 333,
                            height: 331
                        }
                    }, {
                        device: function(_device3) {
                            var platform = _device3.platform,
                                version = _device3.version;
                            return "generic" === platform || "ios" === platform || "win" === platform && version && 10 === version[0]
                        },
                        options: {
                            width: "auto",
                            height: "auto"
                        }
                    }, {
                        device: function(_device4) {
                            var platform = _device4.platform,
                                phone = _device4.phone;
                            return "generic" === platform && phone
                        },
                        options: {
                            width: 333,
                            maxWidth: "100%",
                            maxHeight: "100%",
                            height: "auto",
                            position: {
                                collision: "flipfit flip"
                            }
                        }
                    }, {
                        device: function(_device5) {
                            return _device5.phone && themes.isWin10(themeName)
                        },
                        options: {
                            width: 333,
                            height: "auto"
                        }
                    }, {
                        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
            },
            _getWidgetOptions: function() {
                return {
                    value: this.dateBoxValue() || new Date,
                    type: this.dateBox.option("type"),
                    minDate: this.dateBox.dateOption("min") || new Date(1900, 1, 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),
            Editor = __webpack_require__( /*! ../editor/editor */ 45),
            DateViewRoller = __webpack_require__( /*! ./ui.date_view_roller */ 513),
            dateUtils = __webpack_require__( /*! ../../core/utils/date */ 22),
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            uiDateUtils = __webpack_require__( /*! ./ui.date_utils */ 98),
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            dateLocalization = __webpack_require__( /*! ../../localization/date */ 32);
        var DATEVIEW_CLASS = "dx-dateview",
            DATEVIEW_COMPACT_CLASS = "dx-dateview-compact",
            DATEVIEW_WRAPPER_CLASS = "dx-dateview-wrapper",
            DATEVIEW_ROLLER_CONTAINER_CLASS = "dx-dateview-rollers",
            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"),
                    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,
                    showNames: false,
                    applyCompactClass: false
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function(_device) {
                        return "win" === _device.platform && _device.version && 8 === _device.version[0]
                    },
                    options: {
                        showNames: true
                    }
                }, {
                    device: function(_device2) {
                        return "desktop" !== _device2.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],
                    valueRange = this._calculateRollerConfigValueRange(componentName),
                    startValue = valueRange.startValue,
                    endValue = valueRange.endValue,
                    formatter = componentInfo.formatter,
                    showNames = this.option("showNames"),
                    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, showNames, 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],
                        setValue = roller.setValue,
                        currentValue = new Date(this._getCurrentDate()),
                        currentDate = currentValue.getDate();
                    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);
                    currentValue = dateUtils.normalizeDate(currentValue, this.option("minDate"), this.option("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(),
                    minDate = this.option("minDate"),
                    maxDate = this.option("maxDate");
                if (minDate && curDate.getTime() <= minDate.getTime()) {
                    curDate = minDate
                } else {
                    if (maxDate && curDate.getTime() >= maxDate.getTime()) {
                        curDate = maxDate
                    }
                }
                return curDate
            },
            _calculateRollerConfigValueRange: function(componentName) {
                var curDate = this._getCurrentDate(),
                    minDate = this.option("minDate"),
                    maxDate = this.option("maxDate"),
                    minYear = dateUtils.sameYear(curDate, minDate),
                    minMonth = minYear && curDate.getMonth() === minDate.getMonth(),
                    maxYear = dateUtils.sameYear(curDate, maxDate),
                    maxMonth = maxYear && curDate.getMonth() === maxDate.getMonth(),
                    minHour = minMonth && curDate.getDate() === minDate.getDate(),
                    maxHour = maxMonth && curDate.getDate() === maxDate.getDate(),
                    componentInfo = uiDateUtils.DATE_COMPONENTS_INFO[componentName],
                    startValue = componentInfo.startValue,
                    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 "showNames":
                    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),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            clickEvent = __webpack_require__( /*! ../../events/click */ 17),
            Scrollable = __webpack_require__( /*! ../scroll_view/ui.scrollable */ 96),
            fx = __webpack_require__( /*! ../../animation/fx */ 31),
            translator = __webpack_require__( /*! ../../animation/translator */ 24);
        var DATEVIEW_ROLLER_CLASS = "dx-dateviewroller",
            DATEVIEW_ROLLER_ACTIVE_CLASS = "dx-state-active",
            DATEVIEW_ROLLER_CURRENT_CLASS = "dx-dateviewroller-current",
            DATEVIEW_ROLLER_ITEM_CLASS = "dx-dateview-item",
            DATEVIEW_ROLLER_ITEM_SELECTED_CLASS = "dx-dateview-item-selected",
            DATEVIEW_ROLLER_ITEM_SELECTED_FRAME_CLASS = "dx-dateview-item-selected-frame",
            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: function(_device) {
                        return "win" === _device.platform && _device.version && 8 === _device.version[0]
                    },
                    options: {
                        showOnClick: true
                    }
                }, {
                    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,
                    originalAction = strategy[actionName];
                strategy[actionName] = function() {
                    callback.apply(this, arguments);
                    return originalAction.apply(this, arguments)
                }
            },
            _renderItems: function() {
                var items = this.option("items") || [],
                    $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") || [],
                    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(),
                    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(),
                    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"),
                    ratio = -this._location().top / this._itemHeight(),
                    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) && $item.get(0).getBoundingClientRect().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 */ 4).noop,
            DateBoxStrategy = __webpack_require__( /*! ./ui.date_box.strategy */ 177),
            support = __webpack_require__( /*! ../../core/utils/support */ 44),
            inArray = __webpack_require__( /*! ../../core/utils/array */ 11).inArray,
            dateUtils = __webpack_require__( /*! ./ui.date_utils */ 98),
            dateSerialization = __webpack_require__( /*! ../../core/utils/date_serialization */ 63);
        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
            },
            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),
            window = __webpack_require__( /*! ../../core/utils/window */ 6).getWindow(),
            CalendarStrategy = __webpack_require__( /*! ./ui.date_box.strategy.calendar */ 304),
            TimeView = __webpack_require__( /*! ./ui.time_view */ 516),
            dateLocalization = __webpack_require__( /*! ../../localization/date */ 32),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            Box = __webpack_require__( /*! ../box */ 176),
            uiDateUtils = __webpack_require__( /*! ./ui.date_utils */ 98);
        var SHRINK_VIEW_SCREEN_WIDTH = 573,
            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",
                    showPopupTitle: 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")
                })
            },
            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();
                if (isAdaptiveMode !== this._currentAdaptiveMode) {
                    this._currentAdaptiveMode = isAdaptiveMode;
                    return true
                }
                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),
                    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,
                    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"),
                    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 $ = __webpack_require__( /*! ../../core/renderer */ 2),
            Editor = __webpack_require__( /*! ../editor/editor */ 45),
            NumberBox = __webpack_require__( /*! ../number_box */ 118),
            SelectBox = __webpack_require__( /*! ../select_box */ 110),
            ensureDefined = __webpack_require__( /*! ../../core/utils/common */ 4).ensureDefined,
            Box = __webpack_require__( /*! ../box */ 176),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            dateLocalization = __webpack_require__( /*! ../../localization/date */ 32),
            uiDateUtils = __webpack_require__( /*! ./ui.date_utils */ 98);
        var TIMEVIEW_CLASS = "dx-timeview",
            TIMEVIEW_CLOCK_CLASS = "dx-timeview-clock",
            TIMEVIEW_FIELD_CLASS = "dx-timeview-field",
            TIMEVIEW_HOURARROW_CLASS = "dx-timeview-hourarrow",
            TIMEVIEW_TIME_SEPARATOR_CLASS = "dx-timeview-time-separator",
            TIMEVIEW_FORMAT12_CLASS = "dx-timeview-format12",
            TIMEVIEW_FORMAT12_AM = -1,
            TIMEVIEW_FORMAT12_PM = 1,
            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 = Editor.inherit({
            _getDefaultOptions: function() {
                return 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 = $("<div>").appendTo(this.$element()),
                    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, Box, {
                    height: "100%",
                    width: "100%",
                    direction: "col",
                    items: items
                })
            },
            _renderClock: function(_, __, container) {
                this._$hourArrow = $("<div>").addClass(TIMEVIEW_HOURARROW_CLASS);
                this._$minuteArrow = $("<div>").addClass(TIMEVIEW_MINUTEARROW_CLASS);
                var $container = $(container);
                $container.addClass(TIMEVIEW_CLOCK_CLASS).append(this._$hourArrow).append(this._$minuteArrow);
                this.setAria("role", "presentation", $container)
            },
            _updateClock: function() {
                var time = this._getValue(),
                    hourArrowAngle = time.getHours() / 12 * 360 + time.getMinutes() / 60 * 30,
                    minuteArrowAngle = time.getMinutes() / 60 * 360;
                rotateArrow(this._$hourArrow, hourArrowAngle, this.option("_arrowOffset"));
                rotateArrow(this._$minuteArrow, minuteArrowAngle, this.option("_arrowOffset"))
            },
            _getBoxItems: function(is12HourFormat) {
                var items = [{
                    ratio: 0,
                    shrink: 0,
                    baseSize: "auto",
                    template: function() {
                        return this._hourBox.$element()
                    }.bind(this)
                }, {
                    ratio: 0,
                    shrink: 0,
                    baseSize: "auto",
                    template: $("<div>").addClass(TIMEVIEW_TIME_SEPARATOR_CLASS).text(dateLocalization.getTimeSeparator())
                }, {
                    ratio: 0,
                    shrink: 0,
                    baseSize: "auto",
                    template: function() {
                        return this._minuteBox.$element()
                    }.bind(this)
                }];
                if (is12HourFormat) {
                    items.push({
                        ratio: 0,
                        shrink: 0,
                        baseSize: "auto",
                        template: function() {
                            return this._format12.$element()
                        }.bind(this)
                    })
                }
                return items
            },
            _renderField: function() {
                var is12HourFormat = !this.option("use24HourFormat");
                this._createHourBox();
                this._createMinuteBox();
                if (is12HourFormat) {
                    this._createFormat12Box()
                }
                return this._createComponent($("<div>").addClass(TIMEVIEW_FIELD_CLASS), Box, {
                    direction: "row",
                    align: "center",
                    crossAlign: "center",
                    items: this._getBoxItems(is12HourFormat)
                }).$element()
            },
            _createHourBox: function() {
                this._hourBox = this._createComponent($("<div>"), NumberBox, extend({
                    min: -1,
                    max: 24,
                    value: this._getValue().getHours(),
                    onValueChanged: function(args) {
                        var newHours = this._normalizeHours((24 + args.value) % 24);
                        this._hourBox.option("value", newHours);
                        var time = new Date(this._getValue());
                        time.setHours(this._denormalizeHours(newHours, args.value > args.previousValue));
                        uiDateUtils.normalizeTime(time);
                        this.option("value", time)
                    }.bind(this)
                }, this._getNumberBoxConfig()));
                this._hourBox.setAria("label", "hours")
            },
            _createMinuteBox: function() {
                this._minuteBox = this._createComponent($("<div>"), NumberBox, extend({
                    min: -1,
                    max: 60,
                    value: this._getValue().getMinutes(),
                    onValueChanged: function(args) {
                        var newMinutes = (60 + args.value) % 60;
                        this._minuteBox.option("value", newMinutes);
                        var time = new Date(this._getValue());
                        time.setMinutes(newMinutes);
                        uiDateUtils.normalizeTime(time);
                        this.option("value", time)
                    }.bind(this)
                }, this._getNumberBoxConfig()));
                this._minuteBox.setAria("label", "minutes")
            },
            _createFormat12Box: function() {
                this._format12 = this._createComponent($("<div>").addClass(TIMEVIEW_FORMAT12_CLASS), SelectBox, extend({
                    items: [{
                        value: TIMEVIEW_FORMAT12_AM,
                        text: "AM"
                    }, {
                        value: TIMEVIEW_FORMAT12_PM,
                        text: "PM"
                    }],
                    valueExpr: "value",
                    displayExpr: "text",
                    onValueChanged: function(args) {
                        var hours = this._getValue().getHours(),
                            time = new Date(this._getValue()),
                            newHours = (hours + 12 * args.value) % 24;
                        time.setHours(newHours);
                        this.option("value", time)
                    }.bind(this),
                    value: this._getValue().getHours() >= 12 ? TIMEVIEW_FORMAT12_PM : TIMEVIEW_FORMAT12_AM
                }, {
                    stylingMode: this.option("stylingMode")
                }));
                this._format12.setAria("label", "type")
            },
            _refreshFormat12: function() {
                if (this.option("use24HourFormat")) {
                    return
                }
                var value = this._getValue(),
                    hours = value.getHours(),
                    isPM = hours >= 12;
                this._format12._valueChangeActionSuppressed = true;
                this._format12.option("value", isPM ? TIMEVIEW_FORMAT12_PM : TIMEVIEW_FORMAT12_AM);
                this._format12._valueChangeActionSuppressed = false
            },
            _getNumberBoxConfig: function() {
                return extend({
                    showSpinButtons: true,
                    disabled: this.option("disabled"),
                    valueFormat: function(value) {
                        return (value < 10 ? "0" : "") + value
                    }
                }, {
                    stylingMode: this.option("stylingMode")
                })
            },
            _normalizeHours: function(hours) {
                if (this.option("use24HourFormat")) {
                    return hours
                }
                return hours % 12 || 12
            },
            _denormalizeHours: function(hours, moveForward) {
                hours = ensureDefined(hours, this._getValue().getHours());
                if (this.option("use24HourFormat")) {
                    return hours
                }
                var isPM = this._format12.option("value") === TIMEVIEW_FORMAT12_PM;
                if (11 === hours && !moveForward) {
                    isPM = !isPM
                }
                return (isPM ? hours + 12 : hours) % 24
            },
            _updateField: function() {
                if (this._hourBox) {
                    this._hourBox._valueChangeActionSuppressed = true;
                    this._hourBox.option("value", this._normalizeHours(this._getValue().getHours()));
                    this._hourBox._valueChangeActionSuppressed = false
                }
                if (this._minuteBox) {
                    this._minuteBox._valueChangeActionSuppressed = true;
                    this._minuteBox.option("value", this._getValue().getMinutes());
                    this._minuteBox._valueChangeActionSuppressed = false
                }
                this._refreshFormat12()
            },
            _updateTime: function() {
                if (this.option("_showClock")) {
                    this._updateClock()
                }
                this._updateField()
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._updateTime()
                }
            },
            _toggleDisabledState: function(value) {
                this._hourBox && this._hourBox.option("disabled", value);
                this._minuteBox && this._minuteBox.option("disabled", value)
            },
            _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)
                }
            }
        });
        registerComponent("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),
            window = __webpack_require__( /*! ../../core/utils/window */ 6).getWindow(),
            List = __webpack_require__( /*! ../list */ 109),
            DateBoxStrategy = __webpack_require__( /*! ./ui.date_box.strategy */ 177),
            themes = __webpack_require__( /*! ../themes */ 20),
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            isDate = __webpack_require__( /*! ../../core/utils/type */ 1).isDate,
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            dateUtils = __webpack_require__( /*! ./ui.date_utils */ 98),
            dateLocalization = __webpack_require__( /*! ../../localization/date */ 32),
            uiDateUtils = __webpack_require__( /*! ./ui.date_utils */ 98);
        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) {
                var result = extend(_popupConfig, {
                    width: this._getPopupWidth()
                });
                if (themes.isAndroid5()) {
                    extend(true, result, {
                        position: {
                            offset: {
                                h: -16,
                                v: -10
                            }
                        }
                    })
                }
                return result
            },
            useCurrentDateByDefault: function() {
                return true
            },
            _getPopupWidth: function() {
                var result = this.dateBox.$element().outerWidth();
                if (themes.isAndroid5()) {
                    result += 32
                }
                return result
            },
            popupShowingHandler: function() {
                this._dimensionChanged()
            },
            _renderWidget: function() {
                this.callBase();
                this._refreshItems()
            },
            _getWidgetName: function() {
                return List
            },
            _getWidgetOptions: function() {
                var keyboardProcessor = this.dateBox._keyboardProcessor;
                return {
                    _keyboardProcessor: keyboardProcessor ? keyboardProcessor.attachChildProcessor() : null,
                    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"),
                    max = this.dateBox.dateOption("max") || this._getBoundaryDate("max"),
                    value = this.dateBox.dateOption("value") || null,
                    delta = max - min,
                    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],
                    currentValue = this.dateBox.dateOption("value") || new Date;
                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");
                if (date) {
                    date = new Date(date)
                } else {
                    date = new Date;
                    uiDateUtils.normalizeTime(date)
                }
                date.setHours(e.itemData.getHours());
                date.setMinutes(e.itemData.getMinutes());
                date.setSeconds(e.itemData.getSeconds());
                this.dateBoxValue(date)
            },
            attachKeyboardEvents: function(keyboardProcessor) {
                var child = keyboardProcessor.attachChildProcessor();
                if (this._widget) {
                    this._widget.option("_keyboardProcessor", child)
                }
            },
            _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()
            }
        });
        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 */ 519)
    },
    /*!*****************************************************!*\
      !*** ./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 */ 12);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 8);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _extend = __webpack_require__( /*! ../../core/utils/extend */ 0);
        var _ui = __webpack_require__( /*! ../widget/ui.widget */ 28);
        var _ui2 = _interopRequireDefault(_ui);
        var _empty_template = __webpack_require__( /*! ../widget/empty_template */ 93);
        var _empty_template2 = _interopRequireDefault(_empty_template);
        var _window = __webpack_require__( /*! ../../core/utils/window */ 6);
        var _window2 = _interopRequireDefault(_window);
        var _uiDrawerRenderingStrategy = __webpack_require__( /*! ./ui.drawer.rendering.strategy.push */ 520);
        var _uiDrawerRenderingStrategy2 = _interopRequireDefault(_uiDrawerRenderingStrategy);
        var _uiDrawerRenderingStrategy3 = __webpack_require__( /*! ./ui.drawer.rendering.strategy.shrink */ 521);
        var _uiDrawerRenderingStrategy4 = _interopRequireDefault(_uiDrawerRenderingStrategy3);
        var _uiDrawerRenderingStrategy5 = __webpack_require__( /*! ./ui.drawer.rendering.strategy.overlap */ 522);
        var _uiDrawerRenderingStrategy6 = _interopRequireDefault(_uiDrawerRenderingStrategy5);
        var _uiDrawerRendering = __webpack_require__( /*! ./ui.drawer.rendering.strategy */ 178);
        var _click = __webpack_require__( /*! ../../events/click */ 17);
        var _click2 = _interopRequireDefault(_click);
        var _fx = __webpack_require__( /*! ../../animation/fx */ 31);
        var _fx2 = _interopRequireDefault(_fx);
        var _deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7);

        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_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 Drawer = _ui2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    position: "left",
                    opened: false,
                    minSize: null,
                    maxSize: null,
                    shading: false,
                    template: "panel",
                    openedStateMode: "shrink",
                    revealMode: "slide",
                    animationEnabled: true,
                    animationDuration: 400,
                    closeOnOutsideClick: false,
                    contentTemplate: "content",
                    target: void 0
                })
            },
            _getAnonymousTemplateName: function() {
                return ANONYMOUS_TEMPLATE_NAME
            },
            _init: function() {
                this.callBase();
                this._initStrategy();
                this.$element().addClass(DRAWER_CLASS);
                this._animations = [];
                this._animationPromise = void 0;
                this._whenPanelRendered = void 0;
                this._whenPanelRefreshed = void 0;
                this._initHideTopOverlayHandler()
            },
            _initStrategy: function() {
                var mode = this.option("openedStateMode");
                var Strategy = this._getDefaultStrategy();
                if ("push" === mode) {
                    Strategy = _uiDrawerRenderingStrategy2.default
                }
                if ("shrink" === mode) {
                    Strategy = _uiDrawerRenderingStrategy4.default
                }
                if ("overlap" === mode) {
                    Strategy = _uiDrawerRenderingStrategy6.default
                }
                this._strategy = new Strategy(this)
            },
            _getDefaultStrategy: function() {
                return _uiDrawerRenderingStrategy2.default
            },
            _initHideTopOverlayHandler: function() {
                this._hideMenuHandler = this.hide.bind(this)
            },
            _initTemplates: function() {
                this.callBase();
                this._defaultTemplates.panel = new _empty_template2.default(this);
                this._defaultTemplates.content = new _empty_template2.default(this)
            },
            _initCloseOnOutsideClickHandler: function() {
                _events_engine2.default.off(this._$contentWrapper, _click2.default.name);
                _events_engine2.default.on(this._$contentWrapper, _click2.default.name, this._outsideClickHandler.bind(this))
            },
            _outsideClickHandler: 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();
                    this._toggleShaderVisibility(false)
                }
            },
            _initMarkup: function() {
                this.callBase();
                this._toggleVisibleClass(this.option("opened"));
                this._renderMarkup();
                this._refreshModeClass();
                this._refreshRevealModeClass();
                this._renderShader();
                this._whenPanelRendered = new _deferred.Deferred;
                this._strategy.renderPanel(this._getTemplate(this.option("template")), this._whenPanelRendered);
                var contentTemplateOption = this.option("contentTemplate"),
                    contentTemplate = this._getTemplate(contentTemplateOption),
                    transclude = this._getAnonymousTemplateName() === contentTemplateOption;
                contentTemplate && contentTemplate.render({
                    container: this.viewContent(),
                    noModel: true,
                    transclude: transclude
                });
                this._initCloseOnOutsideClickHandler();
                this._refreshPositionClass()
            },
            _render: function() {
                var _this = this;
                this._initSize();
                this.callBase();
                this._whenPanelRendered.always(function() {
                    _this._dimensionChanged();
                    _this._renderPosition(_this.option("opened"), false)
                })
            },
            _renderMarkup: function() {
                this._$wrapper = (0, _renderer2.default)("<div>").addClass(DRAWER_WRAPPER_CLASS);
                this._renderPanelElement();
                this._$contentWrapper = (0, _renderer2.default)("<div>").addClass(DRAWER_CONTENT_CLASS);
                this._$wrapper.append(this._$contentWrapper);
                this.$element().append(this._$wrapper)
            },
            _renderPanelElement: function() {
                this._$panel = (0, _renderer2.default)("<div>").addClass(DRAWER_PANEL_CONTENT_CLASS);
                this._$wrapper.append(this._$panel)
            },
            _refreshModeClass: function(prevClass) {
                prevClass && this.$element().removeClass(DRAWER_CLASS + "-" + prevClass);
                this.$element().addClass(DRAWER_CLASS + "-" + this.option("openedStateMode"))
            },
            _refreshPositionClass: function(prevClass) {
                prevClass && this.$element().removeClass(DRAWER_CLASS + "-" + prevClass);
                var position = this.option("position");
                this.$element().addClass(DRAWER_CLASS + "-" + position);
                this._orderContent(position)
            },
            _orderContent: function(position) {
                if (this._needOrderContent() && ("right" === position || "bottom" === position)) {
                    this._$wrapper.prepend(this._$contentWrapper)
                } else {
                    this._$wrapper.prepend(this._$panel)
                }
            },
            _needOrderContent: function() {
                return "push" !== this.option("openedStateMode")
            },
            _refreshRevealModeClass: function(prevClass) {
                prevClass && this.$element().removeClass(DRAWER_CLASS + "-" + prevClass);
                this.$element().addClass(DRAWER_CLASS + "-" + this.option("revealMode"))
            },
            _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() {
                var realPanelSize = this.isHorizontalDirection() ? this.getRealPanelWidth() : this.getRealPanelHeight();
                this._maxSize = this.option("maxSize") || realPanelSize;
                this._minSize = this.option("minSize") || 0
            },
            getOverlayTarget: function() {
                return this.option("target") || this._$wrapper
            },
            getOverlay: function() {
                return this._overlay
            },
            getMaxSize: function() {
                return this._maxSize
            },
            getMinSize: function() {
                return this._minSize
            },
            getRealPanelWidth: function() {
                if (_window2.default.hasWindow()) {
                    return this.getElementWidth(this._strategy.getPanelContent())
                } else {
                    return 0
                }
            },
            getElementWidth: function($element) {
                var $children = $element.children();
                return $children.length ? $children.eq(0).get(0).getBoundingClientRect().width : $element.get(0).getBoundingClientRect().width
            },
            getRealPanelHeight: function() {
                if (_window2.default.hasWindow()) {
                    return this.getElementHeight(this._strategy.getPanelContent())
                } else {
                    return 0
                }
            },
            getElementHeight: function($element) {
                var $children = $element.children();
                return $children.length ? $children.eq(0).get(0).getBoundingClientRect().height : $element.get(0).getBoundingClientRect().height
            },
            getDrawerPosition: function() {
                var resultPosition = this.option("position");
                var rtl = this.option("rtlEnabled");
                if (this.isHorizontalDirection() && rtl) {
                    return "right" === resultPosition ? "left" : "right"
                }
                return resultPosition
            },
            isHorizontalDirection: function() {
                return "left" === this.option("position") || "right" === this.option("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();
                overlay && _fx2.default.stop((0, _renderer2.default)(overlay.$content()), jumpToEnd)
            },
            setZIndex: function(zIndex) {
                this._$shader.css("zIndex", zIndex - 1);
                this._$panel.css("zIndex", zIndex)
            },
            _isInvertedPosition: function() {
                var position = this.getDrawerPosition();
                return "right" === position || "bottom" === position
            },
            _renderPosition: function(offset, animate, jumpToEnd) {
                this.stopAnimations(jumpToEnd);
                this._animations = [];
                animate = _type2.default.isDefined(animate) ? animate && this.option("animationEnabled") : this.option("animationEnabled");
                if (!_window2.default.hasWindow()) {
                    return
                }
                var duration = this.option("animationDuration");
                offset && this._toggleShaderVisibility(offset);
                this._strategy.renderPosition(offset, animate);
                this._strategy.renderShaderVisibility(offset, animate, duration)
            },
            _animationCompleteHandler: function() {
                if (this._animationPromise) {
                    this._toggleResolve();
                    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._strategy.setPanelSize("slide" === this.option("revealMode"))
            },
            _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)
                }
            },
            _toggleVisibleClass: function(opened) {
                this.$element().toggleClass(OPENED_STATE_CLASS, opened)
            },
            _refreshPanel: function() {
                var _this2 = this;
                this._setInitialViewContentPosition();
                this._cleanPanel();
                this._renderPanelElement();
                this._orderContent(this.option("position"));
                this._whenPanelRefreshed = new _deferred.Deferred;
                this._strategy.renderPanel(this._getTemplate(this.option("template")), this._whenPanelRefreshed);
                this._whenPanelRefreshed.always(function() {
                    _this2._strategy.setPanelSize("slide" === _this2.option("revealMode"));
                    _this2._renderPosition(_this2.option("opened"), false, true)
                })
            },
            _setInitialViewContentPosition: function() {
                (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)")
            },
            _cleanPanel: function() {
                this._$panel.remove();
                if (this._overlay) {
                    this._overlay.dispose();
                    delete this._overlay;
                    delete this._$panel
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "width":
                        this.callBase(args);
                        this._dimensionChanged();
                        break;
                    case "opened":
                        this._renderPosition(args.value);
                        this._toggleVisibleClass(args.value);
                        break;
                    case "position":
                        this._refreshPositionClass(args.previousValue);
                        this._invalidate();
                    case "contentTemplate":
                    case "template":
                        this._invalidate();
                        break;
                    case "openedStateMode":
                    case "target":
                        this._initStrategy();
                        this._refreshModeClass(args.previousValue);
                        this._refreshPanel();
                        break;
                    case "minSize":
                    case "maxSize":
                        this._initSize();
                        this._renderPosition(this.option("opened"), false);
                        break;
                    case "revealMode":
                        this._refreshRevealModeClass(args.previousValue);
                        this._refreshPanel();
                        break;
                    case "shading":
                        this._toggleShaderVisibility(this.option("opened"));
                        break;
                    case "animationEnabled":
                    case "animationDuration":
                    case "closeOnOutsideClick":
                        break;
                    default:
                        this.callBase(args)
                }
            },
            content: function() {
                return (0, _dom.getPublicElement)(this._$panel)
            },
            viewContent: function() {
                return (0, _dom.getPublicElement)(this._$contentWrapper)
            },
            show: function() {
                return this.toggle(true)
            },
            hide: function() {
                return this.toggle(false)
            },
            toggle: function(showing) {
                var _this3 = this;
                showing = void 0 === showing ? !this.option("opened") : showing;
                this._animationPromise = new Promise(function(resolve) {
                    _this3._toggleResolve = resolve
                });
                this.option("opened", showing);
                return this._animationPromise
            }
        });
        (0, _component_registrator2.default)("dxDrawer", Drawer);
        module.exports = Drawer
    },
    /*!*****************************************************************************!*\
      !*** ./artifacts/transpiled/ui/drawer/ui.drawer.rendering.strategy.push.js ***!
      \*****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _createClass = function() {
            function defineProperties(target, props) {
                for (var i = 0; i < props.length; i++) {
                    var descriptor = props[i];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) {
                        descriptor.writable = true
                    }
                    Object.defineProperty(target, descriptor.key, descriptor)
                }
            }
            return function(Constructor, protoProps, staticProps) {
                if (protoProps) {
                    defineProperties(Constructor.prototype, protoProps)
                }
                if (staticProps) {
                    defineProperties(Constructor, staticProps)
                }
                return Constructor
            }
        }();
        var _get = function get(object, property, receiver) {
            if (null === object) {
                object = Function.prototype
            }
            var desc = Object.getOwnPropertyDescriptor(object, property);
            if (void 0 === desc) {
                var parent = Object.getPrototypeOf(object);
                if (null === parent) {
                    return
                } else {
                    return get(parent, property, receiver)
                }
            } else {
                if ("value" in desc) {
                    return desc.value
                } else {
                    var getter = desc.get;
                    if (void 0 === getter) {
                        return
                    }
                    return getter.call(receiver)
                }
            }
        };
        var _uiDrawerRendering = __webpack_require__( /*! ./ui.drawer.rendering.strategy */ 178);
        var _uiDrawerRendering2 = _interopRequireDefault(_uiDrawerRendering);
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _translator = __webpack_require__( /*! ../../animation/translator */ 24);
        var _translator2 = _interopRequireDefault(_translator);

        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 _possibleConstructorReturn(self, call) {
            if (!self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return call && ("object" === typeof call || "function" === typeof call) ? call : self
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function, not " + typeof superClass)
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    enumerable: false,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass
            }
        }
        var PushStrategy = function(_DrawerStrategy) {
            _inherits(PushStrategy, _DrawerStrategy);

            function PushStrategy() {
                _classCallCheck(this, PushStrategy);
                return _possibleConstructorReturn(this, (PushStrategy.__proto__ || Object.getPrototypeOf(PushStrategy)).apply(this, arguments))
            }
            _createClass(PushStrategy, [{
                key: "renderPosition",
                value: function(offset, animate) {
                    var _this2 = this;
                    _get(PushStrategy.prototype.__proto__ || Object.getPrototypeOf(PushStrategy.prototype), "renderPosition", this).call(this, offset, animate);
                    var drawer = this.getDrawerInstance();
                    var $content = (0, _renderer2.default)(drawer.viewContent());
                    var maxSize = this._getPanelSize(true);
                    (0, _renderer2.default)(drawer.content()).css(drawer.isHorizontalDirection() ? "width" : "height", maxSize);
                    var contentPosition = this._getPanelSize(offset) * drawer._getPositionCorrection();
                    if (animate) {
                        var animationConfig = {
                            $element: $content,
                            position: contentPosition,
                            direction: drawer.getDrawerPosition(),
                            duration: drawer.option("animationDuration"),
                            complete: function() {
                                _this2._contentAnimationResolve();
                                _this2._panelAnimationResolve()
                            }
                        };
                        _uiDrawerRendering.animation.moveTo(animationConfig)
                    } else {
                        if (drawer.isHorizontalDirection()) {
                            _translator2.default.move($content, {
                                left: contentPosition
                            })
                        } else {
                            _translator2.default.move($content, {
                                top: contentPosition
                            })
                        }
                    }
                }
            }]);
            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 _createClass = function() {
            function defineProperties(target, props) {
                for (var i = 0; i < props.length; i++) {
                    var descriptor = props[i];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) {
                        descriptor.writable = true
                    }
                    Object.defineProperty(target, descriptor.key, descriptor)
                }
            }
            return function(Constructor, protoProps, staticProps) {
                if (protoProps) {
                    defineProperties(Constructor.prototype, protoProps)
                }
                if (staticProps) {
                    defineProperties(Constructor, staticProps)
                }
                return Constructor
            }
        }();
        var _get = function get(object, property, receiver) {
            if (null === object) {
                object = Function.prototype
            }
            var desc = Object.getOwnPropertyDescriptor(object, property);
            if (void 0 === desc) {
                var parent = Object.getPrototypeOf(object);
                if (null === parent) {
                    return
                } else {
                    return get(parent, property, receiver)
                }
            } else {
                if ("value" in desc) {
                    return desc.value
                } else {
                    var getter = desc.get;
                    if (void 0 === getter) {
                        return
                    }
                    return getter.call(receiver)
                }
            }
        };
        var _uiDrawerRendering = __webpack_require__( /*! ./ui.drawer.rendering.strategy */ 178);
        var _uiDrawerRendering2 = _interopRequireDefault(_uiDrawerRendering);
        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 _possibleConstructorReturn(self, call) {
            if (!self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return call && ("object" === typeof call || "function" === typeof call) ? call : self
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function, not " + typeof superClass)
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    enumerable: false,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass
            }
        }
        var ShrinkStrategy = function(_DrawerStrategy) {
            _inherits(ShrinkStrategy, _DrawerStrategy);

            function ShrinkStrategy() {
                _classCallCheck(this, ShrinkStrategy);
                return _possibleConstructorReturn(this, (ShrinkStrategy.__proto__ || Object.getPrototypeOf(ShrinkStrategy)).apply(this, arguments))
            }
            _createClass(ShrinkStrategy, [{
                key: "renderPosition",
                value: function(offset, animate) {
                    var _this2 = this;
                    _get(ShrinkStrategy.prototype.__proto__ || Object.getPrototypeOf(ShrinkStrategy.prototype), "renderPosition", this).call(this, offset, animate);
                    var drawer = this.getDrawerInstance();
                    var direction = drawer.getDrawerPosition();
                    var $panel = (0, _renderer2.default)(drawer.content());
                    if ("slide" === drawer.option("revealMode")) {
                        var panelOffset = this._getPanelOffset(offset);
                        if (animate) {
                            var animationConfig = {
                                $element: $panel,
                                margin: panelOffset,
                                duration: drawer.option("animationDuration"),
                                direction: direction,
                                complete: function() {
                                    _this2._contentAnimationResolve();
                                    _this2._panelAnimationResolve()
                                }
                            };
                            _uiDrawerRendering.animation.margin(animationConfig)
                        } else {
                            $panel.css("margin" + direction.charAt(0).toUpperCase() + direction.substr(1), panelOffset)
                        }
                    }
                    if ("expand" === drawer.option("revealMode")) {
                        var size = this._getPanelSize(offset);
                        var _animationConfig = {
                            $element: $panel,
                            size: size,
                            duration: drawer.option("animationDuration"),
                            direction: direction,
                            complete: function() {
                                _this2._panelAnimationResolve()
                            }
                        };
                        if (animate) {
                            _uiDrawerRendering.animation.size(_animationConfig)
                        } else {
                            if (drawer.isHorizontalDirection()) {
                                (0, _renderer2.default)($panel).css("width", size)
                            } else {
                                (0, _renderer2.default)($panel).css("height", size)
                            }
                        }
                    }
                }
            }]);
            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 _createClass = function() {
            function defineProperties(target, props) {
                for (var i = 0; i < props.length; i++) {
                    var descriptor = props[i];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) {
                        descriptor.writable = true
                    }
                    Object.defineProperty(target, descriptor.key, descriptor)
                }
            }
            return function(Constructor, protoProps, staticProps) {
                if (protoProps) {
                    defineProperties(Constructor.prototype, protoProps)
                }
                if (staticProps) {
                    defineProperties(Constructor, staticProps)
                }
                return Constructor
            }
        }();
        var _get = function get(object, property, receiver) {
            if (null === object) {
                object = Function.prototype
            }
            var desc = Object.getOwnPropertyDescriptor(object, property);
            if (void 0 === desc) {
                var parent = Object.getPrototypeOf(object);
                if (null === parent) {
                    return
                } else {
                    return get(parent, property, receiver)
                }
            } else {
                if ("value" in desc) {
                    return desc.value
                } else {
                    var getter = desc.get;
                    if (void 0 === getter) {
                        return
                    }
                    return getter.call(receiver)
                }
            }
        };
        var _uiDrawerRendering = __webpack_require__( /*! ./ui.drawer.rendering.strategy */ 178);
        var _uiDrawerRendering2 = _interopRequireDefault(_uiDrawerRendering);
        var _renderer = __webpack_require__( /*! ../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _translator = __webpack_require__( /*! ../../animation/translator */ 24);
        var _translator2 = _interopRequireDefault(_translator);
        var _overlay = __webpack_require__( /*! ../overlay */ 64);
        var _overlay2 = _interopRequireDefault(_overlay);
        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 _possibleConstructorReturn(self, call) {
            if (!self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return call && ("object" === typeof call || "function" === typeof call) ? call : self
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function, not " + typeof superClass)
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    enumerable: false,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass
            }
        }
        var OverlapStrategy = function(_DrawerStrategy) {
            _inherits(OverlapStrategy, _DrawerStrategy);

            function OverlapStrategy() {
                _classCallCheck(this, OverlapStrategy);
                return _possibleConstructorReturn(this, (OverlapStrategy.__proto__ || Object.getPrototypeOf(OverlapStrategy)).apply(this, arguments))
            }
            _createClass(OverlapStrategy, [{
                key: "renderPanel",
                value: function(template, whenPanelRendered) {
                    delete this._initialPosition;
                    var position = this.getOverlayPosition();
                    var drawer = this.getDrawerInstance();
                    drawer._overlay = drawer._createComponent(drawer.content(), _overlay2.default, {
                        shading: false,
                        container: drawer.getOverlayTarget(),
                        position: position,
                        width: "auto",
                        height: "100%",
                        animation: {
                            show: {
                                duration: 0
                            }
                        },
                        onPositioned: function(e) {
                            var drawer = this.getDrawerInstance();
                            if (_type2.default.isDefined(this._initialPosition) && !drawer.option("rtlEnabled")) {
                                _translator2.default.move(e.component.$content(), {
                                    left: this._initialPosition.left
                                })
                            }
                            if ("right" === drawer.getDrawerPosition()) {
                                e.component.$content().css("left", "auto")
                            }
                        }.bind(this),
                        contentTemplate: template,
                        onContentReady: function() {
                            whenPanelRendered.resolve()
                        },
                        visible: true,
                        propagateOutsideClick: true
                    });
                    this._processOverlayZIndex()
                }
            }, {
                key: "getOverlayPosition",
                value: function() {
                    var drawer = this.getDrawerInstance();
                    var panelPosition = drawer.getDrawerPosition();
                    var result = {};
                    if ("left" === panelPosition) {
                        result = {
                            my: "top left",
                            at: "top left"
                        }
                    }
                    if ("right" === panelPosition) {
                        var my = drawer.option("rtlEnabled") ? "top left" : "top right";
                        result = {
                            my: my,
                            at: "top right"
                        }
                    }
                    if ("top" === panelPosition || "bottom" === panelPosition) {
                        result = {
                            my: panelPosition,
                            at: panelPosition
                        }
                    }
                    result.of = drawer.getOverlayTarget();
                    return result
                }
            }, {
                key: "setPanelSize",
                value: function(keepMaxSize) {
                    var drawer = this.getDrawerInstance();
                    var overlay = drawer.getOverlay();
                    if (drawer.isHorizontalDirection()) {
                        overlay.option("height", "100%");
                        overlay.option("width", keepMaxSize ? drawer.getRealPanelWidth() : this._getPanelSize(drawer.option("opened")))
                    } else {
                        overlay.option("width", overlay.option("container").width());
                        overlay.option("height", drawer.getRealPanelHeight())
                    }
                }
            }, {
                key: "renderPosition",
                value: function(offset, animate) {
                    var _this2 = this;
                    _get(OverlapStrategy.prototype.__proto__ || Object.getPrototypeOf(OverlapStrategy.prototype), "renderPosition", this).call(this, offset, animate);
                    var drawer = this.getDrawerInstance();
                    this._initialPosition = drawer.getOverlay().$content().position();
                    var $content = (0, _renderer2.default)(drawer.viewContent());
                    var position = drawer.getDrawerPosition();
                    if (drawer.isHorizontalDirection()) {
                        $content.css("paddingLeft", drawer.option("minSize") * drawer._getPositionCorrection())
                    }
                    $content.css("transform", "inherit");
                    if ("slide" === drawer.option("revealMode")) {
                        var $panel = (0, _renderer2.default)(drawer.content());
                        var panelOffset = this._getPanelOffset(offset) * drawer._getPositionCorrection();
                        if (animate) {
                            var animationConfig = {
                                $element: $panel,
                                position: panelOffset,
                                duration: drawer.option("animationDuration"),
                                direction: position,
                                complete: function() {
                                    _this2._contentAnimationResolve();
                                    _this2._panelAnimationResolve()
                                }
                            };
                            _uiDrawerRendering.animation.moveTo(animationConfig)
                        } else {
                            if (drawer.isHorizontalDirection()) {
                                _translator2.default.move($panel, {
                                    left: panelOffset
                                })
                            } else {
                                _translator2.default.move($panel, {
                                    top: panelOffset
                                })
                            }
                        }
                    }
                    if ("expand" === drawer.option("revealMode")) {
                        var $panelOverlayContent = drawer.getOverlay().$content();
                        var size = this._getPanelSize(offset);
                        var marginTop = drawer.getRealPanelHeight() - size;
                        _translator2.default.move($panelOverlayContent, {
                            left: 0
                        });
                        var _animationConfig = {
                            $element: $panelOverlayContent,
                            size: size,
                            duration: drawer.option("animationDuration"),
                            direction: position,
                            marginTop: marginTop,
                            complete: function() {
                                _this2._contentAnimationResolve();
                                _this2._panelAnimationResolve()
                            }
                        };
                        if (animate) {
                            _uiDrawerRendering.animation.size(_animationConfig)
                        } else {
                            if (drawer.isHorizontalDirection()) {
                                (0, _renderer2.default)($panelOverlayContent).css("width", size)
                            } else {
                                (0, _renderer2.default)($panelOverlayContent).css("height", size);
                                if ("bottom" === position) {
                                    (0, _renderer2.default)($panelOverlayContent).css("marginTop", marginTop)
                                }
                            }
                        }
                    }
                }
            }, {
                key: "getPanelContent",
                value: function() {
                    return (0, _renderer2.default)(this.getDrawerInstance().getOverlay().content())
                }
            }, {
                key: "_processOverlayZIndex",
                value: function() {
                    var styles = window.getComputedStyle(this.getPanelContent().get(0));
                    var zIndex = styles.zIndex || 1;
                    this.getDrawerInstance().setZIndex(zIndex)
                }
            }]);
            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 $ = __webpack_require__( /*! ../core/renderer */ 2),
            domAdapter = __webpack_require__( /*! ../core/dom_adapter */ 13),
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6),
            window = windowUtils.getWindow(),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            commonUtils = __webpack_require__( /*! ../core/utils/common */ 4),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            domUtils = __webpack_require__( /*! ../core/utils/dom */ 12),
            TransitionExecutorModule = __webpack_require__( /*! ../animation/transition_executor/transition_executor */ 129),
            Widget = __webpack_require__( /*! ./widget/ui.widget */ 28),
            LoadIndicator = __webpack_require__( /*! ./load_indicator */ 89),
            isPromise = __webpack_require__( /*! ../core/utils/type */ 1).isPromise,
            deferredUtils = __webpack_require__( /*! ../core/utils/deferred */ 7),
            Deferred = deferredUtils.Deferred;
        var WIDGET_CLASS = "dx-widget",
            DEFER_RENDERING_CLASS = "dx-deferrendering",
            PENDING_RENDERING_CLASS = "dx-pending-rendering",
            PENDING_RENDERING_MANUAL_CLASS = "dx-pending-rendering-manual",
            PENDING_RENDERING_ACTIVE_CLASS = "dx-pending-rendering-active",
            VISIBLE_WHILE_PENDING_RENDERING_CLASS = "dx-visible-while-pending-rendering",
            INVISIBLE_WHILE_PENDING_RENDERING_CLASS = "dx-invisible-while-pending-rendering",
            LOADINDICATOR_CONTAINER_CLASS = "dx-loadindicator-container",
            DEFER_RENDERING_LOADINDICATOR_CONTAINER_CLASS = "dx-deferrendering-loadindicator-container",
            DEFER_DEFER_RENDERING_LOAD_INDICATOR = "dx-deferrendering-load-indicator",
            ANONYMOUS_TEMPLATE_NAME = "content",
            ACTIONS = ["onRendered", "onShown"];
        var DeferRendering = Widget.inherit({
            _getDefaultOptions: function() {
                return 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 TransitionExecutorModule.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,
                    $element = this.$element(),
                    renderWhen = this.option("renderWhen");
                var doRender = function() {
                    return that._renderDeferredContent()
                };
                if (isPromise(renderWhen)) {
                    deferredUtils.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 = {};
                each(ACTIONS, function(_, action) {
                    this._actions[action] = this._createActionByOption(action) || commonUtils.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,
                    $element = this.$element(),
                    result = new Deferred;
                $element.removeClass(PENDING_RENDERING_MANUAL_CLASS);
                $element.addClass(PENDING_RENDERING_ACTIVE_CLASS);
                this._abortRenderTask();
                this._renderTask = commonUtils.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 = element.getBoundingClientRect();
                return rect.bottom >= 0 && rect.right >= 0 && rect.top <= (window.innerHeight || domAdapter.getDocumentElement().clientHeight) && rect.left <= (window.innerWidth || domAdapter.getDocumentElement().clientWidth)
            },
            _animate: function() {
                var animatePromise, that = this,
                    $element = this.$element(),
                    animation = windowUtils.hasWindow() && this.option("animation"),
                    staggerItemSelector = this.option("staggerItemSelector");
                that.transitionExecutor.stop();
                if (animation) {
                    if (staggerItemSelector) {
                        $element.find(staggerItemSelector).each(function() {
                            if (that._isElementInViewport(this)) {
                                that.transitionExecutor.enter($(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(),
                    renderedArgs = {
                        element: $element
                    };
                var contentTemplate = this._getTemplate(this._getAnonymousTemplateName());
                if (contentTemplate) {
                    contentTemplate.render({
                        container: $element.empty(),
                        noModel: true
                    })
                }
                this._setRenderedState($element);
                eventsEngine.trigger($element, "dxcontentrendered");
                this._actions.onRendered([renderedArgs]);
                this._isRendered = true;
                return this._animate()
            },
            _setLoadingState: function() {
                var $element = this.$element(),
                    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 LoadIndicator($("<div>"), {
                    visible: true
                }).$element().addClass(DEFER_DEFER_RENDERING_LOAD_INDICATOR);
                $("<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);
                domUtils.triggerShownEvent($element.children())
            },
            _optionChanged: function(args) {
                var value = args.value,
                    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()
            }
        });
        registerComponent("dxDeferRendering", DeferRendering);
        module.exports = DeferRendering
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/ui/drop_down_box.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var DropDownEditor = __webpack_require__( /*! ./drop_down_editor/ui.drop_down_editor */ 157),
            DataExpressionMixin = __webpack_require__( /*! ./editor/ui.data_expression */ 214),
            commonUtils = __webpack_require__( /*! ../core/utils/common */ 4),
            window = __webpack_require__( /*! ../core/utils/window */ 6).getWindow(),
            map = __webpack_require__( /*! ../core/utils/iterator */ 3).map,
            selectors = __webpack_require__( /*! ./widget/selectors */ 58),
            KeyboardProcessor = __webpack_require__( /*! ./widget/ui.keyboard_processor */ 168),
            deferredUtils = __webpack_require__( /*! ../core/utils/deferred */ 7),
            when = deferredUtils.when,
            Deferred = deferredUtils.Deferred,
            $ = __webpack_require__( /*! ../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            grep = __webpack_require__( /*! ../core/utils/common */ 4).grep,
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8);
        var DROP_DOWN_BOX_CLASS = "dx-dropdownbox",
            ANONYMOUS_TEMPLATE_NAME = "content";
        var DropDownBox = DropDownEditor.inherit({
            _supportedKeys: function() {
                return extend({}, this.callBase(), {
                    tab: function(e) {
                        if (!this.option("opened")) {
                            return
                        }
                        var $tabbableElements = this._getTabbableElements(),
                            $focusableElement = e.shiftKey ? $tabbableElements.last() : $tabbableElements.first();
                        $focusableElement && eventsEngine.trigger($focusableElement, "focus");
                        e.preventDefault()
                    }
                })
            },
            _getTabbableElements: function() {
                return this._getElements().filter(selectors.tabbable)
            },
            _getElements: function() {
                return $(this.content()).find("*")
            },
            _getAnonymousTemplateName: function() {
                return ANONYMOUS_TEMPLATE_NAME
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    acceptCustomValue: false,
                    contentTemplate: null,
                    dropDownOptions: {},
                    openOnFieldClick: true,
                    valueFormat: function(value) {
                        return Array.isArray(value) ? value.join(", ") : value
                    }
                })
            },
            _initMarkup: function() {
                this._initDataExpressions();
                this._renderSubmitElement();
                this.$element().addClass(DROP_DOWN_BOX_CLASS);
                this.callBase()
            },
            _renderSubmitElement: function() {
                this._$submitElement = $("<input>").attr("type", "hidden").appendTo(this.$element())
            },
            _renderValue: function() {
                this._setSubmitValue();
                this.callBase()
            },
            _setSubmitValue: function() {
                var value = this.option("value"),
                    submitValue = "this" === this.option("valueExpr") ? this._displayGetter(value) : value;
                this._$submitElement.val(submitValue)
            },
            _getSubmitElement: function() {
                return this._$submitElement
            },
            _renderInputValue: function() {
                var callBase = this.callBase.bind(this),
                    values = [];
                if (!this._dataSource) {
                    callBase(values);
                    return
                }
                var currentValue = this._getCurrentValue(),
                    keys = commonUtils.ensureDefined(currentValue, []);
                keys = Array.isArray(keys) ? keys : [keys];
                var itemLoadDeferreds = map(keys, function(key) {
                    return this._loadItem(key).always(function(item) {
                        var displayValue = this._displayGetter(item);
                        values.push(commonUtils.ensureDefined(displayValue, key))
                    }.bind(this))
                }.bind(this));
                when.apply(this, itemLoadDeferreds).always(function() {
                    this.option("displayValue", values);
                    callBase(values.length && values)
                }.bind(this)).fail(callBase);
                return itemLoadDeferreds
            },
            _loadItem: function(value) {
                var deferred = new Deferred,
                    that = this;
                var selectedItem = 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" !== e.key) {
                    return
                }
                var $firstTabbable = this._getTabbableElements().first().get(0),
                    $lastTabbable = this._getTabbableElements().last().get(0),
                    $target = e.originalEvent.target,
                    moveBackward = !!($target === $firstTabbable && e.shift),
                    moveForward = !!($target === $lastTabbable && !e.shift);
                if (moveBackward || moveForward) {
                    this.close();
                    eventsEngine.trigger(this._input(), "focus");
                    if (moveBackward) {
                        e.originalEvent.preventDefault()
                    }
                }
            },
            _renderPopup: function(e) {
                this.callBase();
                this._options.dropDownOptions = extend({}, this._popup.option());
                this._popup.on("optionChanged", function(e) {
                    this.option("dropDownOptions." + e.fullName, e.value)
                }.bind(this));
                if (this.option("focusStateEnabled")) {
                    this._popup._keyboardProcessor.push(new KeyboardProcessor({
                        element: this.content(),
                        handler: this._popupElementTabHandler,
                        context: this
                    }))
                }
            },
            _popupConfig: function() {
                return extend(this.callBase(), {
                    width: function() {
                        return this.$element().outerWidth()
                    }.bind(this),
                    height: "auto",
                    tabIndex: -1,
                    dragEnabled: false,
                    focusStateEnabled: this.option("focusStateEnabled"),
                    maxHeight: this._getMaxHeight.bind(this)
                }, this.option("dropDownOptions"))
            },
            _getMaxHeight: function() {
                var $element = this.$element(),
                    offsetTop = $element.offset().top - $(window).scrollTop(),
                    offsetBottom = $(window).innerHeight() - offsetTop - $element.outerHeight(),
                    maxHeight = .9 * Math.max(offsetTop, offsetBottom);
                return maxHeight
            },
            _popupShownHandler: function() {
                this.callBase();
                var $firstElement = this._getTabbableElements().first();
                eventsEngine.trigger($firstElement, "focus")
            },
            _popupOptionChanged: function(args) {
                var options = {};
                if (args.name === args.fullName) {
                    options = args.value
                } else {
                    var option = args.fullName.split(".").pop();
                    options[option] = args.value
                }
                this._setPopupOption(options);
                if (Object.keys(options).indexOf("width") !== -1 && void 0 === options.width) {
                    this._updatePopupWidth()
                }
            },
            _setCollectionWidgetOption: commonUtils.noop,
            _optionChanged: function(args) {
                this._dataExpressionOptionChanged(args);
                switch (args.name) {
                    case "width":
                        this.callBase(args);
                        this._updatePopupWidth();
                        break;
                    case "dropDownOptions":
                        this._popupOptionChanged(args);
                        break;
                    case "dataSource":
                        this._renderInputValue();
                        break;
                    case "displayValue":
                        this.option("text", args.value);
                        break;
                    case "displayExpr":
                        this._renderValue();
                        break;
                    default:
                        this.callBase(args)
                }
            }
        }).include(DataExpressionMixin);
        registerComponent("dxDropDownBox", DropDownBox);
        module.exports = DropDownBox
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/ui/file_uploader.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            Class = __webpack_require__( /*! ../core/class */ 10),
            Guid = __webpack_require__( /*! ../core/guid */ 48),
            window = __webpack_require__( /*! ../core/utils/window */ 6).getWindow(),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            Callbacks = __webpack_require__( /*! ../core/utils/callbacks */ 21),
            isDefined = __webpack_require__( /*! ../core/utils/type */ 1).isDefined,
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            inArray = __webpack_require__( /*! ../core/utils/array */ 11).inArray,
            ajax = __webpack_require__( /*! ../core/utils/ajax */ 76),
            Editor = __webpack_require__( /*! ./editor/editor */ 45),
            Button = __webpack_require__( /*! ./button */ 36),
            ProgressBar = __webpack_require__( /*! ./progress_bar */ 305),
            browser = __webpack_require__( /*! ../core/utils/browser */ 38),
            devices = __webpack_require__( /*! ../core/devices */ 16),
            eventUtils = __webpack_require__( /*! ../events/utils */ 9),
            clickEvent = __webpack_require__( /*! ../events/click */ 17),
            messageLocalization = __webpack_require__( /*! ../localization/message */ 14),
            themes = __webpack_require__( /*! ./themes */ 20);
        var FILEUPLOADER_CLASS = "dx-fileuploader",
            FILEUPLOADER_EMPTY_CLASS = "dx-fileuploader-empty",
            FILEUPLOADER_SHOW_FILE_LIST_CLASS = "dx-fileuploader-show-file-list",
            FILEUPLOADER_DRAGOVER_CLASS = "dx-fileuploader-dragover",
            FILEUPLOADER_WRAPPER_CLASS = "dx-fileuploader-wrapper",
            FILEUPLOADER_CONTAINER_CLASS = "dx-fileuploader-container",
            FILEUPLOADER_CONTENT_CLASS = "dx-fileuploader-content",
            FILEUPLOADER_INPUT_WRAPPER_CLASS = "dx-fileuploader-input-wrapper",
            FILEUPLOADER_INPUT_CONTAINER_CLASS = "dx-fileuploader-input-container",
            FILEUPLOADER_INPUT_LABEL_CLASS = "dx-fileuploader-input-label",
            FILEUPLOADER_INPUT_CLASS = "dx-fileuploader-input",
            FILEUPLOADER_FILES_CONTAINER_CLASS = "dx-fileuploader-files-container",
            FILEUPLOADER_FILE_CONTAINER_CLASS = "dx-fileuploader-file-container",
            FILEUPLOADER_FILE_INFO_CLASS = "dx-fileuploader-file-info",
            FILEUPLOADER_FILE_STATUS_MESSAGE_CLASS = "dx-fileuploader-file-status-message",
            FILEUPLOADER_FILE_CLASS = "dx-fileuploader-file",
            FILEUPLOADER_FILE_NAME_CLASS = "dx-fileuploader-file-name",
            FILEUPLOADER_FILE_SIZE_CLASS = "dx-fileuploader-file-size",
            FILEUPLOADER_BUTTON_CLASS = "dx-fileuploader-button",
            FILEUPLOADER_BUTTON_CONTAINER_CLASS = "dx-fileuploader-button-container",
            FILEUPLOADER_CANCEL_BUTTON_CLASS = "dx-fileuploader-cancel-button",
            FILEUPLOADER_UPLOAD_BUTTON_CLASS = "dx-fileuploader-upload-button",
            FILEUPLOADER_INVALID_CLASS = "dx-fileuploader-invalid",
            FILEUPLOADER_AFTER_LOAD_DELAY = 400,
            FILEUPLOADER_CHUNK_META_DATA_NAME = "chunkMetadata";
        var renderFileUploaderInput = function() {
            return $("<input>").attr("type", "file")
        };
        var isFormDataSupported = function() {
            return !!window.FormData
        };
        var FileUploader = Editor.inherit({
            _uploadStrategy: null,
            _supportedKeys: function() {
                var click = function(e) {
                    e.preventDefault();
                    var $selectButton = this._selectButton.$element();
                    eventsEngine.trigger($selectButton, clickEvent.name)
                };
                return extend(this.callBase(), {
                    space: click,
                    enter: click
                })
            },
            _setOptionsByReference: function() {
                this.callBase();
                extend(this._optionsByReference, {
                    value: true
                })
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    chunkSize: 0,
                    value: [],
                    selectButtonText: messageLocalization.format("dxFileUploader-selectFile"),
                    uploadButtonText: messageLocalization.format("dxFileUploader-upload"),
                    labelText: messageLocalization.format("dxFileUploader-dropFile"),
                    name: "files[]",
                    multiple: false,
                    accept: "",
                    uploadUrl: "/",
                    allowCanceling: true,
                    showFileList: true,
                    progress: 0,
                    readyToUploadMessage: messageLocalization.format("dxFileUploader-readyToUpload"),
                    uploadedMessage: messageLocalization.format("dxFileUploader-uploaded"),
                    uploadFailedMessage: messageLocalization.format("dxFileUploader-uploadFailedMessage"),
                    uploadMode: "instantly",
                    uploadMethod: "POST",
                    uploadHeaders: {},
                    onUploadStarted: null,
                    onUploaded: null,
                    onProgress: null,
                    onUploadError: null,
                    onUploadAborted: null,
                    allowedFileExtensions: [],
                    maxFileSize: 0,
                    minFileSize: 0,
                    invalidFileExtensionMessage: messageLocalization.format("dxFileUploader-invalidFileExtension"),
                    invalidMaxFileSizeMessage: messageLocalization.format("dxFileUploader-invalidMaxFileSize"),
                    invalidMinFileSizeMessage: messageLocalization.format("dxFileUploader-invalidMinFileSize"),
                    extendSelection: true,
                    validationMessageMode: "always",
                    validationMessageOffset: {
                        h: 0,
                        v: 0
                    },
                    useNativeInputClick: false,
                    useDragOver: true,
                    nativeDropSupported: true,
                    _uploadButtonType: "normal"
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: function() {
                        return "desktop" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }, {
                    device: [{
                        platform: "android"
                    }, {
                        platform: "win"
                    }],
                    options: {
                        validationMessageOffset: {
                            v: 0
                        }
                    }
                }, {
                    device: function() {
                        return "generic" !== devices.real().platform
                    },
                    options: {
                        useDragOver: false
                    }
                }, {
                    device: function() {
                        return !isFormDataSupported()
                    },
                    options: {
                        uploadMode: "useForm"
                    }
                }, {
                    device: function() {
                        return browser.msie || "generic" !== devices.real().platform
                    },
                    options: {
                        nativeDropSupported: false
                    }
                }, {
                    device: function() {
                        return themes.isMaterial()
                    },
                    options: {
                        _uploadButtonType: "default"
                    }
                }])
            },
            _init: function() {
                this.callBase.apply(this, arguments);
                this._initFileInput();
                this._initLabel();
                this._createFiles();
                this._createUploadStartedAction();
                this._createUploadedAction();
                this._createProgressAction();
                this._createUploadErrorAction();
                this._createUploadAbortedAction();
                this._setUploadStrategy()
            },
            _setUploadStrategy: function() {
                this._uploadStrategy = this.option("chunkSize") > 0 ? new ChunksFileUploadStrategy(this) : new WholeFileUploadStrategy(this)
            },
            _initFileInput: function() {
                this._isCustomClickEvent = false;
                if (!this._$fileInput) {
                    this._$fileInput = renderFileUploaderInput();
                    eventsEngine.on(this._$fileInput, "change", this._inputChangeHandler.bind(this));
                    eventsEngine.on(this._$fileInput, "click", function(e) {
                        e.stopPropagation();
                        return this.option("useNativeInputClick") || this._isCustomClickEvent
                    }.bind(this))
                }
                this._$fileInput.prop({
                    multiple: this.option("multiple"),
                    accept: this.option("accept"),
                    tabIndex: -1
                })
            },
            _inputChangeHandler: function() {
                if (this._doPreventInputChange) {
                    return
                }
                var fileName = this._$fileInput.val().replace(/^.*\\/, ""),
                    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()
                }
            },
            _shouldFileListBeExtended: function() {
                return "useForm" !== this.option("uploadMode") && this.option("extendSelection") && this.option("multiple")
            },
            _removeDuplicates: 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
            },
            _isFileInArray: 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
            },
            _changeValue: 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))
            },
            _getFiles: function(fileList) {
                var values = [];
                each(fileList, function(_, value) {
                    values.push(value)
                });
                return values
            },
            _initLabel: function() {
                if (!this._$inputLabel) {
                    this._$inputLabel = $("<div>")
                }
                this._$inputLabel.text(this.option("labelText"))
            },
            _focusTarget: function() {
                return this.$element().find("." + FILEUPLOADER_BUTTON_CLASS)
            },
            _getSubmitElement: function() {
                return this._$fileInput
            },
            _initMarkup: function() {
                this.callBase();
                this.$element().addClass(FILEUPLOADER_CLASS);
                this._renderWrapper();
                this._renderInputWrapper();
                this._renderSelectButton();
                this._renderInputContainer();
                this._renderUploadButton();
                this._preventRecreatingFiles = true
            },
            _render: function() {
                this._preventRecreatingFiles = false;
                this._renderDragEvents();
                this._renderFiles();
                this.callBase()
            },
            _createFileProgressBar: function(file) {
                file.progressBar = this._createProgressBar(file.value.size);
                file.progressBar.$element().appendTo(file.$file);
                this._initStatusMessage(file);
                this._initCancelButton(file)
            },
            _setStatusMessage: function(file, key) {
                setTimeout(function() {
                    if (this.option("showFileList")) {
                        file.$statusMessage.text(this.option(key));
                        file.$statusMessage.css("display", "");
                        file.progressBar.$element().remove()
                    }
                }.bind(this), FILEUPLOADER_AFTER_LOAD_DELAY)
            },
            _createFiles: function() {
                var value = this.option("value");
                if (!this._files || 0 === value.length || !this._shouldFileListBeExtended()) {
                    this._files = []
                }
                each(value.slice(this._files.length), function(_, value) {
                    var file = this._createFile(value);
                    this._validateFile(file);
                    this._files.push(file)
                }.bind(this))
            },
            _validateFile: function(file) {
                file.isValidFileExtension = this._validateFileExtension(file);
                file.isValidMinSize = this._validateMinFileSize(file);
                file.isValidMaxSize = this._validateMaxFileSize(file)
            },
            _validateFileExtension: function(file) {
                var allowedExtensions = this.option("allowedFileExtensions"),
                    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
            },
            _validateMaxFileSize: function(file) {
                var fileSize = file.value.size,
                    maxFileSize = this.option("maxFileSize");
                return maxFileSize > 0 ? fileSize <= maxFileSize : true
            },
            _validateMinFileSize: function(file) {
                var fileSize = file.value.size,
                    minFileSize = this.option("minFileSize");
                return minFileSize > 0 ? fileSize >= minFileSize : true
            },
            _createUploadStartedAction: function() {
                this._uploadStartedAction = this._createActionByOption("onUploadStarted")
            },
            _createUploadedAction: function() {
                this._uploadedAction = this._createActionByOption("onUploaded")
            },
            _createProgressAction: function() {
                this._progressAction = this._createActionByOption("onProgress")
            },
            _createUploadAbortedAction: function() {
                this._uploadAbortedAction = this._createActionByOption("onUploadAborted")
            },
            _createUploadErrorAction: function() {
                this._uploadErrorAction = this._createActionByOption("onUploadError")
            },
            _createFile: function(value) {
                return {
                    value: value,
                    loadedSize: 0,
                    onProgress: Callbacks(),
                    onAbort: Callbacks(),
                    onLoad: Callbacks(),
                    onError: Callbacks(),
                    onLoadStart: Callbacks(),
                    isValidFileExtension: true,
                    isValidMaxSize: true,
                    isValidMinSize: true,
                    isValid: function() {
                        return this.isValidFileExtension && this.isValidMaxSize && this.isValidMinSize
                    }
                }
            },
            _renderFiles: function() {
                var value = this.option("value");
                if (!this._$filesContainer) {
                    this._$filesContainer = $("<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) {
                    var that = this;
                    each(this._files, function(_, file) {
                        if (!file.$file) {
                            that._renderFile(file)
                        }
                    })
                }
                this.$element().toggleClass(FILEUPLOADER_SHOW_FILE_LIST_CLASS, showFileList);
                this._toggleFileUploaderEmptyClassName();
                this._updateFileNameMaxWidth();
                this._$validationMessage && this._$validationMessage.dxOverlay("instance").repaint()
            },
            _renderFile: function(file) {
                var value = file.value;
                var $fileContainer = $("<div>").addClass(FILEUPLOADER_FILE_CONTAINER_CLASS).appendTo(this._$filesContainer);
                this._renderFileButtons(file, $fileContainer);
                file.$file = $("<div>").addClass(FILEUPLOADER_FILE_CLASS).appendTo($fileContainer);
                var $fileInfo = $("<div>").addClass(FILEUPLOADER_FILE_INFO_CLASS).appendTo(file.$file);
                file.$statusMessage = $("<div>").addClass(FILEUPLOADER_FILE_STATUS_MESSAGE_CLASS).appendTo(file.$file);
                $("<div>").addClass(FILEUPLOADER_FILE_NAME_CLASS).text(value.name).appendTo($fileInfo);
                if (isDefined(value.size)) {
                    $("<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)
                }
            },
            _createValidationElement: function(key) {
                return $("<span>").text(this.option(key))
            },
            _updateFileNameMaxWidth: function() {
                var cancelButtonsCount = this.option("allowCanceling") && "useForm" !== this.option("uploadMode") ? 1 : 0,
                    uploadButtonsCount = "useButtons" === this.option("uploadMode") ? 1 : 0,
                    filesContainerWidth = this._$filesContainer.find("." + FILEUPLOADER_FILE_CONTAINER_CLASS).first().width() || this._$filesContainer.width(),
                    $buttonContainer = this._$filesContainer.find("." + FILEUPLOADER_BUTTON_CONTAINER_CLASS).eq(0),
                    buttonsWidth = $buttonContainer.width() * (cancelButtonsCount + uploadButtonsCount),
                    $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)
            },
            _renderFileButtons: function(file, $container) {
                var $cancelButton = this._getCancelButton(file);
                $cancelButton && $container.append($cancelButton);
                var $uploadButton = this._getUploadButton(file);
                $uploadButton && $container.append($uploadButton)
            },
            _getCancelButton: function(file) {
                if ("useForm" === this.option("uploadMode")) {
                    return null
                }
                file.cancelButton = this._createComponent($("<div>").addClass(FILEUPLOADER_BUTTON_CLASS + " " + FILEUPLOADER_CANCEL_BUTTON_CLASS), Button, {
                    onClick: function() {
                        this._removeFile(file)
                    }.bind(this),
                    icon: "close",
                    visible: this.option("allowCanceling"),
                    integrationOptions: {}
                });
                return $("<div>").addClass(FILEUPLOADER_BUTTON_CONTAINER_CLASS).append(file.cancelButton.$element())
            },
            _getUploadButton: function(file) {
                if (!file.isValid() || "useButtons" !== this.option("uploadMode")) {
                    return null
                }
                file.uploadButton = this._createComponent($("<div>").addClass(FILEUPLOADER_BUTTON_CLASS + " " + FILEUPLOADER_UPLOAD_BUTTON_CLASS), Button, {
                    onClick: function() {
                        this._uploadFile(file)
                    }.bind(this),
                    icon: "upload"
                });
                file.onLoadStart.add(function() {
                    file.uploadButton.$element().remove()
                }.bind(this));
                return $("<div>").addClass(FILEUPLOADER_BUTTON_CONTAINER_CLASS).append(file.uploadButton.$element())
            },
            _removeFile: function(file) {
                file.$file.parent().remove();
                this._files.splice(inArray(file, this._files), 1);
                var value = this.option("value").slice();
                value.splice(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
            },
            _toggleFileUploaderEmptyClassName: function() {
                this.$element().toggleClass(FILEUPLOADER_EMPTY_CLASS, !this._files.length || this._hasInvalidFile(this._files))
            },
            _hasInvalidFile: function(files) {
                for (var i = 0; i < files.length; i++) {
                    if (!files[i].isValid()) {
                        return true
                    }
                }
                return false
            },
            _getFileSize: function(size) {
                var i = 0,
                    labels = [messageLocalization.format("dxFileUploader-bytes"), messageLocalization.format("dxFileUploader-kb"), messageLocalization.format("dxFileUploader-Mb"), messageLocalization.format("dxFileUploader-Gb")],
                    count = labels.length - 1;
                while (i < count && size >= 1024) {
                    size /= 1024;
                    i++
                }
                return Math.round(size) + " " + labels[i]
            },
            _renderSelectButton: function() {
                var $button = $("<div>").addClass(FILEUPLOADER_BUTTON_CLASS).appendTo(this._$inputWrapper);
                this._selectButton = this._createComponent($button, Button, {
                    text: this.option("selectButtonText"),
                    focusStateEnabled: false,
                    integrationOptions: {}
                });
                if ("desktop" === devices.real().deviceType) {
                    this._selectButton.option("onClick", this._selectButtonClickHandler.bind(this))
                } else {
                    eventsEngine.off($button, "click");
                    eventsEngine.on($button, "click", this._selectButtonClickHandler.bind(this))
                }
            },
            _selectButtonClickHandler: function() {
                var that = this;
                if (that.option("useNativeInputClick")) {
                    return
                }
                if (that.option("disabled")) {
                    return false
                }
                that._isCustomClickEvent = true;
                eventsEngine.trigger(that._$fileInput, "click");
                that._isCustomClickEvent = false
            },
            _renderUploadButton: function() {
                if ("useButtons" !== this.option("uploadMode")) {
                    return
                }
                var $uploadButton = $("<div>").addClass(FILEUPLOADER_BUTTON_CLASS).addClass(FILEUPLOADER_UPLOAD_BUTTON_CLASS).appendTo(this._$content);
                this._uploadButton = this._createComponent($uploadButton, Button, {
                    text: this.option("uploadButtonText"),
                    onClick: this._uploadButtonClickHandler.bind(this),
                    type: this.option("_uploadButtonType"),
                    integrationOptions: {}
                })
            },
            _uploadButtonClickHandler: function() {
                this._uploadFiles()
            },
            _shouldDragOverBeRendered: function() {
                return "useForm" !== this.option("uploadMode") || this.option("nativeDropSupported")
            },
            _renderInputContainer: function() {
                this._$inputContainer = $("<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();
                this._$inputLabel.addClass(FILEUPLOADER_INPUT_LABEL_CLASS).appendTo(this._$inputContainer)
            },
            _renderInput: function() {
                if (this.option("useNativeInputClick")) {
                    this._selectButton.option("template", this._selectButtonInputTemplate.bind(this))
                } else {
                    this._$fileInput.appendTo(this._$inputContainer);
                    this._selectButton.option("template", "content")
                }
            },
            _selectButtonInputTemplate: function(data, content) {
                var $content = $(content);
                var $text = $("<span>").addClass("dx-button-text").text(data.text);
                $content.append($text).append(this._$fileInput);
                return $content
            },
            _renderInputWrapper: function() {
                this._$inputWrapper = $("<div>").addClass(FILEUPLOADER_INPUT_WRAPPER_CLASS).appendTo(this._$content)
            },
            _renderDragEvents: function() {
                eventsEngine.off(this._$inputWrapper, "." + this.NAME);
                if (!this._shouldDragOverBeRendered()) {
                    return
                }
                this._dragEventsTargets = [];
                eventsEngine.on(this._$inputWrapper, eventUtils.addNamespace("dragenter", this.NAME), this._dragEnterHandler.bind(this));
                eventsEngine.on(this._$inputWrapper, eventUtils.addNamespace("dragover", this.NAME), this._dragOverHandler.bind(this));
                eventsEngine.on(this._$inputWrapper, eventUtils.addNamespace("dragleave", this.NAME), this._dragLeaveHandler.bind(this));
                eventsEngine.on(this._$inputWrapper, eventUtils.addNamespace("drop", this.NAME), this._dropHandler.bind(this))
            },
            _useInputForDrop: function() {
                return this.option("nativeDropSupported") && "useForm" === this.option("uploadMode")
            },
            _dragEnterHandler: function(e) {
                if (this.option("disabled")) {
                    return false
                }
                if (!this._useInputForDrop()) {
                    e.preventDefault()
                }
                this._updateEventTargets(e);
                this.$element().addClass(FILEUPLOADER_DRAGOVER_CLASS)
            },
            _dragOverHandler: function(e) {
                if (!this._useInputForDrop()) {
                    e.preventDefault()
                }
            },
            _dragLeaveHandler: function(e) {
                if (!this._useInputForDrop()) {
                    e.preventDefault()
                }
                this._updateEventTargets(e);
                if (!this._dragEventsTargets.length) {
                    this.$element().removeClass(FILEUPLOADER_DRAGOVER_CLASS)
                }
            },
            _updateEventTargets: function(e) {
                var targetIndex = this._dragEventsTargets.indexOf(e.target),
                    isTargetExists = targetIndex !== -1;
                if ("dragenter" === e.type) {
                    !isTargetExists && this._dragEventsTargets.push(e.target)
                } else {
                    isTargetExists && this._dragEventsTargets.splice(targetIndex, 1)
                }
            },
            _dropHandler: function(e) {
                this._dragEventsTargets = [];
                this.$element().removeClass(FILEUPLOADER_DRAGOVER_CLASS);
                if (this._useInputForDrop()) {
                    return
                }
                e.preventDefault();
                var fileList = e.originalEvent.dataTransfer.files,
                    files = this._getFiles(fileList);
                if (!this.option("multiple") && files.length > 1) {
                    return
                }
                this._changeValue(this._filterFiles(files));
                if ("instantly" === this.option("uploadMode")) {
                    this._uploadFiles()
                }
            },
            _filterFiles: function(files) {
                if (!files.length) {
                    return files
                }
                var accept = this.option("accept");
                if (!accept.length) {
                    return files
                }
                var result = [],
                    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
            },
            _getAllowedFileTypes: function(acceptSting) {
                if (!acceptSting.length) {
                    return []
                }
                return acceptSting.split(",").map(function(item) {
                    return item.trim()
                })
            },
            _isFileTypeAllowed: 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
            },
            _renderWrapper: function() {
                var $wrapper = $("<div>").addClass(FILEUPLOADER_WRAPPER_CLASS).appendTo(this.$element());
                var $container = $("<div>").addClass(FILEUPLOADER_CONTAINER_CLASS).appendTo($wrapper);
                this._$content = $("<div>").addClass(FILEUPLOADER_CONTENT_CLASS).appendTo($container)
            },
            _clean: function() {
                this._$fileInput.detach();
                delete this._$filesContainer;
                this.callBase.apply(this, arguments)
            },
            _uploadFiles: function() {
                if (isFormDataSupported()) {
                    each(this._files, function(_, file) {
                        this._uploadFile(file)
                    }.bind(this))
                }
            },
            _uploadFile: function(file) {
                this._uploadStrategy.upload(file)
            },
            _updateProgressBar: 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
                })
            },
            _updateTotalProgress: function(totalFilesSize, totalLoadedFilesSize) {
                var progress = totalFilesSize ? Math.round(totalLoadedFilesSize / totalFilesSize * 100) : 0;
                this.option("progress", progress);
                this._setLoadedSize(totalLoadedFilesSize)
            },
            _initStatusMessage: function(file) {
                file.$statusMessage.css("display", "none")
            },
            _initCancelButton: function(file) {
                var cancelClickHandler = function() {
                    file.request.abort();
                    this._removeFile(file)
                }.bind(this);
                file.cancelButton.option("onClick", cancelClickHandler);
                var hideCancelButton = function() {
                    setTimeout(function() {
                        file.cancelButton.option({
                            visible: false
                        })
                    }, FILEUPLOADER_AFTER_LOAD_DELAY)
                };
                file.onLoad.add(hideCancelButton);
                file.onError.add(hideCancelButton)
            },
            _createProgressBar: function(fileSize) {
                return this._createComponent($("<div>"), ProgressBar, {
                    value: void 0,
                    min: 0,
                    max: fileSize,
                    statusFormat: function(ratio) {
                        return Math.round(100 * ratio) + "%"
                    },
                    showStatus: false,
                    statusPosition: "right"
                })
            },
            _getTotalFilesSize: function() {
                if (!this._totalFilesSize) {
                    this._totalFilesSize = 0;
                    each(this._files, function(_, file) {
                        this._totalFilesSize += file.value.size
                    }.bind(this))
                }
                return this._totalFilesSize
            },
            _getTotalLoadedFilesSize: function() {
                if (!this._totalLoadedFilesSize) {
                    this._totalLoadedFilesSize = 0;
                    each(this._files, function(_, file) {
                        this._totalLoadedFilesSize += file.loadedSize
                    }.bind(this))
                }
                return this._totalLoadedFilesSize
            },
            _setLoadedSize: function(value) {
                this._totalLoadedFilesSize = value
            },
            _recalculateProgress: function() {
                this._totalFilesSize = 0;
                this._totalLoadedFilesSize = 0;
                this._updateTotalProgress(this._getTotalFilesSize(), this._getTotalLoadedFilesSize())
            },
            _getValidationMessageTarget: function() {
                return this._$inputWrapper
            },
            _optionChanged: function(args) {
                var value = args.value;
                switch (args.name) {
                    case "height":
                    case "width":
                        this._updateFileNameMaxWidth();
                        this.callBase(args);
                        break;
                    case "value":
                        !value.length && this._$fileInput.val("");
                        if (!this._preventRecreatingFiles) {
                            this._createFiles();
                            this._renderFiles()
                        }
                        this._recalculateProgress();
                        this.callBase(args);
                        break;
                    case "name":
                        this._initFileInput();
                        this.callBase(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 "chunkSize":
                        this._setUploadStrategy();
                        break;
                    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;
                    default:
                        this.callBase(args)
                }
            },
            reset: function() {
                this.option("value", [])
            }
        });
        FileUploader.__internals = {
            changeFileInputRenderer: function(renderer) {
                renderFileUploaderInput = renderer
            },
            resetFileInputTag: function() {
                renderFileUploaderInput = function() {
                    return $("<input>").attr("type", "file")
                }
            }
        };
        var FileBlobReader = Class.inherit({
            ctor: function(file, chunkSize) {
                this.file = file;
                this.chunkSize = chunkSize;
                this.index = 0
            },
            read: 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
            },
            createBlobResult: function(file, index, chunkSize) {
                var currentPosition = index * chunkSize;
                return {
                    blob: this.sliceFile(file, currentPosition, chunkSize),
                    index: index,
                    isCompleted: currentPosition + chunkSize >= file.size
                }
            },
            sliceFile: function(file, startPos, length) {
                if (file.slice) {
                    return file.slice(startPos, startPos + length)
                }
                if (file.webkitSlice) {
                    return file.webkitSlice(startPos, startPos + length)
                }
                return null
            }
        });
        var FileUploadStrategyBase = Class.inherit({
            ctor: function(fileUploader) {
                this.fileUploader = fileUploader
            },
            upload: function(file) {
                if (file.isValid() && !file.uploadStarted) {
                    this._prepareFileBeforeUpload(file);
                    this._uploadCore(file)
                }
            },
            _uploadCore: function(file) {},
            _prepareFileBeforeUpload: 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))
            },
            _isStatusError: function(status) {
                return 400 <= status && status < 500 || 500 <= status && status < 600
            },
            _onUploadStarted: function(file, e) {
                file.uploadStarted = true;
                this.fileUploader._uploadStartedAction({
                    file: file.value,
                    event: e,
                    request: file.request
                })
            },
            _onAbortHandler: function(file, e) {
                this.fileUploader._uploadAbortedAction({
                    file: file.value,
                    event: e,
                    request: file.request
                })
            },
            _onErrorHandler: function(file, e) {
                this.fileUploader._setStatusMessage(file, "uploadFailedMessage");
                this.fileUploader._uploadErrorAction({
                    file: file.value,
                    event: e,
                    request: file.request
                })
            },
            _onLoadedHandler: function(file, e) {
                this.fileUploader._setStatusMessage(file, "uploadedMessage");
                this.fileUploader._uploadedAction({
                    file: file.value,
                    event: e,
                    request: file.request
                })
            },
            _onProgressHandler: 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))
                }
            },
            _getLoadedData: function(loaded, total, currentSegmentSize, event) {
                return {
                    loaded: loaded,
                    total: total,
                    currentSegmentSize: currentSegmentSize
                }
            }
        });
        var ChunksFileUploadStrategy = FileUploadStrategyBase.inherit({
            ctor: function(fileUploader) {
                this.callBase(fileUploader);
                this.chunkSize = this.fileUploader.option("chunkSize")
            },
            _uploadCore: function(file) {
                var realFile = file.value;
                this._sendChunk(file, {
                    name: realFile.name,
                    loadedBytes: 0,
                    type: realFile.type,
                    blobReader: new FileBlobReader(realFile, this.chunkSize),
                    guid: new Guid,
                    fileSize: realFile.size,
                    count: Math.ceil(realFile.size / this.chunkSize)
                })
            },
            _sendChunk: function(file, chunksData) {
                var chunk = chunksData.blobReader.read();
                if (chunk) {
                    chunksData.loadedBytes += chunk.blob.size;
                    ajax.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() {
                                if (!file.isStartLoad) {
                                    file.isStartLoad = true;
                                    file.onLoadStart.fire()
                                }
                            },
                            onabort: function() {
                                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
                        })
                    }).done(function() {
                        file.onProgress.fire({
                            loaded: chunksData.loadedBytes,
                            total: file.value.size
                        });
                        if (chunk.isCompleted) {
                            file.onLoad.fire()
                        }
                        this._sendChunk(file, chunksData)
                    }.bind(this)).fail(function(e) {
                        if (this._isStatusError(e.status)) {
                            file._isError = true;
                            file.onError.fire()
                        }
                    }.bind(this))
                }
            },
            _createFormData: 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
            },
            _getEvent: function(e) {
                return null
            }
        });
        var WholeFileUploadStrategy = FileUploadStrategyBase.inherit({
            _uploadCore: function(file) {
                file.loadedSize = 0;
                ajax.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) {
                            if (file._isError) {
                                return
                            }
                            file._isProgressStarted = true;
                            file.onProgress.fire(e)
                        },
                        onloadstart: function() {
                            file.onLoadStart.fire()
                        },
                        onabort: function() {
                            file.onAbort.fire()
                        }
                    },
                    data: this._createFormData(this.fileUploader.option("name"), file.value)
                }).done(function() {
                    file.onLoad.fire()
                }).fail(function(e) {
                    if (this._isStatusError(e.status) || !file._isProgressStarted) {
                        file._isError = true;
                        file.onError.fire()
                    }
                }.bind(this))
            },
            _createFormData: function(fieldName, fieldValue) {
                var formData = new window.FormData;
                formData.append(fieldName, fieldValue);
                return formData
            },
            _getLoadedData: function(loaded, total, segmentSize, event) {
                var result = this.callBase(loaded, total, segmentSize, event);
                result.event = event;
                return result
            }
        });
        registerComponent("dxFileUploader", FileUploader);
        module.exports = FileUploader
    },
    /*!*************************************************!*\
      !*** ./artifacts/transpiled/ui/form/ui.form.js ***!
      \*************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            Guid = __webpack_require__( /*! ../../core/guid */ 48),
            utils = __webpack_require__( /*! ../../core/utils/common */ 4),
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            dataUtils = __webpack_require__( /*! ../../core/element_data */ 37),
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            inArray = __webpack_require__( /*! ../../core/utils/array */ 11).inArray,
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            stringUtils = __webpack_require__( /*! ../../core/utils/string */ 40),
            errors = __webpack_require__( /*! ../widget/ui.errors */ 18),
            browser = __webpack_require__( /*! ../../core/utils/browser */ 38),
            domUtils = __webpack_require__( /*! ../../core/utils/dom */ 12),
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14),
            Widget = __webpack_require__( /*! ../widget/ui.widget */ 28),
            windowUtils = __webpack_require__( /*! ../../core/utils/window */ 6),
            ValidationEngine = __webpack_require__( /*! ../validation_engine */ 94),
            LayoutManager = __webpack_require__( /*! ./ui.form.layout_manager */ 527),
            InstanceStorage = __webpack_require__( /*! ./instance_storage */ 306).default,
            TabPanel = __webpack_require__( /*! ../tab_panel */ 308),
            Scrollable = __webpack_require__( /*! ../scroll_view/ui.scrollable */ 96),
            Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7).Deferred,
            themes = __webpack_require__( /*! ../themes */ 20);
        __webpack_require__( /*! ../validation_summary */ 216);
        __webpack_require__( /*! ../validation_group */ 311);
        var FORM_CLASS = "dx-form",
            FIELD_ITEM_CLASS = "dx-field-item",
            FIELD_ITEM_LABEL_TEXT_CLASS = "dx-field-item-label-text",
            FORM_GROUP_CLASS = "dx-form-group",
            FORM_GROUP_CONTENT_CLASS = "dx-form-group-content",
            FORM_GROUP_WITH_CAPTION_CLASS = "dx-form-group-with-caption",
            FORM_GROUP_CAPTION_CLASS = "dx-form-group-caption",
            HIDDEN_LABEL_CLASS = "dx-layout-manager-hidden-label",
            FIELD_ITEM_LABEL_CLASS = "dx-field-item-label",
            FIELD_ITEM_LABEL_CONTENT_CLASS = "dx-field-item-label-content",
            FIELD_ITEM_TAB_CLASS = "dx-field-item-tab",
            FORM_FIELD_ITEM_COL_CLASS = "dx-col-",
            GROUP_COL_COUNT_CLASS = "dx-group-colcount-",
            FIELD_ITEM_CONTENT_CLASS = "dx-field-item-content",
            FORM_VALIDATION_SUMMARY = "dx-form-validation-summary",
            WIDGET_CLASS = "dx-widget",
            FOCUSED_STATE_CLASS = "dx-state-focused";
        var Form = Widget.inherit({
            _init: function() {
                this.callBase();
                this._cachedColCountOptions = [];
                this._instanceStorage = new InstanceStorage;
                this._groupsColCount = [];
                this._attachSyncSubscriptions()
            },
            _initOptions: function(options) {
                if (!("screenByWidth" in options)) {
                    options.screenByWidth = windowUtils.defaultScreenFactorFunc
                }
                this.callBase(options)
            },
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    formID: "dx-" + new Guid,
                    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: messageLocalization.format("dxForm-optionalMark"),
                    requiredMessage: messageLocalization.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 themes.isMaterial()
                    },
                    options: {
                        showColonAfterLabel: false,
                        labelLocation: "top"
                    }
                }])
            },
            _setOptionsByReference: function() {
                this.callBase();
                extend(this._optionsByReference, {
                    formData: true,
                    validationGroup: true
                })
            },
            _getColCount: function($element) {
                var $cols, index = 0,
                    isColsExist = true;
                while (isColsExist) {
                    $cols = $element.find("." + FORM_FIELD_ITEM_COL_CLASS + index);
                    if (!$cols.length) {
                        isColsExist = false
                    } else {
                        index++
                    }
                }
                return index
            },
            _createHiddenElement: function(rootLayoutManager) {
                this._$hiddenElement = $("<div>").addClass(WIDGET_CLASS).addClass(HIDDEN_LABEL_CLASS).appendTo("body");
                var $hiddenLabel = rootLayoutManager._renderLabel({
                    text: " ",
                    location: this.option("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,
                    cssExcludeTabbedSelector = options.excludeTabbed ? ":not(." + FIELD_ITEM_TAB_CLASS + ")" : "",
                    childLabelContentSelector = "> ." + FIELD_ITEM_LABEL_CLASS + " > ." + FIELD_ITEM_LABEL_CONTENT_CLASS;
                return "." + fieldItemClass + cssExcludeTabbedSelector + childLabelContentSelector
            },
            _getLabelText: function(labelText) {
                var child, i, length = labelText.children.length,
                    result = "";
                for (i = 0; i < length; i++) {
                    child = labelText.children[i];
                    result += !stringUtils.isEmpty(child.innerText) ? child.innerText : child.innerHTML
                }
                return result
            },
            _applyLabelsWidthByCol: function($container, index, options) {
                var labelWidth, i, $labelTexts = $container.find(this._getLabelsSelectorByCol(index, options)),
                    $labelTextsLength = $labelTexts.length,
                    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._getColCount($container);
                var i, applyLabelsOptions = {
                    excludeTabbed: excludeTabbed,
                    inOneColumn: inOneColumn
                };
                for (i = 0; i < colCount; i++) {
                    this._applyLabelsWidthByCol($container, i, applyLabelsOptions)
                }
            },
            _getGroupElementsInColumn: function($container, columnIndex, colCount) {
                var cssColCountSelector = typeUtils.isDefined(colCount) ? "." + GROUP_COL_COUNT_CLASS + colCount : "",
                    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 i, $groups = this.$element().find("." + FORM_GROUP_CLASS);
                    for (i = 0; i < $groups.length; i++) {
                        this._applyLabelsWidth($groups.eq(i), excludeTabbed)
                    }
                }
            },
            _applyLabelsWidthWithNestedGroups: function($container, colCount, excludeTabbed) {
                var colIndex, groupsColIndex, groupColIndex, $groupsByCol, applyLabelsOptions = {
                    excludeTabbed: excludeTabbed
                };
                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._getColCount($groupsByCol);
                        for (groupColIndex = 1; groupColIndex < groupColCount; groupColIndex++) {
                            this._applyLabelsWidthByCol($groupsByCol, groupColIndex, applyLabelsOptions)
                        }
                    }
                }
            },
            _alignLabelsInColumn: function(options) {
                if (!windowUtils.hasWindow()) {
                    return
                }
                this._createHiddenElement(options.layoutManager);
                if (options.inOneColumn) {
                    this._applyLabelsWidth(options.$container, options.excludeTabbed, true)
                } else {
                    if (this._checkGrouping(options.items)) {
                        this._applyLabelsWidthWithGroups(options.$container, options.layoutManager._getColCount(), options.excludeTabbed)
                    } else {
                        this._applyLabelsWidth(options.$container, options.excludeTabbed, false, options.layoutManager._getColCount())
                    }
                }
                this._removeHiddenElement()
            },
            _prepareFormData: function() {
                if (!typeUtils.isDefined(this.option("formData"))) {
                    this.option("formData", {})
                }
            },
            _initMarkup: function() {
                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._cachedScreenFactor = this._getCurrentScreenFactor()
            },
            _getCurrentScreenFactor: function() {
                return windowUtils.hasWindow() ? windowUtils.getCurrentScreenFactor(this.option("screenByWidth")) : "lg"
            },
            _clearCachedInstances: function() {
                this._instanceStorage.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 = [];
                delete this._cachedScreenFactor
            },
            _renderScrollable: function() {
                var useNativeScrolling = this.option("useNativeScrolling");
                this._scrollable = new Scrollable(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")) {
                    $("<div>").addClass(FORM_VALIDATION_SUMMARY).dxValidationSummary({
                        validationGroup: this._getValidationGroup()
                    }).appendTo(this._getContent())
                }
            },
            _prepareItems: function(items, isTabbed) {
                if (items) {
                    var i, item, clonedItem, that = this,
                        extendedItems = [];
                    for (i = 0; i < items.length; i++) {
                        item = items[i];
                        clonedItem = typeUtils.isObject(item) ? extend({}, item) : item;
                        var guid = this._instanceStorage.add(item);
                        if (typeUtils.isObject(clonedItem)) {
                            clonedItem.guid = guid
                        }
                        that._prepareGroupItem(clonedItem);
                        that._prepareTabbedItem(clonedItem);
                        that._prepareItemTemplate(clonedItem);
                        if (typeUtils.isObject(clonedItem)) {
                            if (isTabbed) {
                                clonedItem.cssItemClass = FIELD_ITEM_TAB_CLASS
                            }
                            clonedItem.items = this._prepareItems(clonedItem.items, isTabbed)
                        }
                        extendedItems.push(clonedItem)
                    }
                    return extendedItems
                }
            },
            _prepareGroupItem: function(item) {
                if ("group" === item.itemType) {
                    item.alignItemLabels = utils.ensureDefined(item.alignItemLabels, true);
                    if (item.template) {
                        item.groupContentTemplate = this._getTemplate(item.template)
                    }
                    item.template = this._itemGroupTemplate.bind(this, item)
                }
            },
            _prepareTabbedItem: function(item) {
                if ("tabbed" === item.itemType) {
                    item.template = this._itemTabbedTemplate.bind(this, item);
                    item.tabs = this._prepareItems(item.tabs, true)
                }
            },
            _prepareItemTemplate: 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,
                    items = that.option("items"),
                    $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())
                    }
                })
            },
            _itemTabbedTemplate: function(item, e, $container) {
                var that = this,
                    $tabPanel = $("<div>").appendTo($container),
                    tabPanelOptions = extend({}, item.tabPanelOptions, {
                        dataSource: item.tabs,
                        onItemRendered: function(args) {
                            domUtils.triggerShownEvent(args.itemElement)
                        },
                        itemTemplate: function(itemData, e, container) {
                            var layoutManager, $container = $(container),
                                alignItemLabels = utils.ensureDefined(itemData.alignItemLabels, true);
                            layoutManager = that._renderLayoutManager(itemData.items, $container, {
                                colCount: itemData.colCount,
                                alignItemLabels: alignItemLabels,
                                screenByWidth: this.option("screenByWidth"),
                                colCountByScreen: itemData.colCountByScreen,
                                cssItemClass: itemData.cssItemClass,
                                onLayoutChanged: function(inOneColumn) {
                                    that._alignLabelsInColumn.bind(that)({
                                        $container: $container,
                                        layoutManager: layoutManager,
                                        items: itemData.items,
                                        inOneColumn: inOneColumn
                                    })
                                }
                            });
                            if (alignItemLabels) {
                                that._alignLabelsInColumn.bind(that)({
                                    $container: $container,
                                    layoutManager: layoutManager,
                                    items: itemData.items,
                                    inOneColumn: layoutManager.isSingleColumnMode()
                                })
                            }
                        }
                    });
                that._createComponent($tabPanel, TabPanel, tabPanelOptions)
            },
            _itemGroupTemplate: function(item, e, $container) {
                var $groupContent, colCount, layoutManager, $group = $("<div>").toggleClass(FORM_GROUP_WITH_CAPTION_CLASS, typeUtils.isDefined(item.caption) && item.caption.length).addClass(FORM_GROUP_CLASS).appendTo($container);
                if (item.caption) {
                    $("<span>").addClass(FORM_GROUP_CAPTION_CLASS).text(item.caption).appendTo($group)
                }
                $groupContent = $("<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: domUtils.getPublicElement($groupContent)
                    })
                } else {
                    layoutManager = this._renderLayoutManager(item.items, $groupContent, {
                        colCount: item.colCount,
                        colCountByScreen: item.colCountByScreen,
                        alignItemLabels: item.alignItemLabels,
                        cssItemClass: item.cssItemClass
                    });
                    colCount = layoutManager._getColCount();
                    if (inArray(colCount, this._groupsColCount) === -1) {
                        this._groupsColCount.push(colCount)
                    }
                    $group.addClass(GROUP_COL_COUNT_CLASS + colCount)
                }
            },
            _renderLayoutManager: function(items, $rootElement, options) {
                var instance, $element = $("<div>"),
                    that = this,
                    config = that._getLayoutManagerConfig(items, options),
                    baseColCountByScreen = {
                        lg: options.colCount,
                        md: options.colCount,
                        sm: options.colCount,
                        xs: 1
                    };
                that._cachedColCountOptions.push({
                    colCountByScreen: extend(baseColCountByScreen, options.colCountByScreen)
                });
                $element.appendTo($rootElement);
                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 that = this,
                    baseConfig = {
                        form: that,
                        validationGroup: that._getValidationGroup(),
                        showRequiredMark: that.option("showRequiredMark"),
                        showOptionalMark: that.option("showOptionalMark"),
                        requiredMark: that.option("requiredMark"),
                        optionalMark: that.option("optionalMark"),
                        requiredMessage: that.option("requiredMessage"),
                        screenByWidth: that.option("screenByWidth"),
                        layoutData: that.option("formData"),
                        labelLocation: that.option("labelLocation"),
                        customizeItem: that.option("customizeItem"),
                        minColWidth: that.option("minColWidth"),
                        showColonAfterLabel: that.option("showColonAfterLabel"),
                        onEditorEnterKey: that.option("onEditorEnterKey"),
                        onFieldDataChanged: function(args) {
                            if (!that._isDataUpdating) {
                                that._triggerOnFieldDataChanged(args)
                            }
                        },
                        validationBoundary: that.option("scrollingEnabled") ? that.$element() : void 0
                    };
                return extend(baseConfig, {
                    items: items,
                    onContentReady: function(args) {
                        that._instanceStorage.extend(args.component._instanceStorage);
                        options.onContentReady && options.onContentReady(args)
                    },
                    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 (!typeUtils.isDefined(args.value)) {
                            that._options.formData = args.value = {}
                        }
                        that._triggerOnFieldDataChangedByDataSet(args.value)
                    }
                    if (that._cachedLayoutManagers.length) {
                        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 (typeUtils.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) {
                            domUtils.triggerShownEvent(this.$element())
                        }
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _getRootLevelOfExpectedComplexOption: function(fullOptionName, expectedRootNames) {
                var result, splitFullName = fullOptionName.split(".");
                if (splitFullName.length > 1) {
                    var i, rootOptionName = splitFullName[0];
                    for (i = 0; i < expectedRootNames.length; i++) {
                        if (rootOptionName.search(expectedRootNames[i]) !== -1) {
                            result = expectedRootNames[i]
                        }
                    }
                }
                return result
            },
            _customHandlerOfComplexOption: function(args, rootOptionName) {
                var nameParts = args.fullName.split(".");
                switch (rootOptionName) {
                    case "items":
                        var itemPath = this._getItemPath(nameParts),
                            item = this.option(itemPath),
                            instance = this._instanceStorage.findByItem(item),
                            fullName = args.fullName;
                        if (instance) {
                            if (fullName.search("buttonOptions") !== -1) {
                                instance.option(item.buttonOptions);
                                break
                            } else {
                                if (instance && fullName.search("editorOptions") !== -1) {
                                    instance.option(item.editorOptions);
                                    break
                                } else {
                                    if (fullName.search("validationRules") !== -1) {
                                        var validator = dataUtils.data(instance.$element()[0], "dxValidator");
                                        validator && validator.option("validationRules", item.validationRules);
                                        break
                                    }
                                }
                            }
                        }
                        if (item) {
                            var items, name = args.fullName.replace(itemPath + ".", "");
                            this._changeItemOption(item, name, args.value);
                            items = this._generateItemsFromData(this.option("items"));
                            this.option("items", items)
                        }
                        break;
                    case "formData":
                        var dataField = nameParts.slice(1).join("."),
                            editor = this.getEditor(dataField);
                        if (editor) {
                            editor.option("value", args.value)
                        } else {
                            this._triggerOnFieldDataChanged({
                                dataField: dataField,
                                value: args.value
                            })
                        }
                }
            },
            _getItemPath: function(nameParts) {
                var i, itemPath = nameParts[0];
                for (i = 1; i < nameParts.length; i++) {
                    if (nameParts[i].search("items|tabs") !== -1) {
                        itemPath += "." + nameParts[i]
                    } else {
                        break
                    }
                }
                return itemPath
            },
            _triggerOnFieldDataChanged: function(args) {
                this._createActionByOption("onFieldDataChanged")(args)
            },
            _triggerOnFieldDataChangedByDataSet: function(data) {
                var that = this;
                if (data && typeUtils.isObject(data)) {
                    each(data, function(dataField, value) {
                        that._triggerOnFieldDataChanged({
                            dataField: dataField,
                            value: value
                        })
                    })
                }
            },
            _updateFieldValue: function(dataField, value) {
                if (typeUtils.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"),
                    result = [];
                if (!items && typeUtils.isDefined(formData)) {
                    each(formData, function(dataField) {
                        result.push({
                            dataField: dataField
                        })
                    })
                }
                if (items) {
                    each(items, function(index, item) {
                        if (typeUtils.isObject(item)) {
                            result.push(item)
                        } else {
                            result.push({
                                dataField: item
                            })
                        }
                    })
                }
                return result
            },
            _getItemByField: function(field, items) {
                var resultItem, that = this,
                    fieldParts = typeUtils.isObject(field) ? field : that._getFieldParts(field),
                    fieldName = fieldParts.fieldName,
                    fieldPath = fieldParts.fieldPath;
                if (items.length) {
                    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) {
                                var subItemsField = that._getSubItemField(itemType);
                                item.items = that._generateItemsFromData(item.items);
                                item = that._getItemByField({
                                    fieldName: fieldName,
                                    fieldPath: fieldPath
                                }, item[subItemsField])
                            }
                        }
                        if (that._isExpectedItem(item, fieldName)) {
                            resultItem = item;
                            return false
                        }
                    })
                }
                return resultItem
            },
            _getFieldParts: function(field) {
                var fieldSeparator = ".",
                    fieldName = field,
                    separatorIndex = fieldName.indexOf(fieldSeparator),
                    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 result, that = this,
                    itemType = item.itemType,
                    subItemsField = that._getSubItemField(itemType),
                    isItemWithSubItems = "group" === itemType || "tabbed" === itemType || item.title;
                do {
                    if (isItemWithSubItems) {
                        var pathNode, name = item.name || item.caption || item.title,
                            isGroupWithName = typeUtils.isDefined(name),
                            nameWithoutSpaces = that._getTextWithoutSpaces(name);
                        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 && !typeUtils.isDefined(result));
                return result
            },
            _getSubItemField: function(itemType) {
                return "tabbed" === itemType ? "tabs" : "items"
            },
            _searchItemInEverySubItem: function(path, fieldName, items) {
                var result, that = this;
                each(items, function(index, groupItem) {
                    result = that._getItemByFieldPath(path.slice(), fieldName, groupItem);
                    if (result) {
                        return false
                    }
                });
                if (!result) {
                    result = false
                }
                return result
            },
            _getTextWithoutSpaces: function(text) {
                return text ? text.replace(/\s/g, "") : void 0
            },
            _isExpectedItem: function(item, fieldName) {
                return item && (item.dataField === fieldName || item.name === fieldName || this._getTextWithoutSpaces(item.title) === fieldName || "group" === item.itemType && this._getTextWithoutSpaces(item.caption) === fieldName)
            },
            _changeItemOption: function(item, option, value) {
                if (typeUtils.isObject(item)) {
                    item[option] = value
                }
            },
            _dimensionChanged: function() {
                var currentScreenFactor = this._getCurrentScreenFactor();
                if (this._cachedScreenFactor !== currentScreenFactor) {
                    if (this._isColCountChanged(this._cachedScreenFactor, currentScreenFactor)) {
                        this._refresh()
                    }
                    this._cachedScreenFactor = currentScreenFactor;
                    return
                }
            },
            _isColCountChanged: function(oldScreenSize, newScreenSize) {
                var isChanged = false;
                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";
                eventsEngine.trigger(this.$element().find(editorSelector), "change");
                this.callBase()
            },
            _resetValues: function() {
                var validationGroup = this._getValidationGroup(),
                    validationGroupConfig = ValidationEngine.getGroupConfig(validationGroup);
                validationGroupConfig && validationGroupConfig.reset();
                this._instanceStorage.each(function(instance, item) {
                    var isButton = "button" === item.itemType;
                    if (!isButton) {
                        instance.reset();
                        instance.option("isValid", true)
                    }
                })
            },
            _updateData: function(data, value, isComplexData) {
                var that = this,
                    _data = isComplexData ? value : data;
                if (typeUtils.isObject(_data)) {
                    each(_data, function(dataField, fieldValue) {
                        that._updateData(isComplexData ? data + "." + dataField : dataField, fieldValue, typeUtils.isObject(fieldValue))
                    })
                } else {
                    if (typeUtils.isString(data)) {
                        that._updateFieldValue(data, value)
                    }
                }
            },
            registerKeyHandler: function(key, handler) {
                this.callBase(key, handler);
                this._instanceStorage.each(function(instance) {
                    instance.registerKeyHandler(key, handler)
                })
            },
            _focusTarget: function() {
                return this.$element().find("." + FIELD_ITEM_CONTENT_CLASS + " [tabindex]").first()
            },
            _visibilityChanged: function(visible) {
                if (visible && browser.msie) {
                    this._refresh()
                }
            },
            resetValues: function() {
                this._resetValues()
            },
            updateData: function(data, value) {
                this._updateData(data, value)
            },
            getEditor: function(dataField) {
                return this._instanceStorage.findByDataField(dataField) || this._instanceStorage.findByName(dataField)
            },
            getButton: function(name) {
                return this._instanceStorage.findByName(name)
            },
            updateDimensions: function() {
                var that = this,
                    deferred = new 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 that = this,
                    argsCount = arguments.length,
                    items = that._generateItemsFromData(that.option("items")),
                    item = that._getItemByField(id, items);
                switch (argsCount) {
                    case 1:
                        return item;
                    case 3:
                        that._changeItemOption(item, option, value);
                        break;
                    default:
                        if (typeUtils.isObject(option)) {
                            each(option, function(optionName, optionValue) {
                                that._changeItemOption(item, optionName, optionValue)
                            })
                        }
                }
                this.option("items", items)
            },
            validate: function() {
                try {
                    return ValidationEngine.validateGroup(this._getValidationGroup())
                } catch (e) {
                    errors.log("E1036", e.message)
                }
            },
            getItemID: function(name) {
                return "dx_" + this.option("formID") + "_" + (name || new Guid)
            }
        });
        registerComponent("dxForm", Form);
        module.exports = Form;
        module.exports.__internals = 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
        }, LayoutManager.__internals)
    },
    /*!****************************************************************!*\
      !*** ./artifacts/transpiled/ui/form/ui.form.layout_manager.js ***!
      \****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var _typeof = "function" === typeof Symbol && "symbol" === typeof Symbol.iterator ? function(obj) {
            return typeof obj
        } : function(obj) {
            return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
        };
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            Guid = __webpack_require__( /*! ../../core/guid */ 48),
            InstanceStorage = __webpack_require__( /*! ./instance_storage */ 306).default,
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            typeUtils = __webpack_require__( /*! ../../core/utils/type */ 1),
            domUtils = __webpack_require__( /*! ../../core/utils/dom */ 12),
            isWrapped = __webpack_require__( /*! ../../core/utils/variable_wrapper */ 74).isWrapped,
            isWritableWrapped = __webpack_require__( /*! ../../core/utils/variable_wrapper */ 74).isWritableWrapped,
            unwrap = __webpack_require__( /*! ../../core/utils/variable_wrapper */ 74).unwrap,
            windowUtils = __webpack_require__( /*! ../../core/utils/window */ 6),
            stringUtils = __webpack_require__( /*! ../../core/utils/string */ 40),
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            inArray = __webpack_require__( /*! ../../core/utils/array */ 11).inArray,
            dataUtils = __webpack_require__( /*! ../../core/utils/data */ 23),
            removeEvent = __webpack_require__( /*! ../../core/remove_event */ 135),
            clickEvent = __webpack_require__( /*! ../../events/click */ 17),
            normalizeIndexes = __webpack_require__( /*! ../../core/utils/array */ 11).normalizeIndexes,
            errors = __webpack_require__( /*! ../widget/ui.errors */ 18),
            messageLocalization = __webpack_require__( /*! ../../localization/message */ 14),
            styleUtils = __webpack_require__( /*! ../../core/utils/style */ 85),
            inflector = __webpack_require__( /*! ../../core/utils/inflector */ 34),
            Widget = __webpack_require__( /*! ../widget/ui.widget */ 28),
            Validator = __webpack_require__( /*! ../validator */ 195),
            ResponsiveBox = __webpack_require__( /*! ../responsive_box */ 307),
            themes = __webpack_require__( /*! ../themes */ 20);
        __webpack_require__( /*! ../text_box */ 101);
        __webpack_require__( /*! ../number_box */ 118);
        __webpack_require__( /*! ../check_box */ 126);
        __webpack_require__( /*! ../date_box */ 203);
        __webpack_require__( /*! ../button */ 36);
        var FORM_EDITOR_BY_DEFAULT = "dxTextBox",
            FIELD_ITEM_CLASS = "dx-field-item",
            FIELD_EMPTY_ITEM_CLASS = "dx-field-empty-item",
            FIELD_BUTTON_ITEM_CLASS = "dx-field-button-item",
            FIELD_ITEM_REQUIRED_CLASS = "dx-field-item-required",
            FIELD_ITEM_OPTIONAL_CLASS = "dx-field-item-optional",
            FIELD_ITEM_REQUIRED_MARK_CLASS = "dx-field-item-required-mark",
            FIELD_ITEM_OPTIONAL_MARK_CLASS = "dx-field-item-optional-mark",
            FIELD_ITEM_LABEL_CLASS = "dx-field-item-label",
            FIELD_ITEM_LABEL_ALIGN_CLASS = "dx-field-item-label-align",
            FIELD_ITEM_LABEL_CONTENT_CLASS = "dx-field-item-label-content",
            FIELD_ITEM_LABEL_TEXT_CLASS = "dx-field-item-label-text",
            FIELD_ITEM_LABEL_LOCATION_CLASS = "dx-field-item-label-location-",
            FIELD_ITEM_CONTENT_CLASS = "dx-field-item-content",
            FIELD_ITEM_CONTENT_LOCATION_CLASS = "dx-field-item-content-location-",
            FIELD_ITEM_CONTENT_WRAPPER_CLASS = "dx-field-item-content-wrapper",
            FIELD_ITEM_HELP_TEXT_CLASS = "dx-field-item-help-text",
            SINGLE_COLUMN_ITEM_CONTENT = "dx-single-column-item-content",
            LABEL_HORIZONTAL_ALIGNMENT_CLASS = "dx-label-h-align",
            LABEL_VERTICAL_ALIGNMENT_CLASS = "dx-label-v-align",
            FORM_LAYOUT_MANAGER_CLASS = "dx-layout-manager",
            LAYOUT_MANAGER_FIRST_ROW_CLASS = "dx-first-row",
            LAYOUT_MANAGER_FIRST_COL_CLASS = "dx-first-col",
            LAYOUT_MANAGER_LAST_COL_CLASS = "dx-last-col",
            LAYOUT_MANAGER_ONE_COLUMN = "dx-layout-manager-one-col",
            FLEX_LAYOUT_CLASS = "dx-flex-layout",
            INVALID_CLASS = "dx-invalid",
            LAYOUT_STRATEGY_FLEX = "flex",
            LAYOUT_STRATEGY_FALLBACK = "fallback",
            SIMPLE_ITEM_TYPE = "simple",
            DATA_OPTIONS = ["dataSource", "items"],
            EDITORS_WITH_ARRAY_VALUE = ["dxTagBox", "dxRangeSlider"];
        var LayoutManager = Widget.inherit({
            _getDefaultOptions: function() {
                return 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: messageLocalization.format("dxForm-optionalMark"),
                    requiredMessage: messageLocalization.getFormatter("dxForm-requiredMessage")
                })
            },
            _setOptionsByReference: function() {
                this.callBase();
                extend(this._optionsByReference, {
                    layoutData: true,
                    validationGroup: true
                })
            },
            _init: function() {
                this.callBase();
                this._itemWatchers = [];
                this._instanceStorage = new InstanceStorage;
                this._initDataAndItems(this.option("layoutData"))
            },
            _dispose: function() {
                this.callBase();
                this._cleanItemWatchers()
            },
            _initDataAndItems: function(initialData) {
                this._syncDataWithItems();
                this._updateItems(initialData)
            },
            _syncDataWithItems: function() {
                var that = this,
                    userItems = that.option("items");
                if (typeUtils.isDefined(userItems)) {
                    each(userItems, function(index, item) {
                        var value;
                        if (item.dataField && void 0 === that._getDataByField(item.dataField)) {
                            if (item.editorOptions) {
                                value = item.editorOptions.value
                            }
                            that._updateFieldValue(item.dataField, value)
                        }
                    })
                }
            },
            _getDataByField: function(dataField) {
                return dataField ? this.option("layoutData." + dataField) : null
            },
            _updateFieldValue: function(dataField, value) {
                var layoutData = this.option("layoutData"),
                    newValue = value;
                if (!isWrapped(layoutData[dataField]) && typeUtils.isDefined(dataField)) {
                    this.option("layoutData." + dataField, newValue)
                } else {
                    if (isWritableWrapped(layoutData[dataField])) {
                        newValue = typeUtils.isFunction(newValue) ? newValue() : newValue;
                        layoutData[dataField](newValue)
                    }
                }
                this._triggerOnFieldDataChanged({
                    dataField: dataField,
                    value: newValue
                })
            },
            _triggerOnFieldDataChanged: function(args) {
                this._createActionByOption("onFieldDataChanged")(args)
            },
            _updateItems: function(layoutData) {
                var items, processedItems, that = this,
                    userItems = this.option("items"),
                    isUserItemsExist = typeUtils.isDefined(userItems),
                    customizeItem = that.option("customizeItem");
                items = isUserItemsExist ? userItems : this._generateItemsByData(layoutData);
                if (typeUtils.isDefined(items)) {
                    processedItems = [];
                    each(items, function(index, item) {
                        if (that._isAcceptableItem(item)) {
                            item = that._processItem(item);
                            customizeItem && customizeItem(item);
                            if (typeUtils.isObject(item) && false !== 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,
                    watch = that._getWatch();
                items.forEach(function(item) {
                    if (typeUtils.isObject(item) && typeUtils.isDefined(item.visible) && typeUtils.isFunction(watch)) {
                        that._itemWatchers.push(watch(function() {
                            return unwrap(item.visible)
                        }, function() {
                            that._updateItems(that.option("layoutData"));
                            that.repaint()
                        }, {
                            skipImmediate: true
                        }))
                    }
                })
            },
            _generateItemsByData: function(layoutData) {
                var result = [];
                if (typeUtils.isDefined(layoutData)) {
                    each(layoutData, function(dataField) {
                        result.push({
                            dataField: dataField
                        })
                    })
                }
                return result
            },
            _isAcceptableItem: function(item) {
                var itemField = item.dataField || item,
                    itemData = this._getDataByField(itemField);
                return !(typeUtils.isFunction(itemData) && !isWrapped(itemData))
            },
            _processItem: function(item) {
                if ("string" === typeof item) {
                    item = {
                        dataField: item
                    }
                }
                if ("object" === ("undefined" === typeof item ? "undefined" : _typeof(item)) && !item.itemType) {
                    item.itemType = SIMPLE_ITEM_TYPE
                }
                if (!typeUtils.isDefined(item.editorType) && typeUtils.isDefined(item.dataField)) {
                    var value = this._getDataByField(item.dataField);
                    item.editorType = typeUtils.isDefined(value) ? this._getEditorTypeByDataType(typeUtils.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() {
                normalizeIndexes(this._items, "visibleIndex");
                this._sortIndexes()
            },
            _sortIndexes: function() {
                this._items.sort(function(itemA, itemB) {
                    var result, indexA = itemA.visibleIndex,
                        indexB = itemB.visibleIndex;
                    if (indexA > indexB) {
                        result = 1
                    } else {
                        if (indexA < indexB) {
                            result = -1
                        } else {
                            result = 0
                        }
                    }
                    return result
                })
            },
            _initMarkup: function() {
                this._instanceStorage.clear();
                this.$element().addClass(FORM_LAYOUT_MANAGER_CLASS);
                this.callBase();
                this._renderResponsiveBox()
            },
            _hasBrowserFlex: function() {
                return styleUtils.styleProp(LAYOUT_STRATEGY_FLEX) === LAYOUT_STRATEGY_FLEX
            },
            _renderResponsiveBox: function() {
                var that = this,
                    templatesInfo = [];
                if (that._items && that._items.length) {
                    var layoutItems, colCount = that._getColCount(),
                        $container = $("<div>").appendTo(that.$element());
                    that._prepareItemsWithMerging(colCount);
                    layoutItems = that._generateLayoutItems();
                    that._extendItemsWithDefaultTemplateOptions(layoutItems, that._items);
                    that._responsiveBox = that._createComponent($container, ResponsiveBox, that._getResponsiveBoxConfig(layoutItems, colCount, templatesInfo));
                    if (!windowUtils.hasWindow()) {
                        that._renderTemplates(templatesInfo)
                    }
                }
            },
            _extendItemsWithDefaultTemplateOptions: function(targetItems, sourceItems) {
                sourceItems.forEach(function(item) {
                    if (!item.merged) {
                        if (typeUtils.isDefined(item.disabled)) {
                            targetItems[item.visibleIndex].disabled = item.disabled
                        }
                        if (typeUtils.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;
                each(templatesInfo, function(index, info) {
                    that._renderTemplate(info.container, info.formItem)
                })
            },
            _getResponsiveBoxConfig: function(layoutItems, colCount, templatesInfo) {
                var that = this,
                    colCountByScreen = that.option("colCountByScreen"),
                    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"),
                            isSingleColumnMode = that.isSingleColumnMode();
                        if (onLayoutChanged) {
                            that.$element().toggleClass(LAYOUT_MANAGER_ONE_COLUMN, isSingleColumnMode);
                            onLayoutChanged(isSingleColumnMode)
                        }
                    },
                    onContentReady: function(e) {
                        if (windowUtils.hasWindow()) {
                            that._renderTemplates(templatesInfo)
                        }
                        if (that.option("onLayoutChanged")) {
                            that.$element().toggleClass(LAYOUT_MANAGER_ONE_COLUMN, that.isSingleColumnMode(e.component))
                        }
                        that._fireContentReadyAction()
                    },
                    itemTemplate: function(e, itemData, itemElement) {
                        if (!e.location) {
                            return
                        }
                        var $itemElement = $(itemElement),
                            itemRenderedCountInPreviousRows = e.location.row * colCount,
                            item = that._items[e.location.col + itemRenderedCountInPreviousRows],
                            $fieldItem = $("<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)
                        }
                        if (e.location.col === colCount - 1 || e.location.col + e.location.colspan === colCount) {
                            $fieldItem.addClass(LAYOUT_MANAGER_LAST_COL_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"),
                    colCountByScreen = this.option("colCountByScreen");
                if (colCountByScreen) {
                    var screenFactor = windowUtils.hasWindow() ? windowUtils.getCurrentScreenFactor(this.option("screenByWidth")) : "lg",
                        currentColCount = colCountByScreen[screenFactor];
                    colCount = currentColCount || colCount
                }
                if ("auto" === colCount) {
                    if (!!this._cashedColCount) {
                        return this._cashedColCount
                    }
                    this._cashedColCount = colCount = this._getMaxColCount()
                }
                return colCount < 1 ? 1 : colCount
            },
            _getMaxColCount: function() {
                if (!windowUtils.hasWindow()) {
                    return 1
                }
                var minColWidth = this.option("minColWidth"),
                    width = this.$element().width(),
                    itemsCount = this._items.length,
                    maxColCount = Math.floor(width / minColWidth) || 1;
                return itemsCount < maxColCount ? itemsCount : maxColCount
            },
            isCachedColCountObsolete: function() {
                return this._cashedColCount && this._getMaxColCount() !== this._cashedColCount
            },
            _prepareItemsWithMerging: function(colCount) {
                var item, itemsMergedByCol, j, i, items = this._items.slice(0),
                    result = [];
                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 item, i, items = this._items,
                    colCount = this._getColCount(),
                    result = [];
                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 (typeUtils.isDefined(item.colSpan)) {
                            generatedItem.location.colspan = item.colSpan
                        }
                        if (typeUtils.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 (typeUtils.isDefined(item.horizontalAlignment)) {
                    return item.horizontalAlignment
                }
                if (typeUtils.isDefined(item.alignment)) {
                    errors.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 = $("<div>").appendTo($container),
                    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", extend(defaultOptions, item.buttonOptions));
                this._instanceStorage.add(item, instance, item.guid);
                this._addItemClasses($container, item.col);
                return $button
            },
            _addItemClasses: function($item, column) {
                $item.addClass(FIELD_ITEM_CLASS).addClass(this.option("cssItemClass")).addClass(typeUtils.isDefined(column) ? "dx-col-" + column : "")
            },
            _renderFieldItem: function(item, $container) {
                var $label, that = this,
                    name = that._getName(item),
                    id = that.getItemID(name),
                    isRequired = typeUtils.isDefined(item.isRequired) ? item.isRequired : !!that._hasRequiredRuleInSet(item.validationRules),
                    labelOptions = that._getLabelOptions(item, id, isRequired),
                    $editor = $("<div>"),
                    helpID = item.helpText ? "dx-" + new Guid : null;
                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: name,
                    editorType: item.editorType,
                    editorOptions: item.editorOptions,
                    template: that._getTemplateByFieldItem(item),
                    isRequired: isRequired,
                    helpID: helpID,
                    id: id,
                    validationBoundary: that.option("validationBoundary")
                });
                this._instanceStorage.add(item, instance, item.guid);
                var $validationTarget = $editor.children().first();
                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) {
                    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"];
                return !!item.helpText && !this._hasBrowserFlex() || inArray(item.editorType, largeEditors) !== -1
            },
            _getLabelOptions: function(item, id, isRequired) {
                var labelOptions = extend({
                    showColon: this.option("showColonAfterLabel"),
                    location: this.option("labelLocation"),
                    id: id,
                    visible: true,
                    isRequired: isRequired
                }, item ? item.label : {});
                if (!labelOptions.text && item.dataField) {
                    labelOptions.text = inflector.captionize(item.dataField)
                }
                if (labelOptions.text) {
                    labelOptions.text += labelOptions.showColon ? ":" : ""
                }
                return labelOptions
            },
            _renderLabel: function(options) {
                if (typeUtils.isDefined(options.text) && options.text.length > 0) {
                    var labelClasses = FIELD_ITEM_LABEL_CLASS + " " + FIELD_ITEM_LABEL_LOCATION_CLASS + options.location,
                        $label = $("<label>").addClass(labelClasses).attr("for", options.id),
                        $labelContent = $("<span>").addClass(FIELD_ITEM_LABEL_CONTENT_CLASS).appendTo($label);
                    $("<span>").addClass(FIELD_ITEM_LABEL_TEXT_CLASS).text(options.text).appendTo($labelContent);
                    if (options.alignment) {
                        $label.css("textAlign", options.alignment)
                    }
                    $labelContent.append(this._renderLabelMark(options.isRequired));
                    return $label
                }
            },
            _renderLabelMark: function(isRequired) {
                var $mark, requiredMarksConfig = this._getRequiredMarksConfig(),
                    isRequiredMark = requiredMarksConfig.showRequiredMark && isRequired,
                    isOptionalMark = requiredMarksConfig.showOptionalMark && !isRequired;
                if (isRequiredMark || isOptionalMark) {
                    var markClass = isRequiredMark ? FIELD_ITEM_REQUIRED_MARK_CLASS : FIELD_ITEM_OPTIONAL_MARK_CLASS,
                        markText = isRequiredMark ? requiredMarksConfig.requiredMark : requiredMarksConfig.optionalMark;
                    $mark = $("<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 editorOptions, dataValue = this._getDataByField(options.dataField),
                    defaultEditorOptions = {
                        value: dataValue
                    },
                    isDeepExtend = true;
                if (EDITORS_WITH_ARRAY_VALUE.indexOf(options.editorType) !== -1) {
                    defaultEditorOptions.value = defaultEditorOptions.value || []
                }
                var formInstance = this.option("form");
                editorOptions = 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,
                    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),
                    validationRules = this._prepareValidationRules(item.validationRules, item.isRequired, item.itemType, fieldName);
                if (Array.isArray(validationRules) && validationRules.length) {
                    this._createComponent($editor, Validator, {
                        validationRules: validationRules,
                        validationGroup: this.option("validationGroup")
                    })
                }
            },
            _getFieldLabelName: function(item) {
                var isItemHaveCustomLabel = item.label && item.label.text,
                    itemName = isItemHaveCustomLabel ? null : this._getName(item);
                return isItemHaveCustomLabel ? item.label.text : itemName && inflector.captionize(itemName)
            },
            _prepareValidationRules: function(userValidationRules, isItemRequired, itemType, itemName) {
                var validationRules, isSimpleItem = itemType === SIMPLE_ITEM_TYPE;
                if (isSimpleItem) {
                    if (userValidationRules) {
                        validationRules = userValidationRules
                    } else {
                        var requiredMessage = stringUtils.format(this.option("requiredMessage"), itemName || "");
                        validationRules = isItemRequired ? [{
                            type: "required",
                            message: requiredMessage
                        }] : null
                    }
                }
                return validationRules
            },
            _addWrapperInvalidClass: function(editorInstance) {
                var wrapperClass = "." + FIELD_ITEM_CONTENT_WRAPPER_CLASS,
                    toggleInvalidClass = function(e) {
                        $(e.element).parents(wrapperClass).toggleClass(INVALID_CLASS, "focusin" === e.event.type && false === e.component.option("isValid"))
                    };
                editorInstance.on("focusIn", toggleInvalidClass).on("focusOut", toggleInvalidClass)
            },
            _createEditor: function($container, renderOptions, editorOptions) {
                var editorInstance, that = this,
                    template = renderOptions.template;
                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()
                    };
                    template.render({
                        model: data,
                        container: domUtils.getPublicElement($container)
                    })
                } else {
                    var $editor = $("<div>").appendTo($container);
                    try {
                        editorInstance = that._createComponent($editor, renderOptions.editorType, editorOptions);
                        editorInstance.setAria("describedby", renderOptions.helpID);
                        editorInstance.setAria("required", renderOptions.isRequired);
                        if (themes.isMaterial()) {
                            that._addWrapperInvalidClass(editorInstance)
                        }
                        if (renderOptions.dataField) {
                            that._bindDataField(editorInstance, renderOptions, $container)
                        }
                    } catch (e) {
                        errors.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")(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,
                    watch = that._getWatch();
                if (!typeUtils.isFunction(watch)) {
                    return
                }
                var dispose = watch(function() {
                    return that._getDataByField(renderOptions.dataField)
                }, function() {
                    editorInstance.option("value", that._getDataByField(renderOptions.dataField))
                }, {
                    deep: true,
                    skipImmediate: true
                });
                eventsEngine.on($container, removeEvent, dispose)
            },
            _getWatch: function() {
                if (!typeUtils.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"),
                    oppositeClasses = {
                        right: "left",
                        left: "right",
                        top: "bottom"
                    };
                return FIELD_ITEM_CONTENT_LOCATION_CLASS + oppositeClasses[labelLocation]
            },
            _createComponent: function($editor, type, editorOptions) {
                var instance, that = this,
                    readOnlyState = this.option("readOnly");
                instance = that.callBase($editor, type, editorOptions);
                readOnlyState && instance.option("readOnly", readOnlyState);
                that.on("optionChanged", function(args) {
                    if ("readOnly" === args.name && !typeUtils.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,
                    isSimpleItem = fieldItem.itemType === SIMPLE_ITEM_TYPE;
                if (helpText && isSimpleItem) {
                    var $editorWrapper = $("<div>").addClass(FIELD_ITEM_CONTENT_WRAPPER_CLASS);
                    $editor.wrap($editorWrapper);
                    $("<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) {
                    eventsEngine.on($label, clickEvent.name, function() {
                        eventsEngine.trigger($editor.children(), clickEvent.name)
                    })
                }
            },
            _generateRatio: function(count, isAutoSize) {
                var ratio, i, result = [];
                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())
            },
            _optionChanged: function(args) {
                var that = 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":
                        if (this.option("items")) {
                            if (!typeUtils.isEmptyObject(args.value)) {
                                this._instanceStorage.each(function(instance, item) {
                                    var name = that._getName(item);
                                    if (name) {
                                        var valueGetter = dataUtils.compileGetter(name),
                                            dataValue = valueGetter(args.value);
                                        if (void 0 === dataValue) {
                                            instance.reset();
                                            instance.option("isValid", true)
                                        } else {
                                            instance.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, editorType) {
                var isDataUpdating, fullFieldName = "layoutData." + dataField,
                    that = this;
                that.on("optionChanged", function(args) {
                    if (args.fullName === fullFieldName) {
                        isDataUpdating = true;
                        if ("object" === _typeof(args.value)) {
                            that._managedUpdateEditorOption(editorInstance, "value", args.value)
                        } else {
                            editorInstance.option("value", args.value)
                        }
                        isDataUpdating = false
                    }
                });
                editorInstance.on("valueChanged", function(args) {
                    var isObjectValue = "object" === _typeof(args.value),
                        isSameObjectValue = isObjectValue && args.value === args.previousValue;
                    if (!isDataUpdating && !isSameObjectValue) {
                        if (isObjectValue) {
                            that._managedUpdateFieldValue(dataField, args.value)
                        } else {
                            that._updateFieldValue(dataField, args.value)
                        }
                    }
                })
            },
            _managedUpdateEditorOption: function(editorInstance, optionName, value) {
                if (!this._isValueChangedCalled) {
                    this._isFieldValueChanged = true;
                    editorInstance.option(optionName, value);
                    this._isFieldValueChanged = false
                }
            },
            _managedUpdateFieldValue: function(dataField, value) {
                this._isValueChangedCalled = true;
                if (!this._isFieldValueChanged) {
                    this._updateFieldValue(dataField, value)
                }
                this._isValueChangedCalled = false
            },
            _dimensionChanged: function() {
                if ("auto" === this.option("colCount") && this.isCachedColCountObsolete()) {
                    this.fireEvent("autoColCountChanged")
                }
            },
            getItemID: function(name) {
                var formInstance = this.option("form");
                return formInstance && formInstance.getItemID(name)
            },
            updateData: function(data, value) {
                var that = this;
                if (typeUtils.isObject(data)) {
                    each(data, function(dataField, fieldValue) {
                        that._updateFieldValue(dataField, fieldValue)
                    })
                } else {
                    if ("string" === typeof data) {
                        that._updateFieldValue(data, value)
                    }
                }
            },
            getEditor: function(field) {
                return this._instanceStorage.findByDataField(field) || this._instanceStorage.findByName(field)
            },
            isSingleColumnMode: function(component) {
                var responsiveBox = this._responsiveBox || component;
                if (responsiveBox) {
                    return responsiveBox.option("currentScreenFactor") === responsiveBox.option("singleColumnScreen")
                }
            }
        });
        registerComponent("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 */ 21),
            Class = __webpack_require__( /*! ../../core/class */ 10);
        var DefaultAdapter = Class.inherit({
            ctor: function(editor, validator) {
                var that = this;
                that.editor = editor;
                that.validator = validator;
                that.validationRequestsCallbacks = Callbacks();
                var handler = function() {
                    that.validationRequestsCallbacks.fire()
                };
                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({
                    isValid: params.isValid,
                    validationError: params.brokenRule
                })
            },
            reset: function() {
                this.editor.reset()
            },
            focus: function() {
                this.editor.focus()
            }
        });
        module.exports = DefaultAdapter
    },
    /*!********************************************!*\
      !*** ./artifacts/transpiled/ui/gallery.js ***!
      \********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            commonUtils = __webpack_require__( /*! ../core/utils/common */ 4),
            typeUtils = __webpack_require__( /*! ../core/utils/type */ 1),
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            getPublicElement = __webpack_require__( /*! ../core/utils/dom */ 12).getPublicElement,
            fx = __webpack_require__( /*! ../animation/fx */ 31),
            clickEvent = __webpack_require__( /*! ../events/click */ 17),
            translator = __webpack_require__( /*! ../animation/translator */ 24),
            devices = __webpack_require__( /*! ../core/devices */ 16),
            Widget = __webpack_require__( /*! ./widget/ui.widget */ 28),
            eventUtils = __webpack_require__( /*! ../events/utils */ 9),
            CollectionWidget = __webpack_require__( /*! ./collection/ui.collection_widget.edit */ 47),
            Swipeable = __webpack_require__( /*! ../events/gesture/swipeable */ 117),
            BindableTemplate = __webpack_require__( /*! ./widget/bindable_template */ 60),
            Deferred = __webpack_require__( /*! ../core/utils/deferred */ 7).Deferred;
        var GALLERY_CLASS = "dx-gallery",
            GALLERY_WRAPPER_CLASS = GALLERY_CLASS + "-wrapper",
            GALLERY_LOOP_CLASS = "dx-gallery-loop",
            GALLERY_ITEM_CONTAINER_CLASS = GALLERY_CLASS + "-container",
            GALLERY_ACTIVE_CLASS = GALLERY_CLASS + "-active",
            GALLERY_ITEM_CLASS = GALLERY_CLASS + "-item",
            GALLERY_INVISIBLE_ITEM_CLASS = GALLERY_CLASS + "-item-invisible",
            GALLERY_LOOP_ITEM_CLASS = GALLERY_ITEM_CLASS + "-loop",
            GALLERY_ITEM_SELECTOR = "." + GALLERY_ITEM_CLASS,
            GALLERY_ITEM_SELECTED_CLASS = GALLERY_ITEM_CLASS + "-selected",
            GALLERY_INDICATOR_CLASS = GALLERY_CLASS + "-indicator",
            GALLERY_INDICATOR_ITEM_CLASS = GALLERY_INDICATOR_CLASS + "-item",
            GALLERY_INDICATOR_ITEM_SELECTOR = "." + GALLERY_INDICATOR_ITEM_CLASS,
            GALLERY_INDICATOR_ITEM_SELECTED_CLASS = GALLERY_INDICATOR_ITEM_CLASS + "-selected",
            GALLERY_IMAGE_CLASS = "dx-gallery-item-image",
            GALLERY_ITEM_DATA_KEY = "dxGalleryItemData",
            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,
                    $element = this.$element(),
                    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._defaultTemplates.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, elementWidth = this.$element().outerWidth(),
                    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._renderDuplicateItems();
                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)
            },
            _renderDuplicateItems: function() {
                if (!this.option("loop")) {
                    return
                }
                var i, items = this.option("items") || [],
                    itemsCount = items.length,
                    lastItemIndex = itemsCount - 1;
                if (!itemsCount) {
                    return
                }
                this._getLoopedItems().remove();
                var duplicateCount = Math.min(this._itemsPerPage(), itemsCount);
                for (i = 0; i < duplicateCount; i++) {
                    this._renderItem(0, items[i]).addClass(GALLERY_LOOP_ITEM_CLASS)
                }
                for (i = 0; i < duplicateCount; i++) {
                    this._renderItem(0, items[lastItemIndex - i]).addClass(GALLERY_LOOP_ITEM_CLASS)
                }
            },
            _getLoopedItems: function() {
                return this.$element().find("." + GALLERY_LOOP_ITEM_CLASS)
            },
            _emptyMessageContainer: function() {
                return this._$wrapper
            },
            _renderItemSizes: function(startIndex) {
                var $items = this._itemElements(),
                    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(),
                    itemsCount = this._itemsCount(),
                    itemsPerPage = this._itemsPerPage(),
                    loopItemsCount = this.$element().find("." + GALLERY_LOOP_ITEM_CLASS).length,
                    lastItemDuplicateIndex = itemsCount + loopItemsCount - 1,
                    offsetRatio = this.option("wrapAround") ? .5 : 0,
                    freeSpace = this._itemFreeSpace(),
                    isGapBetweenImages = !!freeSpace,
                    rtlEnabled = this.option("rtlEnabled"),
                    selectedIndex = this.option("selectedIndex"),
                    side = rtlEnabled ? "Right" : "Left";
                this._itemElements().each(function(index) {
                    var realIndex = index,
                        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),
                        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 positionReady, that = this,
                    itemWidth = this._actualItemWidth(),
                    targetIndex = offset,
                    targetPosition = this._offsetDirection() * targetIndex * (itemWidth + this._itemFreeSpace());
                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,
                    $container = this._$container,
                    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(),
                    actualPosition = -this._maxItemWidth() * this._elementWidth() * this._itemsCount();
                return expectedPosition <= actualPosition + MAX_CALC_ERROR
            },
            _needMoveContainerBack: function() {
                var expectedPosition = this._$container.position().left * this._offsetDirection(),
                    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,
                    $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"),
                    lastIndex = this._pagesCount() - 1,
                    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(),
                    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,
                    instance = args.component;
                if (!instance.option("indicatorEnabled")) {
                    return
                }
                var indicatorIndex = $(e.target).index(),
                    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(),
                    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(),
                    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"),
                    loop = this.option("loop"),
                    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(),
                    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,
                    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"),
                        startOffset = itemsCount - selectedIndex - this._itemsPerPage(),
                        endOffset = selectedIndex,
                        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(),
                    selectedIndex = this.option("selectedIndex"),
                    newIndex = this._fitIndex(selectedIndex - targetOffset),
                    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._renderDuplicateItems();
                            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"),
                    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 */ 531)
    },
    /*!***************************************************************!*\
      !*** ./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 */ 12);
        var _component_registrator = __webpack_require__( /*! ../../core/component_registrator */ 8);
        var _component_registrator2 = _interopRequireDefault(_component_registrator);
        var _empty_template = __webpack_require__( /*! ../widget/empty_template */ 93);
        var _empty_template2 = _interopRequireDefault(_empty_template);
        var _editor = __webpack_require__( /*! ../editor/editor */ 45);
        var _editor2 = _interopRequireDefault(_editor);
        var _ui = __webpack_require__( /*! ../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _quill_registrator = __webpack_require__( /*! ./quill_registrator */ 532);
        var _quill_registrator2 = _interopRequireDefault(_quill_registrator);
        __webpack_require__( /*! ./converters/delta */ 550);
        var _converterController = __webpack_require__( /*! ./converterController */ 218);
        var _converterController2 = _interopRequireDefault(_converterController);
        var _wordLists = __webpack_require__( /*! ./matchers/wordLists */ 551);
        var _wordLists2 = _interopRequireDefault(_wordLists);
        var _formDialog = __webpack_require__( /*! ./ui/formDialog */ 552);
        var _formDialog2 = _interopRequireDefault(_formDialog);

        function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : {
                "default": obj
            }
        }
        var HTML_EDITOR_CLASS = "dx-htmleditor";
        var QUILL_CONTAINER_CLASS = "dx-quill-container";
        var MARKDOWN_VALUE_TYPE = "markdown";
        var ANONYMOUS_TEMPLATE_NAME = "htmlContent";
        var HtmlEditor = _editor2.default.inherit({
            _getDefaultOptions: function() {
                return (0, _extend.extend)(this.callBase(), {
                    focusStateEnabled: true,
                    valueType: "html",
                    placeholder: "",
                    toolbar: null,
                    variables: null,
                    formDialogOptions: null
                })
            },
            _init: function() {
                this.callBase();
                this._quillRegistrator = new _quill_registrator2.default;
                this._prepareConverters()
            },
            _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) {
                    var MarkdownConverter = _converterController2.default.getConverter("markdown");
                    if (MarkdownConverter) {
                        this._markdownConverter = new MarkdownConverter
                    } else {
                        throw _ui2.default.Error("E1051", "markdown")
                    }
                }
            },
            _getAnonymousTemplateName: function() {
                return ANONYMOUS_TEMPLATE_NAME
            },
            _initTemplates: function() {
                this.callBase();
                this._defaultTemplates[ANONYMOUS_TEMPLATE_NAME] = new _empty_template2.default(this)
            },
            _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.callBase();
                this._updateContainerMarkup()
            },
            _hasTranscludeContent: function() {
                return this._$templateResult && this._$templateResult.length
            },
            _updateContainerMarkup: function() {
                var markup = this.option("value");
                if (this._isMarkdownValue()) {
                    markup = this._markdownConverter.toHtml(markup)
                }
                if (markup) {
                    this._$htmlContainer.html(markup)
                }
            },
            _render: function() {
                this._renderHtmlEditor();
                this._renderFormDialog();
                this.callBase()
            },
            _renderHtmlEditor: function() {
                var modulesConfig = this._getModulesConfig();
                this._quillInstance = this._quillRegistrator.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);
                if (this._hasTranscludeContent()) {
                    this._updateHtmlContent(this._deltaConverter.toHtml())
                }
            },
            _getModulesConfig: function() {
                var wordListMatcher = (0, _wordLists2.default)(this._quillRegistrator.getQuill());
                var modulesConfig = (0, _extend.extend)({
                    toolbar: this._getModuleConfigByOption("toolbar"),
                    variables: this._getModuleConfigByOption("variables"),
                    dropImage: this._getBaseModuleConfig(),
                    clipboard: {
                        matchers: [
                            ["p.MsoListParagraphCxSpFirst", wordListMatcher],
                            ["p.MsoListParagraphCxSpMiddle", wordListMatcher],
                            ["p.MsoListParagraphCxSpLast", wordListMatcher]
                        ]
                    }
                }, this._getCustomModules());
                return modulesConfig
            },
            _getModuleConfigByOption: function(userOptionName) {
                var userConfig = this.option(userOptionName);
                if (!(0, _type.isDefined)(userConfig)) {
                    return
                }
                return (0, _extend.extend)(this._getBaseModuleConfig(), userConfig)
            },
            _getBaseModuleConfig: function() {
                return {
                    editorInstance: this
                }
            },
            _getCustomModules: function() {
                var _this = this;
                var modules = {};
                var moduleNames = this._quillRegistrator.getRegisteredModuleNames();
                moduleNames.forEach(function(modulePath) {
                    modules[modulePath] = _this._getBaseModuleConfig()
                });
                return modules
            },
            _textChangeHandler: function(newDelta, oldDelta, source) {
                var htmlMarkup = this._deltaConverter.toHtml();
                this._isEditorUpdating = true;
                var value = this._isMarkdownValue() ? this._updateValueByType(MARKDOWN_VALUE_TYPE, htmlMarkup) : htmlMarkup;
                this.option("value", value)
            },
            _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)
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "value":
                        if (!this._quillInstance) {
                            this._$htmlContainer.html(args.value);
                            return
                        }
                        if (this._isEditorUpdating) {
                            delete this._isEditorUpdating
                        } else {
                            var updatedValue = this._isMarkdownValue() ? this._updateValueByType("HTML", args.value) : args.value;
                            this._updateHtmlContent(updatedValue)
                        }
                        this.callBase(args);
                        break;
                    case "placeholder":
                    case "variables":
                    case "toolbar":
                        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;
                    default:
                        this.callBase(args)
                }
            },
            _updateHtmlContent: function(newMarkup) {
                var newDelta = this._quillInstance.clipboard.convert(newMarkup);
                this._quillInstance.setContents(newDelta)
            },
            _clean: function() {
                if (this._quillInstance) {
                    this._quillInstance.off("text-change", this._textChangeHandlerWithContext)
                }
                this.callBase()
            },
            _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]()
                }
            },
            registerModules: function(modules) {
                this._quillRegistrator.registerModules(modules);
                this.repaint()
            },
            getModule: function(modulePath) {
                return this._quillRegistrator.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)
            }
        });
        (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 _createClass = function() {
            function defineProperties(target, props) {
                for (var i = 0; i < props.length; i++) {
                    var descriptor = props[i];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) {
                        descriptor.writable = true
                    }
                    Object.defineProperty(target, descriptor.key, descriptor)
                }
            }
            return function(Constructor, protoProps, staticProps) {
                if (protoProps) {
                    defineProperties(Constructor.prototype, protoProps)
                }
                if (staticProps) {
                    defineProperties(Constructor, staticProps)
                }
                return Constructor
            }
        }();
        var _quill_importer = __webpack_require__( /*! ./quill_importer */ 57);

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }
        var QuillRegistrator = function() {
            function QuillRegistrator() {
                _classCallCheck(this, QuillRegistrator);
                if (QuillRegistrator.initialized) {
                    return
                }
                var quill = this.getQuill();
                var BaseTheme = __webpack_require__( /*! ./themes/base */ 534).default;
                var Image = __webpack_require__( /*! ./formats/image */ 535).default;
                var Link = __webpack_require__( /*! ./formats/link */ 536).default;
                var FontStyle = __webpack_require__( /*! ./formats/font */ 537).default;
                var SizeStyle = __webpack_require__( /*! ./formats/size */ 538).default;
                var AlignStyle = __webpack_require__( /*! ./formats/align */ 539).default;
                var Toolbar = __webpack_require__( /*! ./modules/toolbar */ 540).default;
                var DropImage = __webpack_require__( /*! ./modules/dropImage */ 546).default;
                var Variables = __webpack_require__( /*! ./modules/variables */ 547).default;
                var DirectionStyle = quill.import("attributors/style/direction");
                quill.register({
                    "formats/align": AlignStyle,
                    "formats/direction": DirectionStyle,
                    "formats/font": FontStyle,
                    "formats/size": SizeStyle,
                    "formats/extendedImage": Image,
                    "formats/link": Link,
                    "modules/toolbar": Toolbar,
                    "modules/dropImage": DropImage,
                    "modules/variables": Variables,
                    "themes/basic": BaseTheme
                }, 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
    },
    /*!*******************************!*\
      !*** external "window.Quill" ***!
      \*******************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports) {
        module.exports = window.Quill
    },
    /*!************************************************************!*\
      !*** ./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_importer = __webpack_require__( /*! ../quill_importer */ 57);

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

        function _possibleConstructorReturn(self, call) {
            if (!self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return call && ("object" === typeof call || "function" === typeof call) ? call : self
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function, not " + typeof superClass)
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    enumerable: false,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass
            }
        }
        var Theme = (0, _quill_importer.getQuill)().import("core/theme");
        var BaseTheme = function(_Theme) {
            _inherits(BaseTheme, _Theme);

            function BaseTheme(quill, options) {
                _classCallCheck(this, BaseTheme);
                var _this = _possibleConstructorReturn(this, (BaseTheme.__proto__ || Object.getPrototypeOf(BaseTheme)).call(this, quill, options));
                _this.quill.root.classList.add("dx-htmleditor-content");
                return _this
            }
            return BaseTheme
        }(Theme);
        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 _createClass = function() {
            function defineProperties(target, props) {
                for (var i = 0; i < props.length; i++) {
                    var descriptor = props[i];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) {
                        descriptor.writable = true
                    }
                    Object.defineProperty(target, descriptor.key, descriptor)
                }
            }
            return function(Constructor, protoProps, staticProps) {
                if (protoProps) {
                    defineProperties(Constructor.prototype, protoProps)
                }
                if (staticProps) {
                    defineProperties(Constructor, staticProps)
                }
                return Constructor
            }
        }();
        var _get = function get(object, property, receiver) {
            if (null === object) {
                object = Function.prototype
            }
            var desc = Object.getOwnPropertyDescriptor(object, property);
            if (void 0 === desc) {
                var parent = Object.getPrototypeOf(object);
                if (null === parent) {
                    return
                } else {
                    return get(parent, property, receiver)
                }
            } else {
                if ("value" in desc) {
                    return desc.value
                } else {
                    var getter = desc.get;
                    if (void 0 === getter) {
                        return
                    }
                    return getter.call(receiver)
                }
            }
        };
        var _quill_importer = __webpack_require__( /*! ../quill_importer */ 57);
        var _type = __webpack_require__( /*! ../../../core/utils/type */ 1);

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

        function _possibleConstructorReturn(self, call) {
            if (!self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return call && ("object" === typeof call || "function" === typeof call) ? call : self
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function, not " + typeof superClass)
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    enumerable: false,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass
            }
        }
        var quill = (0, _quill_importer.getQuill)();
        var Image = quill.import("formats/image");
        var ExtImage = function(_Image) {
            _inherits(ExtImage, _Image);

            function ExtImage() {
                _classCallCheck(this, ExtImage);
                return _possibleConstructorReturn(this, (ExtImage.__proto__ || Object.getPrototypeOf(ExtImage)).apply(this, arguments))
            }
            _createClass(ExtImage, [{
                key: "format",
                value: function(name, value) {
                    if ("float" === name) {
                        this.domNode.style[name] = value
                    } else {
                        _get(ExtImage.prototype.__proto__ || Object.getPrototypeOf(ExtImage.prototype), "format", this).call(this, name, value)
                    }
                }
            }], [{
                key: "create",
                value: function(data) {
                    var SRC = data && data.src || data;
                    var node = _get(ExtImage.__proto__ || Object.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(ExtImage.__proto__ || Object.getPrototypeOf(ExtImage), "formats", this).call(this, domNode);
                    var src = domNode.getAttribute("src");
                    if (src) {
                        formats.src = src
                    }
                    if (domNode.style.float) {
                        formats.float = domNode.style.float
                    }
                    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 _createClass = function() {
            function defineProperties(target, props) {
                for (var i = 0; i < props.length; i++) {
                    var descriptor = props[i];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) {
                        descriptor.writable = true
                    }
                    Object.defineProperty(target, descriptor.key, descriptor)
                }
            }
            return function(Constructor, protoProps, staticProps) {
                if (protoProps) {
                    defineProperties(Constructor.prototype, protoProps)
                }
                if (staticProps) {
                    defineProperties(Constructor, staticProps)
                }
                return Constructor
            }
        }();
        var _get = function get(object, property, receiver) {
            if (null === object) {
                object = Function.prototype
            }
            var desc = Object.getOwnPropertyDescriptor(object, property);
            if (void 0 === desc) {
                var parent = Object.getPrototypeOf(object);
                if (null === parent) {
                    return
                } else {
                    return get(parent, property, receiver)
                }
            } else {
                if ("value" in desc) {
                    return desc.value
                } else {
                    var getter = desc.get;
                    if (void 0 === getter) {
                        return
                    }
                    return getter.call(receiver)
                }
            }
        };
        var _quill_importer = __webpack_require__( /*! ../quill_importer */ 57);
        var _type = __webpack_require__( /*! ../../../core/utils/type */ 1);

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

        function _possibleConstructorReturn(self, call) {
            if (!self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return call && ("object" === typeof call || "function" === typeof call) ? call : self
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function, not " + typeof superClass)
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    enumerable: false,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass
            }
        }
        var quill = (0, _quill_importer.getQuill)();
        var Link = quill.import("formats/link");
        var ExtLink = function(_Link) {
            _inherits(ExtLink, _Link);

            function ExtLink() {
                _classCallCheck(this, ExtLink);
                return _possibleConstructorReturn(this, (ExtLink.__proto__ || Object.getPrototypeOf(ExtLink)).apply(this, arguments))
            }
            _createClass(ExtLink, [{
                key: "formats",
                value: function() {
                    var href = ExtLink.formats(this.domNode);
                    return {
                        link: href,
                        target: this.domNode.getAttribute("target")
                    }
                }
            }, {
                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.removeAttribute("target")
                        } else {
                            this.domNode.setAttribute("target", "_blank")
                        }
                        this.domNode.setAttribute("href", value.href)
                    } else {
                        _get(ExtLink.prototype.__proto__ || Object.getPrototypeOf(ExtLink.prototype), "format", this).call(this, name, value)
                    }
                }
            }], [{
                key: "create",
                value: function(data) {
                    var HREF = data && data.href || data;
                    var node = _get(ExtLink.__proto__ || Object.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: "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_importer = __webpack_require__( /*! ../quill_importer */ 57);
        var quill = (0, _quill_importer.getQuill)();
        var FontStyle = quill.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_importer = __webpack_require__( /*! ../quill_importer */ 57);
        var quill = (0, _quill_importer.getQuill)();
        var SizeStyle = quill.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_importer = __webpack_require__( /*! ../quill_importer */ 57);
        var quill = (0, _quill_importer.getQuill)();
        var AlignStyle = quill.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 _createClass = function() {
            function defineProperties(target, props) {
                for (var i = 0; i < props.length; i++) {
                    var descriptor = props[i];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) {
                        descriptor.writable = true
                    }
                    Object.defineProperty(target, descriptor.key, descriptor)
                }
            }
            return function(Constructor, protoProps, staticProps) {
                if (protoProps) {
                    defineProperties(Constructor.prototype, protoProps)
                }
                if (staticProps) {
                    defineProperties(Constructor, staticProps)
                }
                return Constructor
            }
        }();
        var _quill_importer = __webpack_require__( /*! ../quill_importer */ 57);
        var _renderer = __webpack_require__( /*! ../../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _toolbar = __webpack_require__( /*! ../../toolbar */ 230);
        var _toolbar2 = _interopRequireDefault(_toolbar);
        __webpack_require__( /*! ../../select_box */ 110);
        __webpack_require__( /*! ../../color_box/color_view */ 303);
        var _iterator = __webpack_require__( /*! ../../../core/utils/iterator */ 3);
        var _type = __webpack_require__( /*! ../../../core/utils/type */ 1);
        var _extend = __webpack_require__( /*! ../../../core/utils/extend */ 0);
        var _message = __webpack_require__( /*! ../../../localization/message */ 14);
        var _inflector = __webpack_require__( /*! ../../../core/utils/inflector */ 34);

        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 _possibleConstructorReturn(self, call) {
            if (!self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return call && ("object" === typeof call || "function" === typeof call) ? call : self
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function, not " + typeof superClass)
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    enumerable: false,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass
            }
        }
        var BaseModule = (0, _quill_importer.getQuill)().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 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 HEADING_TEXT = (0, _message.format)("dxHtmlEditor-heading");
        var NORMAL_TEXT = (0, _message.format)("dxHtmlEditor-normalText");
        var ToolbarModule = function(_BaseModule) {
            _inherits(ToolbarModule, _BaseModule);

            function ToolbarModule(quill, options) {
                _classCallCheck(this, ToolbarModule);
                var _this = _possibleConstructorReturn(this, (ToolbarModule.__proto__ || Object.getPrototypeOf(ToolbarModule)).call(this, quill, options));
                _this._editorInstance = options.editorInstance;
                _this._formats = {};
                _this._formatHandlers = _this._getFormatHandlers();
                if ((0, _type.isDefined)(options.items)) {
                    _this._renderToolbar();
                    _this.quill.on("editor-change", function(eventName) {
                        var isSelectionChanged = eventName === SELECTION_CHANGE_EVENT;
                        _this.updateFormatWidgets(isSelectionChanged);
                        _this.updateHistoryWidgets()
                    })
                }
                return _this
            }
            _createClass(ToolbarModule, [{
                key: "_getDefaultClickHandler",
                value: function(formatName) {
                    var _this2 = this;
                    return function(e) {
                        var formats = _this2.quill.getFormat();
                        var value = !formats[formatName];
                        _this2.quill.format(formatName, value, USER_ACTION);
                        _this2._updateFormatWidget(formatName, value, formats)
                    }
                }
            }, {
                key: "_updateFormatWidget",
                value: function(formatName, isApplied, formats) {
                    var widget = this._formats[formatName];
                    if (!widget) {
                        return
                    }
                    if (isApplied) {
                        this._markActiveFormatWidget(formatName, widget, formats)
                    } else {
                        this._resetFormatWidget(formatName, widget);
                        formats.hasOwnProperty(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() {
                        var selection = _this5.quill.getSelection();
                        var formats = _this5.quill.getFormat();
                        var formData = {
                            href: formats.link || "",
                            text: selection ? _this5.quill.getText(selection) : "",
                            target: formats.hasOwnProperty("target") ? !!formats.target : true
                        };
                        _this5._editorInstance.formDialogOption("title", (0, _message.format)(DIALOG_LINK_CAPTION));
                        var promise = _this5._editorInstance.showFormDialog({
                            formData: formData,
                            items: _this5._getLinkFormItems()
                        });
                        promise.done(function(formData) {
                            var index = void 0;
                            var length = void 0;
                            if (selection && !formats.link) {
                                var text = formData.text;
                                formData.text = "";
                                index = selection.index;
                                length = selection.length;
                                length && _this5.quill.deleteText(index, length);
                                _this5.quill.insertText(index, text, "link", formData, USER_ACTION);
                                _this5.quill.setSelection(index + text.length, 0)
                            } else {
                                _this5.quill.format("link", formData, USER_ACTION)
                            }
                        })
                    }
                }
            }, {
                key: "_getLinkFormItems",
                value: function() {
                    return [{
                        dataField: "href",
                        label: {
                            text: (0, _message.format)(DIALOG_LINK_FIELD_URL)
                        }
                    }, {
                        dataField: "text",
                        label: {
                            text: (0, _message.format)(DIALOG_LINK_FIELD_TEXT)
                        }
                    }, {
                        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 = formData.hasOwnProperty("src");
                        var selection = _this6.quill.getSelection();
                        var pasteIndex = selection && selection.index || _this6.quill.getLength();
                        _this6._editorInstance.formDialogOption("title", (0, _message.format)(DIALOG_IMAGE_CAPTION));
                        var formItems = [{
                            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)
                            }
                        }];
                        var promise = _this6._editorInstance.showFormDialog({
                            formData: formData,
                            items: formItems
                        });
                        promise.done(function(formData) {
                            if (isUpdateDialog) {
                                var formatIndex = selection && !selection.length && selection.index - 1 || pasteIndex;
                                _this6.quill.formatText(formatIndex, 1, {
                                    width: formData.width,
                                    height: formData.height,
                                    alt: formData.alt
                                }, USER_ACTION)
                            } else {
                                _this6.quill.insertEmbed(pasteIndex, "extendedImage", formData, USER_ACTION)
                            }
                        })
                    }
                }
            }, {
                key: "_renderToolbar",
                value: function() {
                    var container = this.options.container || this._getContainer();
                    var $container = (0, _renderer2.default)(container);
                    var toolbarItems = this._prepareToolbarItems();
                    var $toolbar = (0, _renderer2.default)("<div>").addClass(TOOLBAR_CLASS).appendTo(container);
                    $container.addClass(TOOLBAR_WRAPPER_CLASS);
                    this.toolbarInstance = this._editorInstance._createComponent($toolbar, _toolbar2.default, {
                        dataSource: toolbarItems
                    });
                    this._editorInstance.on("disposing", function() {
                        $container.empty().removeClass(TOOLBAR_WRAPPER_CLASS)
                    })
                }
            }, {
                key: "_getContainer",
                value: function() {
                    var $container = (0, _renderer2.default)("<div>");
                    this._editorInstance.$element().prepend($container);
                    return $container
                }
            }, {
                key: "_prepareToolbarItems",
                value: function() {
                    var _this7 = this;
                    var resultItems = [];
                    (0, _iterator.each)(this.options.items, function(index, item) {
                        var newItem = void 0;
                        if ((0, _type.isObject)(item)) {
                            newItem = _this7._handleObjectItem(item)
                        } else {
                            if ((0, _type.isString)(item)) {
                                var buttonItemConfig = _this7._prepareButtonItemConfig(item);
                                newItem = _this7._getToolbarItem(buttonItemConfig)
                            }
                        }
                        if (newItem) {
                            resultItems.push(newItem)
                        }
                    });
                    return resultItems
                }
            }, {
                key: "_handleObjectItem",
                value: function(item) {
                    if (item.formatName && item.formatValues && this._isAcceptableItem("dxSelectBox")) {
                        var selectItemConfig = this._prepareSelectItemConfig(item);
                        return this._getToolbarItem(selectItemConfig)
                    } else {
                        if (item.formatName && this._isAcceptableItem("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(item, acceptableWidgetName) {
                    return !item.widget || item.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 _this8 = 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 (!_this8._isReset) {
                                    _this8.quill.format(item.formatName, e.value, USER_ACTION)
                                }
                            }
                        }
                    }, item)
                }
            }, {
                key: "_prepareColorClickHandler",
                value: function(formatName) {
                    var _this9 = this;
                    return function() {
                        var formData = _this9.quill.getFormat();
                        var caption = "color" === formatName ? DIALOG_COLOR_CAPTION : DIALOG_BACKGROUND_CAPTION;
                        _this9._editorInstance.formDialogOption("title", (0, _message.format)(caption));
                        var promise = _this9._editorInstance.showFormDialog({
                            formData: formData,
                            items: [{
                                dataField: formatName,
                                editorType: "dxColorView",
                                editorOptions: {
                                    focusStateEnabled: false
                                },
                                label: {
                                    visible: false
                                }
                            }]
                        });
                        promise.done(function(formData) {
                            _this9.quill.format(formatName, formData[formatName], USER_ACTION)
                        })
                    }
                }
            }, {
                key: "_getToolbarItem",
                value: function(item) {
                    var _this10 = this;
                    var baseItem = {
                        options: {
                            onInitialized: function(e) {
                                if (item.formatName) {
                                    e.component.$element().addClass(TOOLBAR_FORMAT_WIDGET_CLASS);
                                    e.component.$element().toggleClass("dx-" + item.formatName.toLowerCase() + "-format", !!item.formatName);
                                    _this10._formats[item.formatName] = e.component
                                }
                            }
                        }
                    };
                    return (0, _extend.extend)(true, {
                        location: "before",
                        locateInMenu: "auto"
                    }, this._getDefaultConfig(item.formatName), item, baseItem)
                }
            }, {
                key: "_getDefaultItemsConfig",
                value: function() {
                    return {
                        header: {
                            options: {
                                displayExpr: function(item) {
                                    var isHeaderValue = (0, _type.isDefined)(item) && false !== item;
                                    return isHeaderValue ? HEADING_TEXT + " " + 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._formats.undo, undoOps);
                    this._updateHistoryWidget(this._formats.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._formats[widgetName] || this._formats[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 (void 0 === widget.option("value")) {
                        widget.$element().addClass(ACTIVE_FORMAT_CLASS)
                    } else {
                        this._setValueSilent(widget, formats[name])
                    }
                }
            }, {
                key: "_toggleClearFormatting",
                value: function(hasFormats) {
                    if (this._formats.clear) {
                        this._formats.clear.option("disabled", !hasFormats)
                    }
                }
            }, {
                key: "_isColorFormat",
                value: function(formatName) {
                    return "color" === formatName || "background" === formatName
                }
            }, {
                key: "_updateColorWidget",
                value: function(formatName, color) {
                    var formatWidget = this._formats[formatName];
                    if (!formatWidget) {
                        return
                    }
                    formatWidget.$element().find("." + ICON_CLASS).css("borderBottomColor", color || "transparent")
                }
            }, {
                key: "_getFormatWidgetName",
                value: function(formatName, formats) {
                    var widgetName = void 0;
                    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;
                        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 _this11 = this;
                    (0, _iterator.each)(this._formats, function(name, widget) {
                        _this11._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._formats[formatName];
                    if (formatWidget && "dxButton" === formatWidget.NAME) {
                        formatWidget.option("onClick", handler)
                    }
                }
            }]);
            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 */ 217),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            ActionSheet = __webpack_require__( /*! ../action_sheet */ 212);
        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,
            ToolbarStrategy = __webpack_require__( /*! ./ui.toolbar.strategy */ 217),
            ToolbarMenu = __webpack_require__( /*! ./ui.toolbar.menu */ 543),
            DropDownMenu = __webpack_require__( /*! ../drop_down_menu */ 170);
        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,
                    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(),
                    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),
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            List = __webpack_require__( /*! ../list/ui.list.base */ 174);
        var TOOLBAR_MENU_ACTION_CLASS = "dx-toolbar-menu-action",
            TOOLBAR_HIDDEN_BUTTON_CLASS = "dx-toolbar-hidden-button",
            TOOLBAR_MENU_SECTION_CLASS = "dx-toolbar-menu-section",
            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,
                    $container = this._itemContainer();
                each(["before", "center", "after", "menu"], function() {
                    var sectionName = "_$" + this + "Section",
                        $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 itemElement, location = item.location || "menu",
                    $container = this["_$" + location + "Section"];
                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)
                }
                return itemElement
            },
            _getItemTemplateName: function(args) {
                var template = this.callBase(args);
                var data = args.itemData,
                    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/toolbar/ui.toolbar.strategy.list_bottom.js ***!
      \****************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var ListStrategy = __webpack_require__( /*! ./ui.toolbar.strategy.list_base */ 312),
            Swipeable = __webpack_require__( /*! ../../events/gesture/swipeable */ 117);
        var ListBottomStrategy = ListStrategy.inherit({
            NAME: "listBottom",
            _renderWidget: function() {
                this._renderContainerSwipe();
                this.callBase();
                this._toolbar._$toolbarItemsContainer.prependTo(this._listOverlay.$content())
            },
            _renderContainerSwipe: function() {
                this._toolbar._createComponent(this._toolbar._$toolbarItemsContainer, Swipeable, {
                    elastic: false,
                    onStart: this._swipeStartHandler.bind(this),
                    onUpdated: this._swipeUpdateHandler.bind(this),
                    onEnd: this._swipeEndHandler.bind(this),
                    itemSizeFunc: this._getListHeight.bind(this),
                    direction: "vertical"
                })
            },
            _swipeStartHandler: function(e) {
                e.event.maxTopOffset = this._menuShown ? 0 : 1;
                e.event.maxBottomOffset = this._menuShown ? 1 : 0
            },
            _swipeUpdateHandler: function(e) {
                var offset = this._menuShown ? e.event.offset : 1 + e.event.offset;
                this._renderMenuPosition(offset, false)
            },
            _swipeEndHandler: function(e) {
                var targetOffset = e.event.targetOffset;
                targetOffset -= this._menuShown - 1;
                this._toggleMenu(0 === targetOffset, true)
            }
        });
        module.exports = ListBottomStrategy
    },
    /*!*************************************************************************!*\
      !*** ./artifacts/transpiled/ui/toolbar/ui.toolbar.strategy.list_top.js ***!
      \*************************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            ListStrategy = __webpack_require__( /*! ./ui.toolbar.strategy.list_base */ 312),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            translator = __webpack_require__( /*! ../../animation/translator */ 24);
        var ListTopStrategy = ListStrategy.inherit({
            NAME: "listTop",
            _listOverlayConfig: function() {
                var config = this.callBase();
                return extend({}, config, {
                    onContentReady: this._setItemsContainerZIndex.bind(this)
                })
            },
            _setItemsContainerZIndex: function(e) {
                var overlayZIndex = e.component.$content().css("zIndex");
                this._toolbar._$toolbarItemsContainer.css("zIndex", overlayZIndex + 1)
            },
            _renderMenuPosition: function(offset, animate) {
                var $element = this._toolbar._$toolbarItemsContainer;
                var pos = this._calculateItemsContainerOffset(offset);
                if (animate) {
                    this._animateMenuToggling($element, pos, this._menuShown)
                } else {
                    translator.move($element, {
                        top: pos
                    })
                }
                return this.callBase(offset, animate)
            },
            _calculateItemsContainerOffset: function(offset) {
                offset = (offset || 0) - 1;
                var maxOffset = this._getItemsContainerHeight();
                return offset * maxOffset
            },
            _getItemsContainerHeight: function() {
                var semiHiddenHeight = this._toolbar._$toolbarItemsContainer.height() - this._toolbar.$element().height();
                return semiHiddenHeight
            },
            _listOutsideClickHandler: function(e) {
                var $target = $(e.target);
                var isOverlayClick = $target.closest(this._listOverlay.$content()).length > 0;
                var isItemsContainerClick = $target.closest(this._toolbar._$toolbarItemsContainer).length > 0;
                if (!isOverlayClick && !isItemsContainerClick) {
                    this._toggleMenu(false, true)
                }
            }
        });
        module.exports = ListTopStrategy
    },
    /*!******************************************************************!*\
      !*** ./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 _createClass = function() {
            function defineProperties(target, props) {
                for (var i = 0; i < props.length; i++) {
                    var descriptor = props[i];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) {
                        descriptor.writable = true
                    }
                    Object.defineProperty(target, descriptor.key, descriptor)
                }
            }
            return function(Constructor, protoProps, staticProps) {
                if (protoProps) {
                    defineProperties(Constructor.prototype, protoProps)
                }
                if (staticProps) {
                    defineProperties(Constructor, staticProps)
                }
                return Constructor
            }
        }();
        var _quill_importer = __webpack_require__( /*! ../quill_importer */ 57);
        var _events_engine = __webpack_require__( /*! ../../../events/core/events_engine */ 5);
        var _events_engine2 = _interopRequireDefault(_events_engine);
        var _utils = __webpack_require__( /*! ../../../events/utils */ 9);
        var _utils2 = _interopRequireDefault(_utils);
        var _iterator = __webpack_require__( /*! ../../../core/utils/iterator */ 3);
        var _browser = __webpack_require__( /*! ../../../core/utils/browser */ 38);
        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 _possibleConstructorReturn(self, call) {
            if (!self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return call && ("object" === typeof call || "function" === typeof call) ? call : self
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function, not " + typeof superClass)
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    enumerable: false,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass
            }
        }
        var BaseModule = (0, _quill_importer.getQuill)().import("core/module");
        var DropImageModule = function(_BaseModule) {
            _inherits(DropImageModule, _BaseModule);

            function DropImageModule(quill, options) {
                _classCallCheck(this, DropImageModule);
                var _this = _possibleConstructorReturn(this, (DropImageModule.__proto__ || Object.getPrototypeOf(DropImageModule)).call(this, quill, options));
                _this.editorInstance = options.editorInstance;
                var widgetName = _this.editorInstance.NAME;
                _events_engine2.default.on(_this.quill.root, _utils2.default.addNamespace("dragover", widgetName), _this._dragOverHandler.bind(_this));
                _events_engine2.default.on(_this.quill.root, _utils2.default.addNamespace("drop", widgetName), _this._dropHandler.bind(_this));
                _events_engine2.default.on(_this.quill.root, _utils2.default.addNamespace("paste", widgetName), _this._pasteHandler.bind(_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(e) {
                    var _this2 = this;
                    var data = e.originalEvent.clipboardData;
                    var hasDataItems = data && data.items && data.items.length;
                    if (hasDataItems) {
                        this._getImage(data.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;
                    (0, _iterator.each)(files, function(index, file) {
                        if (!_this3._isImage(file)) {
                            return
                        }
                        var reader = new FileReader;
                        reader.onload = function(e) {
                            callback(e.target.result)
                        };
                        var readableFile = file.getAsFile ? file.getAsFile() : file;
                        if (readableFile instanceof 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 _createClass = function() {
            function defineProperties(target, props) {
                for (var i = 0; i < props.length; i++) {
                    var descriptor = props[i];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) {
                        descriptor.writable = true
                    }
                    Object.defineProperty(target, descriptor.key, descriptor)
                }
            }
            return function(Constructor, protoProps, staticProps) {
                if (protoProps) {
                    defineProperties(Constructor.prototype, protoProps)
                }
                if (staticProps) {
                    defineProperties(Constructor, staticProps)
                }
                return Constructor
            }
        }();
        var _get = function get(object, property, receiver) {
            if (null === object) {
                object = Function.prototype
            }
            var desc = Object.getOwnPropertyDescriptor(object, property);
            if (void 0 === desc) {
                var parent = Object.getPrototypeOf(object);
                if (null === parent) {
                    return
                } else {
                    return get(parent, property, receiver)
                }
            } else {
                if ("value" in desc) {
                    return desc.value
                } else {
                    var getter = desc.get;
                    if (void 0 === getter) {
                        return
                    }
                    return getter.call(receiver)
                }
            }
        };
        var _quill_importer = __webpack_require__( /*! ../quill_importer */ 57);
        var _renderer = __webpack_require__( /*! ../../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _popup = __webpack_require__( /*! ./popup */ 548);
        var _popup2 = _interopRequireDefault(_popup);
        var _variable = __webpack_require__( /*! ../formats/variable */ 549);
        var _variable2 = _interopRequireDefault(_variable);
        var _extend = __webpack_require__( /*! ../../../core/utils/extend */ 0);

        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 _possibleConstructorReturn(self, call) {
            if (!self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return call && ("object" === typeof call || "function" === typeof call) ? call : self
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function, not " + typeof superClass)
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    enumerable: false,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass
            }
        }
        var VARIABLE_FORMAT_CLASS = "dx-variable-format";
        var ACTIVE_FORMAT_CLASS = "dx-format-active";
        (0, _quill_importer.getQuill)().register({
            "formats/variable": _variable2.default
        }, true);
        var VariableModule = function(_PopupModule) {
            _inherits(VariableModule, _PopupModule);
            _createClass(VariableModule, [{
                key: "_getDefaultOptions",
                value: function() {
                    var baseConfig = _get(VariableModule.prototype.__proto__ || Object.getPrototypeOf(VariableModule.prototype), "_getDefaultOptions", this).call(this);
                    return (0, _extend.extend)(baseConfig, {
                        escapeChar: ""
                    })
                }
            }]);

            function VariableModule(quill, options) {
                _classCallCheck(this, VariableModule);
                var _this = _possibleConstructorReturn(this, (VariableModule.__proto__ || Object.getPrototypeOf(VariableModule)).call(this, quill, options));
                var toolbar = quill.getModule("toolbar");
                if (toolbar) {
                    toolbar.addClickHandler("variable", _this.showPopup.bind(_this))
                }
                quill.keyboard.addBinding({
                    key: "P",
                    altKey: true
                }, _this.showPopup.bind(_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(VariableModule.prototype.__proto__ || Object.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 = this.quill.root.getBoundingClientRect();
                        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/modules/popup.js ***!
      \**************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _createClass = function() {
            function defineProperties(target, props) {
                for (var i = 0; i < props.length; i++) {
                    var descriptor = props[i];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) {
                        descriptor.writable = true
                    }
                    Object.defineProperty(target, descriptor.key, descriptor)
                }
            }
            return function(Constructor, protoProps, staticProps) {
                if (protoProps) {
                    defineProperties(Constructor.prototype, protoProps)
                }
                if (staticProps) {
                    defineProperties(Constructor, staticProps)
                }
                return Constructor
            }
        }();
        var _quill_importer = __webpack_require__( /*! ../quill_importer */ 57);
        var _renderer = __webpack_require__( /*! ../../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../../core/utils/extend */ 0);
        var _popup = __webpack_require__( /*! ../../popup */ 55);
        var _popup2 = _interopRequireDefault(_popup);
        var _list = __webpack_require__( /*! ../../list */ 109);
        var _list2 = _interopRequireDefault(_list);

        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 _possibleConstructorReturn(self, call) {
            if (!self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return call && ("object" === typeof call || "function" === typeof call) ? call : self
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function, not " + typeof superClass)
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    enumerable: false,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass
            }
        }
        var SUGGESTION_LIST_CLASS = "dx-suggestion-list";
        var BaseModule = (0, _quill_importer.getQuill)().import("core/module");
        var ListPopupModule = function(_BaseModule) {
            _inherits(ListPopupModule, _BaseModule);
            _createClass(ListPopupModule, [{
                key: "_getDefaultOptions",
                value: function() {
                    return {
                        dataSource: null
                    }
                }
            }]);

            function ListPopupModule(quill, options) {
                _classCallCheck(this, ListPopupModule);
                var _this = _possibleConstructorReturn(this, (ListPopupModule.__proto__ || Object.getPrototypeOf(ListPopupModule)).call(this, quill, options));
                _this.options = (0, _extend.extend)({}, _this._getDefaultOptions(), options);
                _this._popup = _this.renderPopup();
                return _this
            }
            _createClass(ListPopupModule, [{
                key: "renderList",
                value: function($container, options) {
                    $container.addClass(SUGGESTION_LIST_CLASS);
                    this._list = this.options.editorInstance._createComponent($container, _list2.default, options)
                }
            }, {
                key: "renderPopup",
                value: function() {
                    var editorInstance = this.options.editorInstance,
                        $container = (0, _renderer2.default)("<div>").appendTo(editorInstance.$element()),
                        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
                    }
                }
            }, {
                key: "_getListConfig",
                value: function(options) {
                    return {
                        dataSource: options.dataSource,
                        onSelectionChanged: this.selectionChangedHandler.bind(this),
                        selectionMode: "single"
                    }
                }
            }, {
                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
                }
            }]);
            return ListPopupModule
        }(BaseModule);
        exports.default = ListPopupModule
    },
    /*!*****************************************************************!*\
      !*** ./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 _createClass = function() {
            function defineProperties(target, props) {
                for (var i = 0; i < props.length; i++) {
                    var descriptor = props[i];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) {
                        descriptor.writable = true
                    }
                    Object.defineProperty(target, descriptor.key, descriptor)
                }
            }
            return function(Constructor, protoProps, staticProps) {
                if (protoProps) {
                    defineProperties(Constructor.prototype, protoProps)
                }
                if (staticProps) {
                    defineProperties(Constructor, staticProps)
                }
                return Constructor
            }
        }();
        var _get = function get(object, property, receiver) {
            if (null === object) {
                object = Function.prototype
            }
            var desc = Object.getOwnPropertyDescriptor(object, property);
            if (void 0 === desc) {
                var parent = Object.getPrototypeOf(object);
                if (null === parent) {
                    return
                } else {
                    return get(parent, property, receiver)
                }
            } else {
                if ("value" in desc) {
                    return desc.value
                } else {
                    var getter = desc.get;
                    if (void 0 === getter) {
                        return
                    }
                    return getter.call(receiver)
                }
            }
        };
        var _quill_importer = __webpack_require__( /*! ../quill_importer */ 57);
        var _common = __webpack_require__( /*! ../../../core/utils/common */ 4);
        var _extend = __webpack_require__( /*! ../../../core/utils/extend */ 0);

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

        function _possibleConstructorReturn(self, call) {
            if (!self) {
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
            }
            return call && ("object" === typeof call || "function" === typeof call) ? call : self
        }

        function _inherits(subClass, superClass) {
            if ("function" !== typeof superClass && null !== superClass) {
                throw new TypeError("Super expression must either be null or a function, not " + typeof superClass)
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
                constructor: {
                    value: subClass,
                    enumerable: false,
                    writable: true,
                    configurable: true
                }
            });
            if (superClass) {
                Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass
            }
        }
        var quill = (0, _quill_importer.getQuill)();
        var Embed = quill.import("blots/embed");
        var VARIABLE_CLASS = "dx-variable";
        var Variable = function(_Embed) {
            _inherits(Variable, _Embed);

            function Variable() {
                _classCallCheck(this, Variable);
                return _possibleConstructorReturn(this, (Variable.__proto__ || Object.getPrototypeOf(Variable)).apply(this, arguments))
            }
            _createClass(Variable, null, [{
                key: "create",
                value: function(data) {
                    var node = _get(Variable.__proto__ || Object.getPrototypeOf(Variable), "create", this).call(this),
                        startEscapeChar = void 0,
                        endEscapeChar = void 0,
                        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/converters/delta.js ***!
      \*****************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        Object.defineProperty(exports, "__esModule", {
            value: true
        });
        var _slicedToArray = function() {
            function sliceIterator(arr, i) {
                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 && _i.return) {
                            _i.return()
                        }
                    } finally {
                        if (_d) {
                            throw _e
                        }
                    }
                }
                return _arr
            }
            return function(arr, i) {
                if (Array.isArray(arr)) {
                    return arr
                } else {
                    if (Symbol.iterator in Object(arr)) {
                        return sliceIterator(arr, i)
                    } else {
                        throw new TypeError("Invalid attempt to destructure non-iterable instance")
                    }
                }
            }
        }();
        var _createClass = function() {
            function defineProperties(target, props) {
                for (var i = 0; i < props.length; i++) {
                    var descriptor = props[i];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) {
                        descriptor.writable = true
                    }
                    Object.defineProperty(target, descriptor.key, descriptor)
                }
            }
            return function(Constructor, protoProps, staticProps) {
                if (protoProps) {
                    defineProperties(Constructor.prototype, protoProps)
                }
                if (staticProps) {
                    defineProperties(Constructor, staticProps)
                }
                return Constructor
            }
        }();
        var _converterController = __webpack_require__( /*! ../converterController */ 218);
        var _converterController2 = _interopRequireDefault(_converterController);
        var _quill_importer = __webpack_require__( /*! ../quill_importer */ 57);
        var _type = __webpack_require__( /*! ../../../core/utils/type */ 1);

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

        function _toConsumableArray(arr) {
            if (Array.isArray(arr)) {
                for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {
                    arr2[i] = arr[i]
                }
                return arr2
            } else {
                return Array.from(arr)
            }
        }

        function _toArray(arr) {
            return Array.isArray(arr) ? arr : Array.from(arr)
        }

        function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
                throw new TypeError("Cannot call a class as a function")
            }
        }
        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)
            }
            _createClass(DeltaConverter, [{
                key: "setQuillInstance",
                value: function(quillInstance) {
                    this.quillInstance = quillInstance
                }
            }, {
                key: "toHtml",
                value: function() {
                    var index = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0;
                    var length = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : this.quillInstance.getLength() - index;
                    if (!this.quillInstance) {
                        return
                    }
                    var _quillInstance$scroll = this.quillInstance.scroll.line(index),
                        _quillInstance$scroll2 = _slicedToArray(_quillInstance$scroll, 2),
                        line = _quillInstance$scroll2[0],
                        lineOffset = _quillInstance$scroll2[1];
                    if (line.length() >= lineOffset + length) {
                        return this._convertHTML(line, lineOffset, length, true)
                    }
                    return this._convertHTML(this.quillInstance.scroll, index, length, true)
                }
            }, {
                key: "_convertHTML",
                value: function(blot, index, length) {
                    var _this = this;
                    var isRoot = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : false;
                    var TextBlot = (0, _quill_importer.getQuill)().import("blots/text");
                    if ((0, _type.isFunction)(blot.html)) {
                        return blot.html(index, length)
                    }
                    if (blot instanceof 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))
                        });
                        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(">" + innerHTML + "<"),
                            _outerHTML$split2 = _slicedToArray(_outerHTML$split, 2),
                            start = _outerHTML$split2[0],
                            end = _outerHTML$split2[1];
                        return start + ">" + parts.join("") + "<" + end
                    }
                    return blot.domNode.outerHTML
                }
            }, {
                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, [])
                }
            }, {
                key: "_getListMarkup",
                value: function(items, lastIndent, listTypes) {
                    if (0 === items.length) {
                        var _endTag = this._getListType(listTypes.pop());
                        if (lastIndent <= 0) {
                            return "</li></" + _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);
                        return this._processIndentListMarkup(childItemArgs, restItemsArgs, tag)
                    }
                    if (indent === lastIndent) {
                        return this._processIndentListMarkup(childItemArgs, restItemsArgs)
                    }
                    var endTag = this._getListType(listTypes.pop());
                    return this._processListMarkup([items, lastIndent - 1, listTypes], endTag)
                }
            }, {
                key: "_processListMarkup",
                value: function(childItemArgs, tag) {
                    return "</li></" + tag + ">" + this._getListMarkup.apply(this, _toConsumableArray(childItemArgs))
                }
            }, {
                key: "_processIndentListMarkup",
                value: function(childItemArgs, restItemsArgs) {
                    var tag = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "/li";
                    return "<" + tag + "><li>" + this._convertHTML.apply(this, _toConsumableArray(childItemArgs)) + this._getListMarkup.apply(this, _toConsumableArray(restItemsArgs))
                }
            }, {
                key: "_getListType",
                value: function(type) {
                    return "ordered" === type ? "ol" : "ul"
                }
            }, {
                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").replace(/\n+/g, "");
            var level = style.match(/level(\d+)/);
            return level ? level[1] - 1 : 0
        }

        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+/);
                if (!listDecoratorMatches) {
                    return delta
                }
                insertOperation.insert = insertOperation.insert.substring(listDecoratorMatches[0].length, insertOperation.insert.length);
                var indent = getIndent(node);
                removeNewLineChar(ops);
                ops.push({
                    insert: "\n",
                    attributes: {
                        list: getListType(listDecoratorMatches),
                        indent: indent
                    }
                });
                return new Delta(ops)
            }
        };
        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 _createClass = function() {
            function defineProperties(target, props) {
                for (var i = 0; i < props.length; i++) {
                    var descriptor = props[i];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) {
                        descriptor.writable = true
                    }
                    Object.defineProperty(target, descriptor.key, descriptor)
                }
            }
            return function(Constructor, protoProps, staticProps) {
                if (protoProps) {
                    defineProperties(Constructor.prototype, protoProps)
                }
                if (staticProps) {
                    defineProperties(Constructor, staticProps)
                }
                return Constructor
            }
        }();
        var _renderer = __webpack_require__( /*! ../../../core/renderer */ 2);
        var _renderer2 = _interopRequireDefault(_renderer);
        var _extend = __webpack_require__( /*! ../../../core/utils/extend */ 0);
        var _popup = __webpack_require__( /*! ../../popup */ 55);
        var _popup2 = _interopRequireDefault(_popup);
        var _form = __webpack_require__( /*! ../../form */ 171);
        var _form2 = _interopRequireDefault(_form);
        var _deferred = __webpack_require__( /*! ../../../core/utils/deferred */ 7);
        var _message = __webpack_require__( /*! ../../../localization/message */ 14);

        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")
            }
        }
        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(e) {
                                    _this.hide(e.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: "_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),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            window = __webpack_require__( /*! ../core/utils/window */ 6).getWindow(),
            support = __webpack_require__( /*! ../core/utils/support */ 44),
            commonUtils = __webpack_require__( /*! ../core/utils/common */ 4),
            domUtils = __webpack_require__( /*! ../core/utils/dom */ 12),
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            inkRipple = __webpack_require__( /*! ./widget/utils.ink_ripple */ 72),
            messageLocalization = __webpack_require__( /*! ../localization/message */ 14),
            devices = __webpack_require__( /*! ../core/devices */ 16),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            eventUtils = __webpack_require__( /*! ../events/utils */ 9),
            DropDownList = __webpack_require__( /*! ./drop_down_editor/ui.drop_down_list */ 213),
            themes = __webpack_require__( /*! ./themes */ 20),
            clickEvent = __webpack_require__( /*! ../events/click */ 17),
            Popover = __webpack_require__( /*! ./popover */ 134),
            TextBox = __webpack_require__( /*! ./text_box */ 101),
            ChildDefaultTemplate = __webpack_require__( /*! ./widget/child_default_template */ 102),
            translator = __webpack_require__( /*! ../animation/translator */ 24);
        var LOOKUP_CLASS = "dx-lookup",
            LOOKUP_SEARCH_CLASS = "dx-lookup-search",
            LOOKUP_SEARCH_WRAPPER_CLASS = "dx-lookup-search-wrapper",
            LOOKUP_FIELD_CLASS = "dx-lookup-field",
            LOOKUP_ARROW_CLASS = "dx-lookup-arrow",
            LOOKUP_FIELD_WRAPPER_CLASS = "dx-lookup-field-wrapper",
            LOOKUP_POPUP_CLASS = "dx-lookup-popup",
            LOOKUP_POPUP_WRAPPER_CLASS = "dx-lookup-popup-wrapper",
            LOOKUP_POPUP_SEARCH_CLASS = "dx-lookup-popup-search",
            LOOKUP_POPOVER_MODE = "dx-lookup-popover-mode",
            LOOKUP_EMPTY_CLASS = "dx-lookup-empty",
            LOOKUP_POPUP_VALIDATION_MESSAGE = "dx-lookup-validation-message",
            LOOKUP_POPUP_INVALID_CLASS = "dx-lookup-invalid";
        var POPUP_OPTION_MAP = {
            popupWidth: "width",
            popupHeight: "height"
        };
        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(), {
                    title: "",
                    titleTemplate: "title",
                    onTitleRendered: null,
                    placeholder: messageLocalization.format("Select"),
                    searchPlaceholder: messageLocalization.format("Search"),
                    searchEnabled: true,
                    cleanSearchOnOpening: true,
                    fullScreen: false,
                    showCancelButton: true,
                    showClearButton: false,
                    clearButtonText: messageLocalization.format("Clear"),
                    applyButtonText: messageLocalization.format("Done"),
                    popupWidth: function() {
                        return .8 * $(window).width()
                    },
                    popupHeight: function() {
                        return .8 * $(window).height()
                    },
                    shading: true,
                    closeOnOutsideClick: false,
                    position: void 0,
                    animation: {},
                    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,
                    showPopupTitle: true,
                    focusStateEnabled: false,
                    _scrollToSelectedItemEnabled: false
                })
            },
            _defaultOptionsRules: function() {
                var themeName = themes.current();
                return this.callBase().concat([{
                    device: function() {
                        return !support.nativeScrolling
                    },
                    options: {
                        useNativeScrolling: false
                    }
                }, {
                    device: function(_device) {
                        return !devices.isSimulator() && "generic" === devices.real().platform && "generic" === _device.platform
                    },
                    options: {
                        usePopover: true,
                        popupHeight: "auto"
                    }
                }, {
                    device: function(_device2) {
                        return "win" === _device2.platform && _device2.phone && _device2.version && 8 === _device2.version[0]
                    },
                    options: {
                        showCancelButton: false,
                        fullScreen: true
                    }
                }, {
                    device: function(_device3) {
                        return "win" === _device3.platform && !_device3.phone && _device3.version && 8 === _device3.version[0]
                    },
                    options: {
                        popupWidth: function() {
                            return $(window).width()
                        }
                    }
                }, {
                    device: {
                        platform: "ios",
                        phone: true
                    },
                    options: {
                        fullScreen: true
                    }
                }, {
                    device: {
                        platform: "ios",
                        tablet: true
                    },
                    options: {
                        popupWidth: function() {
                            return .4 * Math.min($(window).width(), $(window).height())
                        },
                        popupHeight: "auto",
                        usePopover: true,
                        useInkRipple: false
                    }
                }, {
                    device: function() {
                        return "desktop" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }, {
                    device: function() {
                        return themes.isAndroid5(themeName)
                    },
                    options: {
                        useInkRipple: true
                    }
                }, {
                    device: function() {
                        return themes.isMaterial(themeName)
                    },
                    options: {
                        usePopover: false,
                        closeOnOutsideClick: true,
                        popupWidth: function() {
                            return $(this.element()).outerWidth()
                        }.bind(this),
                        popupHeight: function() {
                            return this._getPopupHeight(MATERIAL_LOOKUP_LIST_ITEMS_COUNT)
                        }.bind(this),
                        searchEnabled: false,
                        showCancelButton: false,
                        showPopupTitle: false,
                        position: {
                            my: "left top",
                            at: "left top",
                            of: this.element()
                        },
                        _scrollToSelectedItemEnabled: true
                    }
                }])
            },
            _initTemplates: function() {
                this.callBase();
                this._defaultTemplates.group = new ChildDefaultTemplate("group", this);
                this._defaultTemplates.title = new ChildDefaultTemplate("title", this)
            },
            _initMarkup: function() {
                this.$element().addClass(LOOKUP_CLASS).toggleClass(LOOKUP_POPOVER_MODE, this.option("usePopover"));
                this._renderSubmitElement();
                this.callBase()
            },
            _inputWrapper: function() {
                return this.$element().find("." + LOOKUP_FIELD_WRAPPER_CLASS)
            },
            _renderSubmitElement: function() {
                this._$submitElement = $("<input>").attr("type", "hidden").appendTo(this.$element())
            },
            _dataSourceOptions: function() {
                return extend(this.callBase(), {
                    paginate: true
                })
            },
            _getSubmitElement: function() {
                return this._$submitElement
            },
            _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()
            },
            _renderInkRipple: function() {
                this._inkRipple = inkRipple.render()
            },
            _toggleOpenState: function() {
                this.callBase();
                if (!this.option("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._$field.text(this.option("displayValue") || this.option("placeholder"));
                this.$element().toggleClass(LOOKUP_EMPTY_CLASS, !this.option("selectedItem"))
            },
            _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() {
                var validationError;
                if (this._$popupValidationMessage) {
                    validationError = this.option("validationError");
                    if (validationError && validationError.message) {
                        this._$popupValidationMessage.text(validationError.message);
                        this._popup.$content().addClass(LOOKUP_POPUP_INVALID_CLASS)
                    } else {
                        this._popup.$content().removeClass(LOOKUP_POPUP_INVALID_CLASS)
                    }
                }
                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("fullScreen") && this.option("_scrollToSelectedItemEnabled")) {
                    this._popup.option("position").of = $(window)
                }
            },
            _scrollToSelectedItem: function() {
                var selectedIndex = this._list.option("selectedIndex"),
                    listItems = this._list.option("items"),
                    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() {
                var selectedIndex = this._list.option("selectedIndex");
                if (selectedIndex === -1) {
                    return
                }
                var selectedListItem = $(this._list.element()).find("." + LIST_ITEM_SELECTED_CLASS),
                    differenceOfHeights = (selectedListItem.height() - $(this.element()).height()) / 2,
                    popupContentParent = $(this._popup.content()).parent(),
                    differenceOfOffsets = selectedListItem.offset().top - popupContentParent.offset().top,
                    lookupTop = $(this.element()).offset().top,
                    popupOffsetY = differenceOfHeights;
                if (lookupTop > differenceOfOffsets) {
                    popupOffsetY += differenceOfOffsets
                } else {
                    this._scrollToSelectedItem()
                }
                var position = translator.locate(popupContentParent);
                translator.move(popupContentParent, {
                    left: 0,
                    top: position.top - popupOffsetY
                })
            },
            _getPopupHeight: function(listItemsCount) {
                return this._list && this._list.itemElements() ? this._list.itemElements().height() * listItemsCount + 2 * MATERIAL_LOOKUP_LIST_PADDING : "auto"
            },
            _renderPopup: function() {
                if (this.option("usePopover") && !this.option("fullScreen")) {
                    this._renderPopover()
                } else {
                    this.callBase()
                }
                this._$popup.addClass(LOOKUP_POPUP_CLASS);
                this._popup._wrapper().addClass(LOOKUP_POPUP_WRAPPER_CLASS)
            },
            _popupOptionMap: function(optionName) {
                return POPUP_OPTION_MAP[optionName] || optionName
            },
            _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("popupWidth") ? 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)
                });
                this._popup.option("onContentReady", this._contentReadyHandler.bind(this));
                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(), {
                    showTitle: this.option("showPopupTitle"),
                    title: this.option("title"),
                    titleTemplate: this._getTemplateByOption("titleTemplate"),
                    onTitleRendered: this.option("onTitleRendered"),
                    toolbarItems: this._getPopupToolbarItems(),
                    fullScreen: this.option("fullScreen"),
                    shading: this.option("shading"),
                    closeOnTargetScroll: false,
                    closeOnOutsideClick: this.option("closeOnOutsideClick"),
                    onPositioned: null
                });
                delete result.animation;
                delete result.position;
                result.maxHeight = function() {
                    return $(window).height()
                };
                each(["position", "animation", "popupWidth", "popupHeight"], function(_, optionName) {
                    if (void 0 !== this.option(optionName)) {
                        result[this._popupOptionMap(optionName)] = this.option(optionName)
                    }
                }.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: {
                        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("popupWidth")) {
                    this.option("popupWidth", this.$element().width())
                }
                this.callBase()
            },
            _updatePopupDimensions: function() {
                this._updatePopupHeight()
            },
            _input: function() {
                return this._$searchBox || this.callBase()
            },
            _renderPopupContent: function() {
                if ("dxPopup" === this._popup.NAME) {
                    this._$popupValidationMessage = $("<div>").addClass(LOOKUP_POPUP_VALIDATION_MESSAGE).appendTo(this._popup.$content())
                }
                this.callBase();
                this._renderSearch();
                this._attachSearchChildProcessor()
            },
            _attachSearchChildProcessor: function() {
                if (this.option("searchEnabled") && this._searchBox) {
                    this._listKeyboardProcessor = this._searchBox._keyboardProcessor.attachChildProcessor();
                    this._setListOption("_keyboardProcessor", this._listKeyboardProcessor)
                } else {
                    this._setListOption("_keyboardProcessor", void 0)
                }
            },
            _renderSearch: function() {
                this._$searchWrapper && this._$searchWrapper.remove();
                delete this._$searchWrapper;
                this._$searchBox && this._$searchBox.remove();
                delete this._$searchBox;
                delete this._searchBox;
                if (this.option("searchEnabled")) {
                    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(),
                        searchMode = currentDevice.android && currentDevice.version[0] >= 5 ? "text" : "search";
                    this._searchBox = this._createComponent($searchBox, TextBox, {
                        mode: searchMode,
                        showClearButton: true,
                        valueChangeEvent: this.option("valueChangeEvent"),
                        onValueChanged: this._searchHandler.bind(this)
                    });
                    this._registerSearchKeyHandlers();
                    $searchWrapper.insertBefore(this._$list)
                }
                this._renderSearchVisibility();
                this._setSearchPlaceholder()
            },
            _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)
            },
            _renderSearchVisibility: function() {
                if (this._popup) {
                    this._popup._wrapper().toggleClass(LOOKUP_POPUP_SEARCH_CLASS, this.option("searchEnabled"))
                }
            },
            _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.option("onScroll"),
                    onPullRefresh: this.option("onPullRefresh"),
                    onPageLoading: this.option("onPageLoading"),
                    pageLoadMode: this.option("pageLoadMode"),
                    nextButtonText: this.option("nextButtonText"),
                    _keyboardProcessor: this._listKeyboardProcessor,
                    onFocusIn: this._onFocusInHandler.bind(this),
                    onSelectionChanged: this._getSelectionChangedHandler()
                })
            },
            _getSelectionChangedHandler: function() {
                return this.option("showSelectionControls") ? this._selectionChangeHandler.bind(this) : commonUtils.noop
            },
            _onFocusInHandler: function() {
                this._setListOption("_keyboardProcessor", void 0)
            },
            _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")
                }
            },
            _attachChildKeyboardEvents: commonUtils.noop,
            _focusTarget: function() {
                return this._$field
            },
            _keyboardEventBindingTarget: function() {
                return this._$field
            },
            _listItemClickHandler: function(e) {
                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._renderField();
                    this._refreshSelected();
                    this._setSubmitValue()
                }.bind(this))
            },
            _setSubmitValue: function() {
                var value = this.option("value"),
                    submitValue = "this" === this.option("valueExpr") ? this._displayGetter(value) : value;
                this._$submitElement.val(submitValue)
            },
            _renderPlaceholder: function() {
                if (0 === this.$element().find("input").length) {
                    return
                }
                this.callBase()
            },
            _clean: function() {
                this._$fieldWrapper.remove();
                this._$searchBox = null;
                delete this._inkRipple;
                this.callBase()
            },
            _optionChanged: function(args) {
                var name = args.name;
                var value = args.value;
                switch (name) {
                    case "searchEnabled":
                        this._popup && this._renderSearch();
                        this._attachSearchChildProcessor();
                        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":
                        this._setPopupOption(name);
                        break;
                    case "fullScreen":
                    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("popupWidth", "auto" === value ? this.initialOption("popupWidth") : value);
                        break;
                    case "popupHeight":
                        this._setPopupOption("popupHeight", "auto" === value ? this.initialOption("popupHeight") : value);
                        break;
                    case "pullRefreshEnabled":
                    case "useNativeScrolling":
                    case "pullingDownText":
                    case "pulledDownText":
                    case "refreshingText":
                    case "pageLoadingText":
                    case "onScroll":
                    case "onPullRefresh":
                    case "onPageLoading":
                    case "nextButtonText":
                    case "grouped":
                    case "groupTemplate":
                        this._setListOption(name);
                        break;
                    case "pageLoadMode":
                        this._setListOption("pageLoadMode", this.option("pageLoadMode"));
                        break;
                    case "cleanSearchOnOpening":
                    case "_scrollToSelectedItemEnabled":
                        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),
            window = __webpack_require__( /*! ../core/utils/window */ 6).getWindow(),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            Promise = __webpack_require__( /*! ../core/polyfills/promise */ 104),
            fromPromise = __webpack_require__( /*! ../core/utils/deferred */ 7).fromPromise,
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            errors = __webpack_require__( /*! ./widget/ui.errors */ 18),
            devices = __webpack_require__( /*! ../core/devices */ 16),
            Widget = __webpack_require__( /*! ./widget/ui.widget */ 28),
            inflector = __webpack_require__( /*! ../core/utils/inflector */ 34),
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            inArray = __webpack_require__( /*! ../core/utils/array */ 11).inArray,
            isNumeric = __webpack_require__( /*! ../core/utils/type */ 1).isNumeric,
            eventUtils = __webpack_require__( /*! ../events/utils */ 9),
            pointerEvents = __webpack_require__( /*! ../events/pointer */ 27),
            config = __webpack_require__( /*! ../core/config */ 25),
            wrapToArray = __webpack_require__( /*! ../core/utils/array */ 11).wrapToArray;
        var PROVIDERS = {
            googleStatic: __webpack_require__( /*! ./map/provider.google_static */ 555),
            google: __webpack_require__( /*! ./map/provider.dynamic.google */ 556),
            bing: __webpack_require__( /*! ./map/provider.dynamic.bing */ 557)
        };
        var MAP_CLASS = "dx-map",
            MAP_CONTAINER_CLASS = "dx-map-container",
            MAP_SHIELD_CLASS = "dx-map-shield",
            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() && !this.option("disabled");
                if (!config.designMode && 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, DevExpress = window.DevExpress;
                if (DevExpress && DevExpress.designMode || 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;
                if (this._cancelOptionChange) {
                    return
                }
                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),
                    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._cancelOptionChange = true;
                this.option(name, value);
                this._cancelOptionChange = false
            },
            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),
                    addingValues = wrapToArray(addingValue);
                optionValue.push.apply(optionValue, addingValues);
                return this._partialArrayOptionChange(optionName, optionValue, addingValues, [])
            },
            _removeFunction: function(optionName, removingValue) {
                var optionValue = this.option(optionName),
                    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 */ 3).each,
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            Promise = __webpack_require__( /*! ../../core/polyfills/promise */ 104),
            Provider = __webpack_require__( /*! ./provider */ 313),
            Color = __webpack_require__( /*! ../../color */ 91),
            clickEvent = __webpack_require__( /*! ../../events/click */ 17);
        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"),
                    $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,
                    markers = [],
                    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,
                    routes = [];
                each(this._option("routes"), function(_, route) {
                    var color = new Color(route.color || that._defaultRouteColor()).toHex().replace("#", "0x"),
                        opacity = Math.round(255 * (route.opacity || that._defaultRouteOpacity())).toString(16),
                        width = route.weight || that._defaultRouteWeight(),
                        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,
                    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),
            window = __webpack_require__( /*! ../../core/utils/window */ 6).getWindow(),
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            Promise = __webpack_require__( /*! ../../core/polyfills/promise */ 104),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            map = __webpack_require__( /*! ../../core/utils/iterator */ 3).map,
            DynamicProvider = __webpack_require__( /*! ./provider.dynamic */ 314),
            errors = __webpack_require__( /*! ../widget/ui.errors */ 18),
            Color = __webpack_require__( /*! ../../color */ 91),
            ajax = __webpack_require__( /*! ../../core/utils/ajax */ 76),
            isDefined = __webpack_require__( /*! ../../core/utils/type */ 1).isDefined;
        var GOOGLE_MAP_READY = "_googleScriptReady",
            GOOGLE_URL = "https://maps.googleapis.com/maps/api/js?callback=" + GOOGLE_MAP_READY;
        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 controls = this._option("controls");
                        this._map = new google.maps.Map(this._$container[0], {
                            zoom: this._option("zoom"),
                            center: center,
                            panControl: controls,
                            zoomControl: controls,
                            mapTypeControl: controls,
                            streetViewControl: controls
                        });
                        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 controls = this._option("controls");
                this._map.setOptions({
                    panControl: controls,
                    zoomControl: controls,
                    mapTypeControl: controls,
                    streetViewControl: controls
                });
                return Promise.resolve()
            },
            isEventsCanceled: function() {
                var gestureHandling = this._map && this._map.get("gestureHandling");
                if ("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),
                            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(),
                            destination = locations.pop(),
                            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(),
                                    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),
                                    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 */ 4).noop,
            window = __webpack_require__( /*! ../../core/utils/window */ 6).getWindow(),
            Promise = __webpack_require__( /*! ../../core/polyfills/promise */ 104),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            iteratorUtils = __webpack_require__( /*! ../../core/utils/iterator */ 3),
            DynamicProvider = __webpack_require__( /*! ./provider.dynamic */ 314),
            Color = __webpack_require__( /*! ../../color */ 91),
            ajax = __webpack_require__( /*! ../../core/utils/ajax */ 76),
            isDefined = __webpack_require__( /*! ../../core/utils/type */ 1).isDefined;
        var BING_MAP_READY = "_bingScriptReady",
            BING_URL_V8 = "https://www.bing.com/api/maps/mapcontrol?callback=" + BING_MAP_READY,
            INFOBOX_V_OFFSET_V8 = 13,
            BING_CREDENTIALS = "AhuxC0dQ1DBTNo8L-H9ToVMQStmizZzBJdraTSgCzDSWPsA1Qd8uIvFSflzxdaLH",
            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()),
                    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"),
                    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),
                            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),
                            color = new Color(options.color || this._defaultRouteColor()).toHex(),
                            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 handler = Microsoft.Maps.Events.addHandler(direction, "directionsUpdated", function(args) {
                            Microsoft.Maps.Events.removeHandler(handler);
                            var routeSummary = args.routeSummary[0];
                            resolve({
                                instance: direction,
                                northEast: routeSummary.northEast,
                                southWest: routeSummary.southWest
                            })
                        });
                        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 */ 8),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            NavBarItem = __webpack_require__( /*! ./nav_bar/item */ 559),
            Tabs = __webpack_require__( /*! ./tabs */ 196);
        var NAVBAR_CLASS = "dx-navbar",
            ITEM_CLASS = "dx-item-content",
            NAVBAR_ITEM_CLASS = "dx-nav-item",
            NAVBAR_ITEM_CONTENT_CLASS = "dx-nav-item-content";
        var NavBar = Tabs.inherit({
            _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,
                    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 */ 310);
        var TABS_ITEM_BADGE_CLASS = "dx-tabs-item-badge",
            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 $ = __webpack_require__( /*! ../../core/renderer */ 2),
            noop = __webpack_require__( /*! ../../core/utils/common */ 4).noop,
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            Editor = __webpack_require__( /*! ../editor/editor */ 45),
            inkRipple = __webpack_require__( /*! ../widget/utils.ink_ripple */ 72),
            DataExpressionMixin = __webpack_require__( /*! ../editor/ui.data_expression */ 214),
            themes = __webpack_require__( /*! ../themes */ 20),
            CollectionWidget = __webpack_require__( /*! ../collection/ui.collection_widget.edit */ 47),
            ChildDefaultTemplate = __webpack_require__( /*! ../widget/child_default_template */ 102);
        var RADIO_GROUP_CLASS = "dx-radiogroup",
            RADIO_GROUP_VERTICAL_CLASS = "dx-radiogroup-vertical",
            RADIO_GROUP_HORIZONTAL_CLASS = "dx-radiogroup-horizontal",
            RADIO_BUTTON_CLASS = "dx-radiobutton",
            RADIO_BUTTON_ICON_CLASS = "dx-radiobutton-icon",
            RADIO_BUTTON_ICON_DOT_CLASS = "dx-radiobutton-icon-dot",
            RADIO_VALUE_CONTAINER_CLASS = "dx-radio-value-container",
            RADIO_BUTTON_CHECKED_CLASS = "dx-radiobutton-checked",
            RADIO_BUTTON_ICON_CHECKED_CLASS = "dx-radiobutton-icon-checked",
            ITEM_DATA_KEY = "dxItemData",
            RADIO_FEEDBACK_HIDE_TIMEOUT = 100;
        var RadioCollection = CollectionWidget.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), DataExpressionMixin._dataExpressionDefaultOptions(), {
                    _itemAttributes: {
                        role: "radio"
                    }
                })
            },
            _supportedKeys: function() {
                var parent = this.callBase();
                return extend({}, parent, {
                    enter: function(e) {
                        e.preventDefault();
                        return parent.enter.apply(this, arguments)
                    },
                    space: function(e) {
                        e.preventDefault();
                        return parent.space.apply(this, arguments)
                    }
                })
            },
            _focusTarget: function() {
                return this.$element().parent()
            },
            _keyboardEventBindingTarget: function() {
                return this._focusTarget()
            },
            _refreshContent: function() {
                this._prepareContent();
                this._renderContent()
            }
        });
        var RadioGroup = Editor.inherit({
            _activeStateUnit: "." + RADIO_BUTTON_CLASS,
            _getDefaultOptions: function() {
                return extend(this.callBase(), extend(DataExpressionMixin._dataExpressionDefaultOptions(), {
                    hoverStateEnabled: true,
                    activeStateEnabled: true,
                    layout: "vertical",
                    useInkRipple: false
                }))
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: {
                        tablet: true
                    },
                    options: {
                        layout: "horizontal"
                    }
                }, {
                    device: function() {
                        return "desktop" === devices.real().deviceType && !devices.isSimulator()
                    },
                    options: {
                        focusStateEnabled: true
                    }
                }, {
                    device: function() {
                        return themes.isAndroid5()
                    },
                    options: {
                        useInkRipple: true
                    }
                }])
            },
            _setOptionsByReference: function() {
                this.callBase();
                extend(this._optionsByReference, {
                    value: true
                })
            },
            _dataSourceOptions: function() {
                return {
                    paginate: false
                }
            },
            _init: function() {
                this.callBase();
                this._initDataExpressions();
                this._feedbackHideTimeout = RADIO_FEEDBACK_HIDE_TIMEOUT
            },
            _initTemplates: function() {
                this.callBase();
                this._defaultTemplates.item = new ChildDefaultTemplate("item", this)
            },
            _focusTarget: function() {
                return this.$element()
            },
            _initMarkup: function() {
                this.$element().addClass(RADIO_GROUP_CLASS);
                this._renderSubmitElement();
                this.setAria("role", "radiogroup");
                this._renderRadios();
                this.option("useInkRipple") && this._renderInkRipple();
                this.callBase()
            },
            _render: function() {
                this._renderLayout();
                this.callBase();
                this._updateItemsSize()
            },
            _renderInkRipple: function() {
                this._inkRipple = inkRipple.render({
                    waveSizeCoefficient: 3.3,
                    useHoldAnimation: false,
                    isCentered: true
                })
            },
            _toggleActiveState: function($element, value, e) {
                this.callBase.apply(this, arguments);
                if (!this._inkRipple) {
                    return
                }
                if (value) {
                    this._inkRipple.showWave({
                        element: $element.find("." + RADIO_BUTTON_ICON_CLASS),
                        event: e
                    })
                } else {
                    this._inkRipple.hideWave({
                        element: $element.find("." + RADIO_BUTTON_ICON_CLASS),
                        event: e
                    })
                }
            },
            _renderFocusState: noop,
            _renderRadios: function() {
                var $radios = $("<div>").appendTo(this.$element());
                this._radios = this._createComponent($radios, RadioCollection, {
                    dataSource: this._dataSource,
                    onItemRendered: this._itemRenderedHandler.bind(this),
                    onItemClick: this._itemClickHandler.bind(this),
                    itemTemplate: this._getTemplateByOption("itemTemplate"),
                    scrollingEnabled: false,
                    focusStateEnabled: this.option("focusStateEnabled"),
                    accessKey: this.option("accessKey"),
                    tabIndex: this.option("tabIndex"),
                    noDataText: ""
                });
                this._setCollectionWidgetOption("onContentReady", this._contentReadyHandler.bind(this));
                this._contentReadyHandler()
            },
            _renderSubmitElement: function() {
                this._$submitElement = $("<input>").attr("type", "hidden").appendTo(this.$element());
                this._setSubmitValue()
            },
            _setSubmitValue: function(value) {
                value = value || this.option("value");
                var submitValue = "this" === this.option("valueExpr") ? this._displayGetter(value) : value;
                this._$submitElement.val(submitValue)
            },
            _getSubmitElement: function() {
                return this._$submitElement
            },
            _contentReadyHandler: function() {
                this.itemElements().addClass(RADIO_BUTTON_CLASS);
                this._refreshSelected()
            },
            _itemRenderedHandler: function(e) {
                if (e.itemData.html) {
                    return
                }
                var $radio, $radioContainer;
                $radio = $("<div>").addClass(RADIO_BUTTON_ICON_CLASS);
                $("<div>").addClass(RADIO_BUTTON_ICON_DOT_CLASS).appendTo($radio);
                $radioContainer = $("<div>").append($radio).addClass(RADIO_VALUE_CONTAINER_CLASS);
                $(e.itemElement).prepend($radioContainer)
            },
            _itemClickHandler: function(e) {
                if (this.itemElements().is(e.itemElement)) {
                    this._saveValueChangeEvent(e.event);
                    this.option("value", this._getItemValue(e.itemData))
                }
            },
            _getItemValue: function(item) {
                return !!this._valueGetter ? this._valueGetter(item) : item.text
            },
            itemElements: function() {
                var result = this._radios.itemElements();
                return result.not(result.find(this._radios._itemSelector()))
            },
            _renderLayout: function() {
                var layout = this.option("layout");
                this.$element().toggleClass(RADIO_GROUP_VERTICAL_CLASS, "vertical" === layout);
                this.$element().toggleClass(RADIO_GROUP_HORIZONTAL_CLASS, "horizontal" === layout)
            },
            _refreshSelected: function() {
                var selectedValue = this.option("value");
                this.itemElements().each(function(_, item) {
                    var $item = $(item);
                    var itemValue = this._valueGetter($item.data(ITEM_DATA_KEY));
                    var isValueEquals = this._isValueEquals(itemValue, selectedValue);
                    $item.toggleClass(RADIO_BUTTON_CHECKED_CLASS, isValueEquals).find("." + RADIO_BUTTON_ICON_CLASS).first().toggleClass(RADIO_BUTTON_ICON_CHECKED_CLASS, isValueEquals);
                    this.setAria("checked", this._isValueEquals(itemValue, selectedValue), $item)
                }.bind(this))
            },
            _updateItemsSize: function() {
                if ("horizontal" === this.option("layout")) {
                    this.itemElements().css("height", "auto")
                } else {
                    var itemsCount = this.option("items").length;
                    this.itemElements().css("height", 100 / itemsCount + "%")
                }
            },
            _getAriaTarget: function() {
                return this.$element()
            },
            _setCollectionWidgetOption: function() {
                this._setWidgetOption("_radios", arguments)
            },
            focus: function() {
                this._radios && this._radios.focus()
            },
            _optionChanged: function(args) {
                this._dataExpressionOptionChanged(args);
                switch (args.name) {
                    case "useInkRipple":
                        this._invalidate();
                        break;
                    case "focusStateEnabled":
                    case "accessKey":
                    case "tabIndex":
                        this._setCollectionWidgetOption(args.name, args.value);
                        break;
                    case "disabled":
                        this.callBase(args);
                        this._setCollectionWidgetOption(args.name, args.value);
                        break;
                    case "dataSource":
                        this._setCollectionWidgetOption("dataSource");
                        break;
                    case "valueExpr":
                        this._refreshSelected();
                        break;
                    case "value":
                        this._refreshSelected();
                        this._setSubmitValue(args.value);
                        this.callBase(args);
                        break;
                    case "items":
                    case "itemTemplate":
                    case "displayExpr":
                        break;
                    case "layout":
                        this._renderLayout();
                        this._updateItemsSize();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            _clean: function() {
                delete this._inkRipple;
                this.callBase()
            }
        }).include(DataExpressionMixin);
        registerComponent("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),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            Slider = __webpack_require__( /*! ./slider */ 315),
            SliderHandle = __webpack_require__( /*! ./slider/ui.slider_handle */ 316),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            applyServerDecimalSeparator = __webpack_require__( /*! ../core/utils/common */ 4).applyServerDecimalSeparator,
            eventUtils = __webpack_require__( /*! ../events/utils */ 9),
            messageLocalization = __webpack_require__( /*! ../localization/message */ 14);
        var RANGE_SLIDER_CLASS = "dx-rangeslider",
            RANGE_SLIDER_START_HANDLE_CLASS = RANGE_SLIDER_CLASS + "-start-handle",
            RANGE_SLIDER_END_HANDLE_CLASS = RANGE_SLIDER_CLASS + "-end-handle";
        var RangeSlider = Slider.inherit({
            _supportedKeys: function() {
                var isRTL = this.option("rtlEnabled");
                var that = this,
                    _changeHandle = function(e, capturedHandle) {
                        if (that.option("start") === that.option("end")) {
                            that._capturedHandle = capturedHandle;
                            e.target = that._capturedHandle;
                            eventsEngine.trigger(that._capturedHandle, "focus")
                        }
                    },
                    _setHandleValue = function(e, step, sign) {
                        var isStart = $(e.target).hasClass(RANGE_SLIDER_START_HANDLE_CLASS),
                            valueOption = isStart ? "start" : "end",
                            val = that.option(valueOption);
                        step = that._valueStep(step);
                        val += sign * (isRTL ? -step : step);
                        that.option(valueOption, val)
                    },
                    moveHandleRight = function(e, step) {
                        _changeHandle(e, isRTL ? that._$handleStart : that._$handleEnd);
                        _setHandleValue(e, step, 1)
                    },
                    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),
                            valueOption = isStart ? "start" : "end",
                            startOption = isStart ? "min" : "start",
                            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),
                            valueOption = isStart ? "start" : "end",
                            endOption = isStart ? "end" : "max",
                            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"),
                    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,
                    $range = this._$range,
                    rangeWidth = $range.width(),
                    eventOffsetX = eventUtils.eventData(e).x - this._$bar.offset().left,
                    startHandleX = $range.position().left,
                    endHandleX = $range.position().left + rangeWidth,
                    rtlEnabled = this.option("rtlEnabled"),
                    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"),
                    offsetDirection = rtlEnabled ? -1 : 1,
                    max = this.option("max"),
                    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 $nextHandle, startValue = this.option("start"),
                    endValue = this.option("end");
                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"),
                    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",
                    start = this.option("start"),
                    end = this.option("end"),
                    max = this.option("max"),
                    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"),
                    valEnd = this.option("end"),
                    min = this.option("min"),
                    max = this.option("max"),
                    rtlEnabled = this.option("rtlEnabled");
                valStart = Math.max(min, Math.min(valStart, max));
                valEnd = Math.max(valStart, Math.min(valEnd, max));
                this.option("start", valStart);
                this.option("end", valEnd);
                this._$submitStartElement.val(applyServerDecimalSeparator(valStart));
                this._$submitEndElement.val(applyServerDecimalSeparator(valEnd));
                var ratio1 = max === min ? 0 : (valStart - min) / (max - min),
                    ratio2 = max === min ? 0 : (valEnd - min) / (max - min);
                var startOffset = parseFloat((100 * ratio1).toPrecision(12)) + "%",
                    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"),
                    end = this.option("end");
                this.option("value", [start, end])
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "value":
                        this.option({
                            start: args.value[0],
                            end: args.value[1]
                        });
                        break;
                    case "start":
                    case "end":
                        this._setValueOption();
                        this._renderValue();
                        var start = this.option("start"),
                            end = this.option("end");
                        this._createActionByOption("onValueChanged", {
                            excludeValidators: ["disabled", "readOnly"]
                        })({
                            start: start,
                            end: end,
                            value: [start, end],
                            event: this._valueChangeEventInstance
                        });
                        this._saveValueChangeEvent(void 0);
                        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),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            domUtils = __webpack_require__( /*! ../../core/utils/dom */ 12),
            numberLocalization = __webpack_require__( /*! ../../localization/number */ 49),
            devices = __webpack_require__( /*! ../../core/devices */ 16),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            applyServerDecimalSeparator = __webpack_require__( /*! ../../core/utils/common */ 4).applyServerDecimalSeparator,
            registerComponent = __webpack_require__( /*! ../../core/component_registrator */ 8),
            TrackBar = __webpack_require__( /*! ../track_bar */ 215),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            pointerEvents = __webpack_require__( /*! ../../events/pointer */ 27),
            feedbackEvents = __webpack_require__( /*! ../../events/core/emitter.feedback */ 103),
            SliderHandle = __webpack_require__( /*! ./ui.slider_handle */ 316),
            inkRipple = __webpack_require__( /*! ../widget/utils.ink_ripple */ 72),
            clickEvent = __webpack_require__( /*! ../../events/click */ 17),
            Swipeable = __webpack_require__( /*! ../../events/gesture/swipeable */ 117),
            themes = __webpack_require__( /*! ../themes */ 20),
            Deferred = __webpack_require__( /*! ../../core/utils/deferred */ 7).Deferred;
        var SLIDER_CLASS = "dx-slider",
            SLIDER_WRAPPER_CLASS = "dx-slider-wrapper",
            SLIDER_HANDLE_SELECTOR = ".dx-slider-handle",
            SLIDER_BAR_CLASS = "dx-slider-bar",
            SLIDER_RANGE_CLASS = "dx-slider-range",
            SLIDER_RANGE_VISIBLE_CLASS = "dx-slider-range-visible",
            SLIDER_LABEL_CLASS = "dx-slider-label",
            SLIDER_LABEL_POSITION_CLASS_PREFIX = "dx-slider-label-position-",
            SLIDER_TOOLTIP_POSITION_CLASS_PREFIX = "dx-slider-tooltip-position-";
        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"),
                        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
                })
            },
            _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) || themes.isAndroid5(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()
            },
            _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),
                    format = this.option("tooltip.format"),
                    tooltipEnabled = this.option("tooltip.enabled"),
                    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"),
                        max = this.option("max"),
                        position = this.option("label.position"),
                        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 startOffset, endOffset, 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;
                startOffset = this._startOffset * this._swipePixelRatio();
                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 = this._startOffset + offsetDirection * e.event.offset / this._swipePixelRatio();
                this._$range.width(100 * newRatio + "%");
                SliderHandle.getInstance(this._activeHandle()).fitTooltipPosition;
                this._changeValueOnSwipe(newRatio)
            },
            _swipePixelRatio: function() {
                var min = this.option("min"),
                    max = this.option("max"),
                    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"),
                    max = this.option("max"),
                    step = this._valueStep(this.option("step")),
                    newChange = ratio * (max - min),
                    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._$submitElement.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/tile_view.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            devices = __webpack_require__( /*! ../core/devices */ 16),
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            inflector = __webpack_require__( /*! ../core/utils/inflector */ 34),
            iteratorUtils = __webpack_require__( /*! ../core/utils/iterator */ 3),
            isDefined = __webpack_require__( /*! ../core/utils/type */ 1).isDefined,
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6),
            getPublicElement = __webpack_require__( /*! ../core/utils/dom */ 12).getPublicElement,
            ScrollView = __webpack_require__( /*! ./scroll_view */ 193),
            CollectionWidget = __webpack_require__( /*! ./collection/ui.collection_widget.edit */ 47);
        var TILEVIEW_CLASS = "dx-tileview",
            TILEVIEW_CONTAINER_CLASS = "dx-tileview-wrapper",
            TILEVIEW_ITEM_CLASS = "dx-tile",
            TILEVIEW_ITEM_SELECTOR = "." + TILEVIEW_ITEM_CLASS,
            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();
                this._cellsPerDimension = 1;
                this._renderGeometry();
                this._updateScrollView();
                this._fireContentReadyAction()
            },
            _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") || [],
                    config = this._config,
                    itemMargin = this.option("itemMargin"),
                    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);
                if (windowUtils.hasWindow()) {
                    this._$container[config.mainDimension](this._cells.length * this.option(config.baseItemMainDimension) + (this._cells.length + 1) * itemMargin)
                }
            },
            _arrangeItems: function(items) {
                var config = this._config,
                    itemMainRatio = config.itemMainRatio,
                    itemCrossRatio = config.itemCrossRatio,
                    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,
                    mainPosition = config.mainPosition,
                    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,
                    config = this._config,
                    itemRatioMain = item[config.itemMainRatio],
                    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,
                    itemPositionMain = itemPosition[config.mainPosition],
                    itemPositionCross = itemPosition[config.crossPosition],
                    itemRatioMain = item[config.itemMainRatio],
                    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,
                    itemPositionMain = itemPosition[config.mainPosition],
                    itemPositionCross = itemPosition[config.crossPosition],
                    itemRatioMain = item[config.itemMainRatio],
                    itemRatioCross = item[config.itemCrossRatio],
                    baseItemCross = this.option(config.baseItemCrossDimension),
                    baseItemMain = this.option(config.baseItemMainDimension),
                    itemMargin = this.option("itemMargin");
                var cssProps = {
                        display: itemRatioMain <= 0 || itemRatioCross <= 0 ? "none" : ""
                    },
                    mainDimension = itemRatioMain * baseItemMain + (itemRatioMain - 1) * itemMargin,
                    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(),
                        baseItemWidth = this.option("baseItemWidth"),
                        itemPositionX = itemPosition.left,
                        offsetPosition = itemPositionX * baseItemWidth,
                        itemBaseOffset = baseItemWidth + itemMargin,
                        itemWidth = itemBaseOffset * item.widthRatio,
                        subItemMargins = itemPositionX * itemMargin;
                    cssProps.left = offsetCorrection - (offsetPosition + itemWidth + subItemMargins)
                }
                this._itemElements().eq(item.index).css(cssProps)
            },
            _moveFocus: function(location) {
                var FOCUS_UP = "up",
                    FOCUS_DOWN = "down",
                    FOCUS_LEFT = this.option("rtlEnabled") ? "right" : "left",
                    FOCUS_RIGHT = this.option("rtlEnabled") ? "left" : "right",
                    FOCUS_PAGE_UP = "pageup",
                    FOCUS_PAGE_DOWN = "pagedown";
                var horizontalDirection = "horizontal" === this.option("direction"),
                    cells = this._cells,
                    index = $(this.option("focusedElement")).index(),
                    targetCol = this._itemsPositions[index].left,
                    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,
                    outerMainProp = "outer" + inflector.captionize(config.mainDimension),
                    itemMargin = this.option("itemMargin"),
                    itemPosition = $itemElement.position()[config.mainPosition],
                    itemDimension = $itemElement[outerMainProp](),
                    itemTail = itemPosition + itemDimension,
                    scrollPosition = this.scrollPosition(),
                    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 "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 _createClass = function() {
            function defineProperties(target, props) {
                for (var i = 0; i < props.length; i++) {
                    var descriptor = props[i];
                    descriptor.enumerable = descriptor.enumerable || false;
                    descriptor.configurable = true;
                    if ("value" in descriptor) {
                        descriptor.writable = true
                    }
                    Object.defineProperty(target, descriptor.key, descriptor)
                }
            }
            return function(Constructor, protoProps, staticProps) {
                if (protoProps) {
                    defineProperties(Constructor.prototype, protoProps)
                }
                if (staticProps) {
                    defineProperties(Constructor, staticProps)
                }
                return Constructor
            }
        }();
        var _turndown = __webpack_require__( /*! turndown */ 565);
        var _turndown2 = _interopRequireDefault(_turndown);
        var _showdown = __webpack_require__( /*! showdown */ 566);
        var _showdown2 = _interopRequireDefault(_showdown);
        var _ui = __webpack_require__( /*! ../../widget/ui.errors */ 18);
        var _ui2 = _interopRequireDefault(_ui);
        var _converterController = __webpack_require__( /*! ../converterController */ 218);
        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")
            }
        }
        var MarkdownConverter = function() {
            function MarkdownConverter() {
                _classCallCheck(this, MarkdownConverter);
                if (!_turndown2.default) {
                    throw _ui2.default.Error("E1041", "Turndown")
                }
                if (!_showdown2.default) {
                    throw _ui2.default.Error("E1041", "Showdown")
                }
                this._html2Markdown = new _turndown2.default;
                this._markdown2Html = new _showdown2.default.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/bundles/modules/parts/widgets-base.js ***!
      \********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var DevExpress = __webpack_require__( /*! ./core */ 266);
        __webpack_require__( /*! ./data */ 293);
        var ui = DevExpress.ui = __webpack_require__( /*! ../../../bundles/modules/ui */ 467);
        ui.themes = __webpack_require__( /*! ../../../ui/themes */ 20);
        ui.setTemplateEngine = __webpack_require__( /*! ../../../ui/set_template_engine */ 468);
        ui.dialog = __webpack_require__( /*! ../../../ui/dialog */ 264);
        ui.notify = __webpack_require__( /*! ../../../ui/notify */ 470);
        ui.dxActionSheet = __webpack_require__( /*! ../../../ui/action_sheet */ 212);
        ui.dxAutocomplete = __webpack_require__( /*! ../../../ui/autocomplete */ 471);
        ui.dxBox = __webpack_require__( /*! ../../../ui/box */ 176);
        ui.dxButton = __webpack_require__( /*! ../../../ui/button */ 36);
        ui.dxButtonGroup = __webpack_require__( /*! ../../../ui/button_group */ 495);
        ui.dxCalendar = __webpack_require__( /*! ../../../ui/calendar */ 229);
        ui.dxCheckBox = __webpack_require__( /*! ../../../ui/check_box */ 126);
        ui.dxColorBox = __webpack_require__( /*! ../../../ui/color_box */ 500);
        ui.dxDateBox = __webpack_require__( /*! ../../../ui/date_box */ 203);
        ui.dxDrawer = __webpack_require__( /*! ../../../ui/drawer */ 518);
        ui.dxDeferRendering = __webpack_require__( /*! ../../../ui/defer_rendering */ 523);
        ui.dxDropDownBox = __webpack_require__( /*! ../../../ui/drop_down_box */ 524);
        ui.dxDropDownMenu = __webpack_require__( /*! ../../../ui/drop_down_menu */ 170);
        ui.dxFileUploader = __webpack_require__( /*! ../../../ui/file_uploader */ 525);
        ui.dxForm = __webpack_require__( /*! ../../../ui/form */ 171);
        ui.dxGallery = __webpack_require__( /*! ../../../ui/gallery */ 529);
        ui.dxHtmlEditor = __webpack_require__( /*! ../../../ui/html_editor */ 530);
        ui.dxList = __webpack_require__( /*! ../../../ui/list */ 109);
        ui.dxLoadIndicator = __webpack_require__( /*! ../../../ui/load_indicator */ 89);
        ui.dxLoadPanel = __webpack_require__( /*! ../../../ui/load_panel */ 202);
        ui.dxLookup = __webpack_require__( /*! ../../../ui/lookup */ 553);
        ui.dxMap = __webpack_require__( /*! ../../../ui/map */ 554);
        ui.dxMultiView = __webpack_require__( /*! ../../../ui/multi_view */ 309);
        ui.dxNavBar = __webpack_require__( /*! ../../../ui/nav_bar */ 558);
        ui.dxNumberBox = __webpack_require__( /*! ../../../ui/number_box */ 118);
        ui.dxOverlay = __webpack_require__( /*! ../../../ui/overlay */ 64);
        ui.dxPopover = __webpack_require__( /*! ../../../ui/popover */ 134);
        ui.dxPopup = __webpack_require__( /*! ../../../ui/popup */ 55);
        ui.dxProgressBar = __webpack_require__( /*! ../../../ui/progress_bar */ 305);
        ui.dxRadioGroup = __webpack_require__( /*! ../../../ui/radio_group */ 320);
        ui.dxRangeSlider = __webpack_require__( /*! ../../../ui/range_slider */ 561);
        ui.dxResizable = __webpack_require__( /*! ../../../ui/resizable */ 208);
        ui.dxResponsiveBox = __webpack_require__( /*! ../../../ui/responsive_box */ 307);
        ui.dxScrollView = __webpack_require__( /*! ../../../ui/scroll_view */ 193);
        ui.dxSelectBox = __webpack_require__( /*! ../../../ui/select_box */ 110);
        ui.dxSlider = __webpack_require__( /*! ../../../ui/slider */ 315);
        ui.dxSwitch = __webpack_require__( /*! ../../../ui/switch */ 321);
        ui.dxTabPanel = __webpack_require__( /*! ../../../ui/tab_panel */ 308);
        ui.dxTabs = __webpack_require__( /*! ../../../ui/tabs */ 196);
        ui.dxTagBox = __webpack_require__( /*! ../../../ui/tag_box */ 322);
        ui.dxTextArea = __webpack_require__( /*! ../../../ui/text_area */ 323);
        ui.dxTextBox = __webpack_require__( /*! ../../../ui/text_box */ 101);
        ui.dxTileView = __webpack_require__( /*! ../../../ui/tile_view */ 563);
        ui.dxToast = __webpack_require__( /*! ../../../ui/toast */ 295);
        ui.dxToolbar = __webpack_require__( /*! ../../../ui/toolbar */ 230);
        ui.dxTooltip = __webpack_require__( /*! ../../../ui/tooltip */ 204);
        ui.dxTrackBar = __webpack_require__( /*! ../../../ui/track_bar */ 215);
        DevExpress.validationEngine = __webpack_require__( /*! ../../../ui/validation_engine */ 94);
        ui.dxValidationSummary = __webpack_require__( /*! ../../../ui/validation_summary */ 216);
        ui.dxValidationGroup = __webpack_require__( /*! ../../../ui/validation_group */ 311);
        ui.dxValidator = __webpack_require__( /*! ../../../ui/validator */ 195);
        __webpack_require__( /*! ../../../ui/html_editor/converters/markdown */ 564);
        ui.CollectionWidget = __webpack_require__( /*! ../../../ui/collection/ui.collection_widget.edit */ 47);
        ui.dxDropDownEditor = __webpack_require__( /*! ../../../ui/drop_down_editor/ui.drop_down_editor */ 157);
        module.exports = ui
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/ui/slide_out_view.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            noop = __webpack_require__( /*! ../core/utils/common */ 4).noop,
            fx = __webpack_require__( /*! ../animation/fx */ 31),
            clickEvent = __webpack_require__( /*! ../events/click */ 17),
            translator = __webpack_require__( /*! ../animation/translator */ 24),
            getPublicElement = __webpack_require__( /*! ../core/utils/dom */ 12).getPublicElement,
            hideTopOverlayCallback = __webpack_require__( /*! ../mobile/hide_top_overlay */ 137).hideCallback,
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            AsyncTemplateMixin = __webpack_require__( /*! ./shared/async_template_mixin */ 271),
            Widget = __webpack_require__( /*! ./widget/ui.widget */ 28),
            Swipeable = __webpack_require__( /*! ../events/gesture/swipeable */ 117),
            EmptyTemplate = __webpack_require__( /*! ./widget/empty_template */ 93),
            Deferred = __webpack_require__( /*! ../core/utils/deferred */ 7).Deferred,
            windowUtils = __webpack_require__( /*! ../core/utils/window */ 6);
        var SLIDEOUTVIEW_CLASS = "dx-slideoutview",
            SLIDEOUTVIEW_WRAPPER_CLASS = "dx-slideoutview-wrapper",
            SLIDEOUTVIEW_MENU_CONTENT_CLASS = "dx-slideoutview-menu-content",
            SLIDEOUTVIEW_CONTENT_CLASS = "dx-slideoutview-content",
            SLIDEOUTVIEW_SHIELD_CLASS = "dx-slideoutview-shield",
            INVISIBLE_STATE_CLASS = "dx-state-invisible",
            ANONYMOUS_TEMPLATE_NAME = "content",
            ANIMATION_DURATION = 400;
        var animation = {
            moveTo: function($element, position, completeAction) {
                fx.animate($element, {
                    type: "slide",
                    to: {
                        left: position
                    },
                    duration: ANIMATION_DURATION,
                    complete: completeAction
                })
            },
            complete: function($element) {
                fx.stop($element, true)
            }
        };
        var SlideOutView = Widget.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    menuPosition: "normal",
                    menuVisible: false,
                    swipeEnabled: true,
                    menuTemplate: "menu",
                    contentTemplate: "content",
                    contentOffset: 45
                })
            },
            _defaultOptionsRules: function() {
                return this.callBase().concat([{
                    device: {
                        android: true
                    },
                    options: {
                        contentOffset: 54
                    }
                }, {
                    device: function(_device) {
                        return "generic" === _device.platform && "desktop" !== _device.deviceType
                    },
                    options: {
                        contentOffset: 56
                    }
                }, {
                    device: {
                        win: true,
                        phone: false
                    },
                    options: {
                        contentOffset: 76
                    }
                }])
            },
            _getAnonymousTemplateName: function() {
                return ANONYMOUS_TEMPLATE_NAME
            },
            _init: function() {
                this.callBase();
                this.$element().addClass(SLIDEOUTVIEW_CLASS);
                this._whenAnimationComplete = void 0;
                this._whenMenuRendered = void 0;
                this._initHideTopOverlayHandler()
            },
            _initHideTopOverlayHandler: function() {
                this._hideMenuHandler = this.hideMenu.bind(this)
            },
            _initTemplates: function() {
                this.callBase();
                this._defaultTemplates.menu = new EmptyTemplate(this);
                this._defaultTemplates.content = new EmptyTemplate(this)
            },
            _initMarkup: function() {
                var _this = this;
                this.callBase();
                this._renderMarkup();
                this._whenMenuRendered = new Deferred;
                var menuTemplate = this._getTemplate(this.option("menuTemplate"));
                menuTemplate && menuTemplate.render({
                    container: this.menuContent(),
                    onRendered: function() {
                        _this._whenMenuRendered.resolve()
                    }
                });
                var contentTemplateOption = this.option("contentTemplate"),
                    contentTemplate = this._getTemplate(contentTemplateOption),
                    transclude = this._getAnonymousTemplateName() === contentTemplateOption;
                contentTemplate && contentTemplate.render({
                    container: this.content(),
                    noModel: true,
                    transclude: transclude
                });
                this._renderShield();
                this._toggleMenuPositionClass()
            },
            _render: function() {
                var _this2 = this;
                this.callBase();
                this._whenMenuRendered.always(function() {
                    _this2._initSwipeHandlers();
                    _this2._dimensionChanged()
                })
            },
            _renderMarkup: function() {
                var $wrapper = $("<div>").addClass(SLIDEOUTVIEW_WRAPPER_CLASS);
                this._$menu = $("<div>").addClass(SLIDEOUTVIEW_MENU_CONTENT_CLASS);
                this._$container = $("<div>").addClass(SLIDEOUTVIEW_CONTENT_CLASS);
                $wrapper.append(this._$menu);
                $wrapper.append(this._$container);
                this.$element().append($wrapper);
                eventsEngine.on(this._$container, "MSPointerDown", noop)
            },
            _renderShield: function() {
                this._$shield = this._$shield || $("<div>").addClass(SLIDEOUTVIEW_SHIELD_CLASS);
                this._$shield.appendTo(this.content());
                eventsEngine.off(this._$shield, clickEvent.name);
                eventsEngine.on(this._$shield, clickEvent.name, this.hideMenu.bind(this));
                this._toggleShieldVisibility(this.option("menuVisible"))
            },
            _initSwipeHandlers: function() {
                this._createComponent($(this.content()), Swipeable, {
                    disabled: !this.option("swipeEnabled"),
                    elastic: false,
                    itemSizeFunc: this._getMenuWidth.bind(this),
                    onStart: this._swipeStartHandler.bind(this),
                    onUpdated: this._swipeUpdateHandler.bind(this),
                    onEnd: this._swipeEndHandler.bind(this)
                })
            },
            _isRightMenuPosition: function() {
                var invertedPosition = "inverted" === this.option("menuPosition"),
                    rtl = this.option("rtlEnabled");
                return rtl && !invertedPosition || !rtl && invertedPosition
            },
            _swipeStartHandler: function(e) {
                animation.complete($(this.content()));
                var event = e.event,
                    menuVisible = this.option("menuVisible"),
                    rtl = this._isRightMenuPosition();
                event.maxLeftOffset = +(rtl ? !menuVisible : menuVisible);
                event.maxRightOffset = +(rtl ? menuVisible : !menuVisible);
                this._toggleShieldVisibility(true)
            },
            _swipeUpdateHandler: function(e) {
                var event = e.event,
                    offset = this.option("menuVisible") ? event.offset + 1 * this._getRTLSignCorrection() : event.offset;
                offset *= this._getRTLSignCorrection();
                this._renderPosition(offset, false)
            },
            _swipeEndHandler: function(e) {
                var targetOffset = e.event.targetOffset * this._getRTLSignCorrection() + this.option("menuVisible"),
                    menuVisible = 0 !== targetOffset;
                if (this.option("menuVisible") === menuVisible) {
                    this._renderPosition(this.option("menuVisible"), true)
                } else {
                    this.option("menuVisible", menuVisible)
                }
            },
            _toggleMenuPositionClass: function() {
                var left = SLIDEOUTVIEW_CLASS + "-left",
                    right = SLIDEOUTVIEW_CLASS + "-right",
                    menuPosition = this._isRightMenuPosition() ? "right" : "left";
                this._$menu.removeClass(left + " " + right);
                this._$menu.addClass(SLIDEOUTVIEW_CLASS + "-" + menuPosition)
            },
            _renderPosition: function(offset, animate) {
                if (!windowUtils.hasWindow()) {
                    return
                }
                var pos = this._calculatePixelOffset(offset) * this._getRTLSignCorrection();
                this._toggleHideMenuCallback(offset);
                if (animate) {
                    this._toggleShieldVisibility(true);
                    animation.moveTo($(this.content()), pos, this._animationCompleteHandler.bind(this))
                } else {
                    translator.move($(this.content()), {
                        left: pos
                    })
                }
            },
            _calculatePixelOffset: function(offset) {
                offset = offset || 0;
                return offset * this._getMenuWidth()
            },
            _getMenuWidth: function() {
                if (!this._menuWidth) {
                    var maxMenuWidth = this.$element().width() - this.option("contentOffset"),
                        menuContent = $(this.menuContent());
                    menuContent.css("maxWidth", maxMenuWidth < 0 ? 0 : maxMenuWidth);
                    var currentMenuWidth = menuContent.width();
                    this._menuWidth = Math.min(currentMenuWidth, maxMenuWidth)
                }
                return this._menuWidth
            },
            _animationCompleteHandler: function() {
                this._toggleShieldVisibility(this.option("menuVisible"));
                if (this._whenAnimationComplete) {
                    this._whenAnimationComplete.resolveWith(this)
                }
            },
            _toggleHideMenuCallback: function(subscribe) {
                if (subscribe) {
                    hideTopOverlayCallback.add(this._hideMenuHandler)
                } else {
                    hideTopOverlayCallback.remove(this._hideMenuHandler)
                }
            },
            _getRTLSignCorrection: function() {
                return this._isRightMenuPosition() ? -1 : 1
            },
            _dispose: function() {
                animation.complete($(this.content()));
                this._toggleHideMenuCallback(false);
                this.callBase()
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._dimensionChanged()
                }
            },
            _dimensionChanged: function() {
                delete this._menuWidth;
                this._renderPosition(this.option("menuVisible"), false)
            },
            _toggleShieldVisibility: function(visible) {
                this._$shield.toggleClass(INVISIBLE_STATE_CLASS, !visible)
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "width":
                        this.callBase(args);
                        this._dimensionChanged();
                        break;
                    case "contentOffset":
                        this._dimensionChanged();
                        break;
                    case "menuVisible":
                        this._renderPosition(args.value, true);
                        break;
                    case "menuPosition":
                        this._renderPosition(this.option("menuVisible"), true);
                        this._toggleMenuPositionClass();
                        break;
                    case "swipeEnabled":
                        this._initSwipeHandlers();
                        break;
                    case "contentTemplate":
                    case "menuTemplate":
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            menuContent: function() {
                return getPublicElement(this._$menu)
            },
            content: function() {
                return getPublicElement(this._$container)
            },
            showMenu: function() {
                return this.toggleMenuVisibility(true)
            },
            hideMenu: function() {
                return this.toggleMenuVisibility(false)
            },
            toggleMenuVisibility: function(showing) {
                showing = void 0 === showing ? !this.option("menuVisible") : showing;
                this._whenAnimationComplete = new Deferred;
                this.option("menuVisible", showing);
                return this._whenAnimationComplete.promise()
            }
        }).include(AsyncTemplateMixin);
        registerComponent("dxSlideOutView", SlideOutView);
        module.exports = SlideOutView;
        module.exports.animation = animation
    }, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
    /*!*********************************************!*\
      !*** ./artifacts/transpiled/ui/panorama.js ***!
      \*********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            noop = __webpack_require__( /*! ../core/utils/common */ 4).noop,
            when = __webpack_require__( /*! ../core/utils/deferred */ 7).when,
            fx = __webpack_require__( /*! ../animation/fx */ 31),
            translator = __webpack_require__( /*! ../animation/translator */ 24),
            Class = __webpack_require__( /*! ../core/class */ 10),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            inArray = __webpack_require__( /*! ../core/utils/array */ 11).inArray,
            each = __webpack_require__( /*! ../core/utils/iterator */ 3).each,
            abstract = abstract,
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            PanoramaItem = __webpack_require__( /*! ./panorama/item */ 803),
            swipeEvents = __webpack_require__( /*! ../events/swipe */ 125),
            eventUtils = __webpack_require__( /*! ../events/utils */ 9),
            config = __webpack_require__( /*! ../core/config */ 25),
            CollectionWidget = __webpack_require__( /*! ./collection/ui.collection_widget.edit */ 47);
        var PANORAMA_CLASS = "dx-panorama",
            PANORAMA_WRAPPER_CLASS = "dx-panorama-wrapper",
            PANORAMA_TITLE_CLASS = "dx-panorama-title",
            PANORAMA_GHOST_TITLE_CLASS = "dx-panorama-ghosttitle",
            PANORAMA_ITEMS_CONTAINER_CLASS = "dx-panorama-itemscontainer",
            PANORAMA_ITEM_CLASS = "dx-panorama-item",
            PANORAMA_GHOST_ITEM_CLASS = "dx-panorama-ghostitem",
            PANORAMA_ITEM_DATA_KEY = "dxPanoramaItemData",
            PANORAMA_ITEM_MARGIN_SCALE = .02,
            PANORAMA_TITLE_MARGIN_SCALE = .02,
            PANORAMA_BACKGROUND_MOVE_DURATION = 300,
            PANORAMA_BACKGROUND_MOVE_EASING = "cubic-bezier(.40, .80, .60, 1)",
            PANORAMA_TITLE_MOVE_DURATION = 300,
            PANORAMA_TITLE_MOVE_EASING = "cubic-bezier(.40, .80, .60, 1)",
            PANORAMA_ITEM_MOVE_DURATION = 300,
            PANORAMA_ITEM_MOVE_EASING = "cubic-bezier(.40, .80, .60, 1)";
        var moveBackground = function($element, position) {
            $element.css("backgroundPosition", position + "px 0%")
        };
        var position = function($element) {
            return translator.locate($element).left
        };
        var move = function($element, position) {
            translator.move($element, {
                left: position
            });
            $element.css("visibility", "")
        };
        var animation = {
            backgroundMove: function($element, position, completeAction) {
                return fx.animate($element, {
                    to: {
                        backgroundPosition: position + "px 0%"
                    },
                    duration: PANORAMA_BACKGROUND_MOVE_DURATION,
                    easing: PANORAMA_BACKGROUND_MOVE_EASING,
                    complete: completeAction
                })
            },
            titleMove: function($title, position, completeAction) {
                return fx.animate($title, {
                    type: "slide",
                    to: {
                        left: position
                    },
                    duration: PANORAMA_TITLE_MOVE_DURATION,
                    easing: PANORAMA_TITLE_MOVE_EASING,
                    complete: completeAction
                })
            },
            itemMove: function($item, itemPosition, completeAction) {
                return fx.animate($item, {
                    type: "slide",
                    to: {
                        left: itemPosition
                    },
                    duration: PANORAMA_ITEM_MOVE_DURATION,
                    easing: PANORAMA_ITEM_MOVE_EASING,
                    complete: function() {
                        completeAction && completeAction.apply(this, arguments);
                        $item.css("visibility", position($item) > 0 ? "" : "hidden")
                    }
                })
            }
        };
        var endAnimation = function(elements) {
            if (!elements) {
                return
            }
            each(elements, function(_, element) {
                fx.stop(element, true)
            })
        };
        var PanoramaItemsRenderStrategy = Class.inherit({
            ctor: function(panorama) {
                this._panorama = panorama
            },
            init: noop,
            render: noop,
            allItemElements: function() {
                return this._panorama._itemElements()
            },
            updatePositions: abstract,
            animateRollback: abstract,
            detectBoundsTransition: abstract,
            animateComplete: abstract,
            _getRTLSignCorrection: function() {
                return this._panorama._getRTLSignCorrection()
            },
            _isRTLEnabled: function() {
                return this._panorama.option("rtlEnabled")
            },
            _itemMargin: function() {
                return this._containerWidth() * PANORAMA_ITEM_MARGIN_SCALE
            },
            _containerWidth: function() {
                return this._panorama._elementWidth()
            },
            _itemWidth: function() {
                return this._panorama._itemWidth()
            },
            _indexBoundary: function() {
                return this._panorama._indexBoundary()
            },
            _normalizeIndex: function(index) {
                return this._panorama._normalizeIndex(index)
            },
            _startNextPosition: function() {
                if (this._isRTLEnabled()) {
                    return this._containerWidth() - (this._itemMargin() + this._itemWidth())
                } else {
                    return this._itemMargin()
                }
            },
            _startPrevPosition: function() {
                if (this._isRTLEnabled()) {
                    return this._containerWidth()
                } else {
                    return -this._itemWidth()
                }
            }
        });
        var PanoramaOneAndLessItemsRenderStrategy = PanoramaItemsRenderStrategy.inherit({
            updatePositions: function() {
                var $items = this._panorama._itemElements(),
                    startPosition = this._startNextPosition();
                $items.each(function() {
                    move($(this), startPosition)
                })
            },
            animateRollback: noop,
            detectBoundsTransition: noop,
            animateComplete: noop
        });
        var PanoramaTwoItemsRenderStrategy = PanoramaItemsRenderStrategy.inherit({
            init: function() {
                this._initGhostItem()
            },
            render: function() {
                this._renderGhostItem()
            },
            _initGhostItem: function() {
                this._$ghostItem = $("<div>").addClass(PANORAMA_GHOST_ITEM_CLASS)
            },
            _renderGhostItem: function() {
                this._panorama._itemContainer().append(this._$ghostItem);
                this._toggleGhostItem(false)
            },
            _toggleGhostItem: function(visible) {
                var $ghostItem = this._$ghostItem;
                if (visible) {
                    $ghostItem.css("opacity", 1)
                } else {
                    $ghostItem.css("opacity", 0)
                }
            },
            _updateGhostItemContent: function(index) {
                if (false !== index && index !== this._prevGhostIndex) {
                    this._$ghostItem.html(this._panorama._itemElements().eq(index).html());
                    this._prevGhostIndex = index
                }
            },
            _isGhostItemVisible: function() {
                return "1" === this._$ghostItem.css("opacity")
            },
            _swapGhostWithItem: function($item) {
                var $ghostItem = this._$ghostItem,
                    lastItemPosition = position($item);
                move($item, position($ghostItem));
                move($ghostItem, lastItemPosition)
            },
            allItemElements: function() {
                return this._panorama._itemContainer().find("." + PANORAMA_ITEM_CLASS + ", ." + PANORAMA_GHOST_ITEM_CLASS)
            },
            updatePositions: function(offset) {
                var $items = this.allItemElements(),
                    selectedIndex = this._panorama.option("selectedIndex"),
                    adjustedOffset = offset * this._getRTLSignCorrection(),
                    isGhostReplaceLast = adjustedOffset > 0 && 0 === selectedIndex || adjustedOffset < 0 && 1 === selectedIndex,
                    isGhostReplaceFirst = adjustedOffset < 0 && 0 === selectedIndex || adjustedOffset > 0 && 1 === selectedIndex,
                    ghostPosition = isGhostReplaceLast && "replaceLast" || isGhostReplaceFirst && "replaceFirst",
                    ghostContentIndex = isGhostReplaceLast && 1 || isGhostReplaceFirst && 0,
                    positions = this._calculateItemPositions(selectedIndex, ghostPosition);
                this._updateGhostItemContent(ghostContentIndex);
                this._toggleGhostItem(isGhostReplaceLast || isGhostReplaceFirst);
                $items.each(function(index) {
                    move($(this), positions[index] + offset)
                })
            },
            animateRollback: function(currentIndex) {
                var that = this,
                    $items = this._panorama._itemElements(),
                    startPosition = this._startNextPosition(),
                    signCorrection = this._getRTLSignCorrection(),
                    offset = (position($items.eq(currentIndex)) - startPosition) * signCorrection,
                    ghostOffset = (position(this._$ghostItem) - startPosition) * signCorrection,
                    positions = this._calculateItemPositions(currentIndex, ghostOffset > 0 ? "prepend" : "append"),
                    isLastReplacedByGhost = 0 === currentIndex && offset > 0 && ghostOffset > 0 || 1 === currentIndex && ghostOffset < 0;
                if (isLastReplacedByGhost) {
                    this._swapGhostWithItem($items.eq(1))
                } else {
                    this._swapGhostWithItem($items.eq(0))
                }
                $items.each(function(index) {
                    animation.itemMove($(this), positions[index])
                });
                animation.itemMove(this._$ghostItem, positions[2], function() {
                    that._toggleGhostItem(false)
                })
            },
            detectBoundsTransition: function(newIndex, currentIndex) {
                var ghostLocation = position(this._$ghostItem),
                    startPosition = this._startNextPosition(),
                    rtl = this._isRTLEnabled();
                if (0 === newIndex && rtl ^ ghostLocation < startPosition) {
                    return "left"
                }
                if (0 === currentIndex && rtl ^ ghostLocation > startPosition) {
                    return "right"
                }
            },
            animateComplete: function(boundCross, newIndex, currentIndex) {
                var that = this,
                    ghostPosition = !boundCross ^ 0 !== currentIndex ? "prepend" : "append",
                    $items = this._panorama._itemElements(),
                    positions = this._calculateItemPositions(newIndex, ghostPosition),
                    animations = [];
                $items.each(function(index) {
                    animations.push(animation.itemMove($(this), positions[index]))
                });
                animations.push(animation.itemMove(this._$ghostItem, positions[2], function() {
                    that._toggleGhostItem(false)
                }));
                return when.apply($, animations)
            },
            _calculateItemPositions: function(atIndex, ghostPosition) {
                var positions = [],
                    itemMargin = this._itemMargin(),
                    itemWidth = this._itemWidth(),
                    itemPositionOffset = (itemWidth + itemMargin) * this._getRTLSignCorrection(),
                    normalFlow = 0 === atIndex,
                    prevPosition = this._startPrevPosition(),
                    nextPosition = this._startNextPosition();
                positions.push(nextPosition);
                nextPosition += itemPositionOffset;
                if (normalFlow) {
                    positions.push(nextPosition)
                } else {
                    positions.splice(0, 0, nextPosition)
                }
                nextPosition += itemPositionOffset;
                switch (ghostPosition) {
                    case "replaceFirst":
                        positions.push(positions[0]);
                        if (normalFlow) {
                            positions[0] = nextPosition
                        } else {
                            positions[0] = prevPosition
                        }
                        break;
                    case "replaceLast":
                        if (normalFlow) {
                            positions.splice(1, 0, prevPosition)
                        } else {
                            positions.splice(1, 0, nextPosition)
                        }
                        break;
                    case "prepend":
                        positions.push(prevPosition);
                        break;
                    case "append":
                        positions.push(nextPosition)
                }
                return positions
            }
        });
        var PanoramaThreeAndMoreItemsRenderStrategy = PanoramaItemsRenderStrategy.inherit({
            updatePositions: function(offset) {
                var $items = this._panorama._itemElements(),
                    movingBack = offset * this._getRTLSignCorrection() < 0,
                    positions = this._calculateItemPositions(this._panorama.option("selectedIndex"), movingBack);
                $items.each(function(index) {
                    move($(this), positions[index] + offset)
                })
            },
            animateRollback: function(selectedIndex) {
                var $items = this._panorama._itemElements(),
                    positions = this._calculateItemPositions(selectedIndex),
                    animatingItems = [selectedIndex, this._normalizeIndex(selectedIndex + 1)];
                if (this._isRTLEnabled() ^ position($items.eq(selectedIndex)) > this._startNextPosition()) {
                    animatingItems.push(this._normalizeIndex(selectedIndex - 1))
                }
                $items.each(function(index) {
                    var $item = $(this);
                    if (inArray(index, animatingItems) !== -1) {
                        animation.itemMove($item, positions[index])
                    } else {
                        move($item, positions[index])
                    }
                })
            },
            detectBoundsTransition: function(newIndex, currentIndex) {
                var lastIndex = this._indexBoundary() - 1;
                if (currentIndex === lastIndex && 0 === newIndex) {
                    return "left"
                }
                if (0 === currentIndex && newIndex === lastIndex) {
                    return "right"
                }
            },
            animateComplete: function(boundCross, newIndex, currentIndex) {
                var animations = [],
                    $items = this._panorama._itemElements(),
                    positions = this._calculateItemPositions(newIndex);
                var transitionBack = this._normalizeIndex(currentIndex - 1) === newIndex,
                    cyclingItemIndex = 3 === $items.length && transitionBack ? this._normalizeIndex(currentIndex + 1) : null,
                    cyclingItemPosition = positions[this._indexBoundary()];
                var animatingItems = [newIndex, currentIndex],
                    backAnimatedItemIndex = transitionBack ? currentIndex : newIndex;
                if (!transitionBack) {
                    animatingItems.push(this._normalizeIndex(backAnimatedItemIndex + 1))
                }
                $items.each(function(index) {
                    var $item = $(this);
                    if (inArray(index, animatingItems) === -1) {
                        move($item, positions[index]);
                        return
                    }
                    animations.push(index !== cyclingItemIndex ? animation.itemMove($item, positions[index]) : animation.itemMove($item, cyclingItemPosition, function() {
                        move($item, positions[index])
                    }))
                });
                return when.apply($, animations)
            },
            _calculateItemPositions: function(atIndex, movingBack) {
                var previousIndex = this._normalizeIndex(atIndex - 1),
                    itemMargin = this._itemMargin(),
                    itemWidth = this._itemWidth(),
                    itemPositionOffset = (itemWidth + itemMargin) * this._getRTLSignCorrection(),
                    positions = [],
                    prevPosition = this._startPrevPosition(),
                    nextPosition = this._startNextPosition();
                for (var i = atIndex; i !== previousIndex; i = this._normalizeIndex(i + 1)) {
                    positions[i] = nextPosition;
                    nextPosition += itemPositionOffset
                }
                if (movingBack) {
                    positions[previousIndex] = nextPosition;
                    nextPosition += itemPositionOffset
                } else {
                    positions[previousIndex] = prevPosition
                }
                positions.push(nextPosition);
                return positions
            }
        });
        var Panorama = CollectionWidget.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    selectedIndex: 0,
                    title: "panorama",
                    backgroundImage: {
                        url: null,
                        width: 0,
                        height: 0
                    },
                    focusStateEnabled: false,
                    selectionMode: "single",
                    selectionRequired: true,
                    selectionByClick: false,
                    titleExpr: function(data) {
                        return data ? data.title : void 0
                    }
                })
            },
            _itemClass: function() {
                return PANORAMA_ITEM_CLASS
            },
            _itemDataKey: function() {
                return PANORAMA_ITEM_DATA_KEY
            },
            _itemContainer: function() {
                return this._$itemsContainer
            },
            _itemWidth: function() {
                if (!this._itemWidthCache) {
                    this._itemWidthCache = this._itemElements().eq(0).outerWidth() || 0
                }
                return this._itemWidthCache
            },
            _clearItemWidthCache: function() {
                delete this._itemWidthCache
            },
            _elementWidth: function() {
                if (!this._elementWidthCache) {
                    this._elementWidthCache = this.$element().width()
                }
                return this._elementWidthCache
            },
            _clearElementWidthCache: function() {
                delete this._elementWidthCache
            },
            _titleWidth: function() {
                if (!this._titleWidthCache) {
                    this._titleWidthCache = this._$title.outerWidth()
                }
                return this._titleWidthCache
            },
            _clearTitleWidthCache: function() {
                delete this._titleWidthCache
            },
            _init: function() {
                this.callBase();
                this._initItemsRenderStrategy();
                this._initWrapper();
                this._initTitle();
                this._initItemsContainer();
                this._initSwipeHandlers()
            },
            _dimensionChanged: function() {
                this._clearItemWidthCache();
                this._clearElementWidthCache();
                this._clearTitleWidthCache();
                this._updatePositions()
            },
            _initWrapper: function() {
                this._$wrapper = $("<div>").addClass(PANORAMA_WRAPPER_CLASS).appendTo(this.$element())
            },
            _initItemsRenderStrategy: function() {
                var itemsRenderStrategy;
                switch (this.option("items").length) {
                    case 0:
                    case 1:
                        itemsRenderStrategy = PanoramaOneAndLessItemsRenderStrategy;
                        break;
                    case 2:
                        itemsRenderStrategy = PanoramaTwoItemsRenderStrategy;
                        break;
                    default:
                        itemsRenderStrategy = PanoramaThreeAndMoreItemsRenderStrategy
                }
                this._itemsRenderStrategy = new itemsRenderStrategy(this);
                this._itemsRenderStrategy.init()
            },
            _initBackgroundImage: function() {
                var backgroundUrl = this.option("backgroundImage.url");
                if (backgroundUrl) {
                    this.$element().css("backgroundImage", "url(" + backgroundUrl + ")")
                }
            },
            _initTitle: function() {
                this._$title = $("<div>").addClass(PANORAMA_TITLE_CLASS);
                this._$ghostTitle = $("<div>").addClass(PANORAMA_GHOST_TITLE_CLASS);
                this._$wrapper.append(this._$title);
                this._$wrapper.append(this._$ghostTitle);
                this._updateTitle()
            },
            _updateTitle: function() {
                var title = this.option("title");
                this._$title.text(title);
                this._$ghostTitle.text(title);
                this._toggleGhostTitle(false)
            },
            _toggleGhostTitle: function(visible) {
                var $ghostTitle = this._$ghostTitle;
                if (visible) {
                    $ghostTitle.css("opacity", 1)
                } else {
                    $ghostTitle.css("opacity", 0)
                }
            },
            _getRTLSignCorrection: function() {
                return this.option("rtlEnabled") ? -1 : 1
            },
            _initItemsContainer: function() {
                this._$itemsContainer = $("<div>").addClass(PANORAMA_ITEMS_CONTAINER_CLASS);
                this._$wrapper.append(this._$itemsContainer)
            },
            _initMarkup: function() {
                this.$element().addClass(PANORAMA_CLASS);
                this.callBase();
                this._initBackgroundImage()
            },
            _render: function() {
                this.callBase();
                this._itemsRenderStrategy.render();
                this._updateSelection()
            },
            _updatePositions: function(offset) {
                offset = offset || 0;
                this._updateBackgroundPosition(offset * this._calculateBackgroundStep());
                this._updateTitlePosition(offset * this._calculateTitleStep());
                this._itemsRenderStrategy.updatePositions(offset * this._elementWidth())
            },
            _updateBackgroundPosition: function(offset) {
                moveBackground(this.$element(), this._calculateBackgroundPosition(this.option("selectedIndex")) + offset)
            },
            _updateTitlePosition: function(offset) {
                move(this._$title, this._calculateTitlePosition(this.option("selectedIndex")) + offset)
            },
            _animateRollback: function(currentIndex) {
                this._animateBackgroundMove(currentIndex);
                this._animateTitleMove(currentIndex);
                this._itemsRenderStrategy.animateRollback(currentIndex)
            },
            _animateBackgroundMove: function(toIndex) {
                return animation.backgroundMove(this.$element(), this._calculateBackgroundPosition(toIndex))
            },
            _animateTitleMove: function(toIndex) {
                return animation.titleMove(this._$title, this._calculateTitlePosition(toIndex))
            },
            _animateComplete: function(newIndex, currentIndex) {
                var that = this,
                    boundCross = this._itemsRenderStrategy.detectBoundsTransition(newIndex, currentIndex);
                var backgroundAnimation = this._performBackgroundAnimation(boundCross, newIndex);
                var titleAnimation = this._performTitleAnimation(boundCross, newIndex);
                var itemsAnimation = this._itemsRenderStrategy.animateComplete(boundCross, newIndex, currentIndex);
                when(backgroundAnimation, titleAnimation, itemsAnimation).done(function() {
                    that._indexChangeOnAnimation = true;
                    that.option("selectedIndex", newIndex);
                    that._indexChangeOnAnimation = false
                })
            },
            _performBackgroundAnimation: function(boundCross, newIndex) {
                if (boundCross) {
                    return this._animateBackgroundBoundsTransition(boundCross, newIndex)
                }
                return this._animateBackgroundMove(newIndex)
            },
            _animateBackgroundBoundsTransition: function(bound, newIndex) {
                var that = this,
                    isLeft = "left" === bound,
                    afterAnimationPosition = this._calculateBackgroundPosition(newIndex),
                    animationEndPositionShift = isLeft ^ this.option("rtlEnabled") ? -this._calculateBackgroundScaledWidth() : this._calculateBackgroundScaledWidth(),
                    animationEndPosition = afterAnimationPosition + animationEndPositionShift;
                return animation.backgroundMove(this.$element(), animationEndPosition, function() {
                    moveBackground(that.$element(), afterAnimationPosition)
                })
            },
            _performTitleAnimation: function(boundCross, newIndex) {
                if (boundCross) {
                    return this._animateTitleBoundsTransition(boundCross, newIndex)
                }
                return this._animateTitleMove(newIndex)
            },
            _animateTitleBoundsTransition: function(bound, newIndex) {
                var that = this,
                    $ghostTitle = this._$ghostTitle,
                    ghostWidth = this._titleWidth(),
                    panoramaWidth = this._elementWidth(),
                    isLeft = "left" === bound,
                    rtl = this.option("rtlEnabled"),
                    ghostTitleStartPosition = isLeft ^ rtl ? panoramaWidth : -ghostWidth,
                    ghostTitleEndPosition = isLeft ^ rtl ? -(panoramaWidth + ghostWidth) : panoramaWidth;
                move($ghostTitle, ghostTitleStartPosition);
                this._toggleGhostTitle(true);
                this._swapGhostWithTitle();
                var ghostAnimation = animation.titleMove($ghostTitle, ghostTitleEndPosition, function() {
                    that._toggleGhostTitle(false)
                });
                var titleAnimation = animation.titleMove(this._$title, this._calculateTitlePosition(newIndex));
                return when(ghostAnimation, titleAnimation)
            },
            _swapGhostWithTitle: function() {
                var $ghostTitle = this._$ghostTitle,
                    $title = this._$title,
                    lastTitlePosition = position($title);
                move($title, position($ghostTitle));
                move($ghostTitle, lastTitlePosition)
            },
            _calculateTitlePosition: function(atIndex) {
                var panoramaWidth = this._elementWidth(),
                    titleWidth = this._titleWidth(),
                    titleMargin = panoramaWidth * PANORAMA_TITLE_MARGIN_SCALE,
                    titleStartPosition = this.option("rtlEnabled") ? panoramaWidth - titleMargin - titleWidth : titleMargin,
                    titleStep = atIndex * this._calculateTitleStep() * this._getRTLSignCorrection();
                return titleStartPosition - titleStep
            },
            _calculateTitleStep: function() {
                var panoramaWidth = this._elementWidth(),
                    titleWidth = this._titleWidth(),
                    indexBoundary = this._indexBoundary() || 1;
                return Math.max((titleWidth - panoramaWidth) / indexBoundary, titleWidth / indexBoundary)
            },
            _calculateBackgroundPosition: function(atIndex) {
                var panoramaWidth = this._elementWidth(),
                    backgroundScaledWidth = this._calculateBackgroundScaledWidth(),
                    backgroundStartPosition = this.option("rtlEnabled") ? panoramaWidth - backgroundScaledWidth : 0,
                    backgroundOffset = atIndex * this._calculateBackgroundStep() * this._getRTLSignCorrection();
                return backgroundStartPosition - backgroundOffset
            },
            _calculateBackgroundStep: function() {
                var itemWidth = this._itemWidth(),
                    backgroundScaledWidth = this._calculateBackgroundScaledWidth();
                return Math.max((backgroundScaledWidth - itemWidth) / (this._indexBoundary() || 1), 0)
            },
            _calculateBackgroundScaledWidth: function() {
                return this.$element().height() * this.option("backgroundImage.width") / (this.option("backgroundImage.height") || 1)
            },
            _initSwipeHandlers: function() {
                eventsEngine.on(this.$element(), eventUtils.addNamespace(swipeEvents.start, this.NAME), {
                    itemSizeFunc: this._elementWidth.bind(this)
                }, this._swipeStartHandler.bind(this));
                eventsEngine.on(this.$element(), eventUtils.addNamespace(swipeEvents.swipe, this.NAME), this._swipeUpdateHandler.bind(this));
                eventsEngine.on(this.$element(), eventUtils.addNamespace(swipeEvents.end, this.NAME), this._swipeEndHandler.bind(this))
            },
            _swipeStartHandler: function(e) {
                this._stopAnimations();
                e.maxLeftOffset = 1;
                e.maxRightOffset = 1;
                if (config().designMode || this.option("disabled") || this._indexBoundary() <= 1) {
                    e.cancel = true
                }
            },
            _stopAnimations: function() {
                endAnimation([this.$element(), this._$ghostTitle, this._$title]);
                endAnimation(this._itemsRenderStrategy.allItemElements())
            },
            _swipeUpdateHandler: function(e) {
                this._updatePositions(e.offset)
            },
            _swipeEndHandler: function(e) {
                var currentIndex = this.option("selectedIndex"),
                    targetOffset = e.targetOffset * this._getRTLSignCorrection();
                if (0 === targetOffset) {
                    this._animateRollback(currentIndex)
                } else {
                    this._animateComplete(this._normalizeIndex(currentIndex - targetOffset), currentIndex)
                }
            },
            _updateSelection: function() {
                if (!this._indexChangeOnAnimation) {
                    this._updatePositions()
                }
            },
            _normalizeIndex: function(index) {
                var boundary = this._indexBoundary();
                if (index < 0) {
                    index = boundary + index
                }
                if (index >= boundary) {
                    index -= boundary
                }
                return index
            },
            _indexBoundary: function() {
                return this.option("items").length
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._dimensionChanged()
                }
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "width":
                        this.callBase(args);
                        this._dimensionChanged();
                        break;
                    case "backgroundImage":
                        this._invalidate();
                        break;
                    case "title":
                        this._updateTitle();
                        break;
                    case "items":
                        this._initItemsRenderStrategy();
                        this.callBase(args);
                        break;
                    case "titleExpr":
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        Panorama.ItemClass = PanoramaItem;
        registerComponent("dxPanorama", Panorama);
        module.exports = Panorama;
        module.exports.animation = animation
    },
    /*!**************************************************!*\
      !*** ./artifacts/transpiled/ui/panorama/item.js ***!
      \**************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            CollectionWidgetItem = __webpack_require__( /*! ../collection/item */ 154);
        var PANORAMA_ITEM_TITLE_CLASS = "dx-panorama-item-title";
        var PanoramaItem = CollectionWidgetItem.inherit({
            _renderWatchers: function() {
                this.callBase();
                this._startWatcher("title", this._renderTitle.bind(this))
            },
            _renderTitle: function(title) {
                this._$element.children("." + PANORAMA_ITEM_TITLE_CLASS).remove();
                if (!title) {
                    return
                }
                var $header = $("<div>").addClass(PANORAMA_ITEM_TITLE_CLASS).text(title);
                this._$element.prepend($header)
            }
        });
        module.exports = PanoramaItem
    },
    /*!******************************************!*\
      !*** ./artifacts/transpiled/ui/pivot.js ***!
      \******************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../events/core/events_engine */ 5),
            fx = __webpack_require__( /*! ../animation/fx */ 31),
            swipeEvents = __webpack_require__( /*! ../events/swipe */ 125),
            translator = __webpack_require__( /*! ../animation/translator */ 24),
            domUtils = __webpack_require__( /*! ../core/utils/dom */ 12),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            isDefined = __webpack_require__( /*! ../core/utils/type */ 1).isDefined,
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            eventUtils = __webpack_require__( /*! ../events/utils */ 9),
            config = __webpack_require__( /*! ../core/config */ 25),
            CollectionWidget = __webpack_require__( /*! ./collection/ui.collection_widget.edit */ 47),
            PivotTabs = __webpack_require__( /*! ./pivot/ui.pivot_tabs */ 805),
            EmptyTemplate = __webpack_require__( /*! ./widget/empty_template */ 93),
            ChildDefaultTemplate = __webpack_require__( /*! ./widget/child_default_template */ 102),
            Deferred = __webpack_require__( /*! ../core/utils/deferred */ 7).Deferred;
        var PIVOT_CLASS = "dx-pivot",
            PIVOT_AUTOHEIGHT_CLASS = "dx-pivot-autoheight",
            PIVOT_WRAPPER_CLASS = "dx-pivot-wrapper",
            PIVOT_TABS_CONTAINER_CLASS = "dx-pivottabs-container",
            PIVOT_ITEM_CONTAINER_CLASS = "dx-pivot-itemcontainer",
            PIVOT_ITEM_WRAPPER_CLASS = "dx-pivot-itemwrapper",
            PIVOT_ITEM_CLASS = "dx-pivot-item",
            PIVOT_ITEM_HIDDEN_CLASS = "dx-pivot-item-hidden",
            PIVOT_ITEM_DATA_KEY = "dxPivotItemData",
            PIVOT_RETURN_BACK_DURATION = 200,
            PIVOT_SLIDE_AWAY_DURATION = 50,
            PIVOT_SLIDE_BACK_DURATION = 250,
            PIVOT_SLIDE_BACK_EASING = "cubic-bezier(.10, 1, 0, 1)";
        var animation = {
            returnBack: function($element) {
                fx.animate($element, {
                    type: "slide",
                    to: {
                        left: 0
                    },
                    duration: PIVOT_RETURN_BACK_DURATION
                })
            },
            slideAway: function($element, position, complete) {
                fx.animate($element, {
                    type: "slide",
                    to: {
                        left: position
                    },
                    duration: PIVOT_SLIDE_AWAY_DURATION,
                    complete: complete
                })
            },
            slideBack: function($element) {
                fx.animate($element, {
                    type: "slide",
                    to: {
                        left: 0
                    },
                    easing: PIVOT_SLIDE_BACK_EASING,
                    duration: PIVOT_SLIDE_BACK_DURATION
                })
            },
            complete: function($element) {
                fx.stop($element, true)
            }
        };
        var Pivot = CollectionWidget.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    selectedIndex: 0,
                    swipeEnabled: true,
                    itemTitleTemplate: "title",
                    contentTemplate: "content",
                    focusStateEnabled: false,
                    selectionMode: "single",
                    selectionRequired: true,
                    selectionByClick: false
                })
            },
            _itemClass: function() {
                return PIVOT_ITEM_CLASS
            },
            _itemDataKey: function() {
                return PIVOT_ITEM_DATA_KEY
            },
            _itemContainer: function() {
                return this._$itemWrapper
            },
            _elementWidth: function() {
                if (!this._elementWidthCache) {
                    this._elementWidthCache = this.$element().width()
                }
                return this._elementWidthCache
            },
            _clearElementWidthCache: function() {
                delete this._elementWidthCache
            },
            _init: function() {
                this.callBase();
                this.$element().addClass(PIVOT_CLASS);
                this._initWrapper();
                this._initTabs();
                this._initItemContainer();
                this._clearItemsCache();
                this._initSwipeHandlers()
            },
            _initTemplates: function() {
                this.callBase();
                this._defaultTemplates.content = new EmptyTemplate;
                this._defaultTemplates.title = new ChildDefaultTemplate("item", this)
            },
            _dimensionChanged: function() {
                this._clearElementWidthCache()
            },
            _initWrapper: function() {
                this._$wrapper = $("<div>").addClass(PIVOT_WRAPPER_CLASS).appendTo(this.$element())
            },
            _initItemContainer: function() {
                var $itemContainer = $("<div>").addClass(PIVOT_ITEM_CONTAINER_CLASS);
                this._$wrapper.append($itemContainer);
                this._$itemWrapper = $("<div>").addClass(PIVOT_ITEM_WRAPPER_CLASS);
                $itemContainer.append(this._$itemWrapper)
            },
            _clearItemsCache: function() {
                this._itemsCache = []
            },
            _initTabs: function() {
                var that = this,
                    $tabsContainer = $("<div>").addClass(PIVOT_TABS_CONTAINER_CLASS);
                this._$wrapper.append($tabsContainer);
                this._tabs = this._createComponent($tabsContainer, PivotTabs, {
                    itemTemplateProperty: "titleTemplate",
                    itemTemplate: this._getTemplateByOption("itemTitleTemplate"),
                    items: this.option("items"),
                    selectedIndex: this.option("selectedIndex"),
                    onPrepare: function() {
                        that._prepareAnimation()
                    },
                    onUpdatePosition: function(args) {
                        that._updateContentPosition(args.offset)
                    },
                    onRollback: function() {
                        that._animateRollback()
                    },
                    onSelectionChanged: function(args) {
                        that.option("selectedItem", args.addedItems[0])
                    },
                    swipeEnabled: this.option("swipeEnabled")
                })
            },
            _initMarkup: function() {
                this._renderContentTemplate();
                this.callBase()
            },
            _render: function() {
                this.callBase();
                var selectedIndex = this.option("selectedIndex");
                this._renderCurrentContent(selectedIndex, selectedIndex)
            },
            _renderContentTemplate: function() {
                if (isDefined(this._singleContent)) {
                    return
                }
                this._getTemplateByOption("contentTemplate").render({
                    container: domUtils.getPublicElement(this._$itemWrapper)
                });
                this._singleContent = !this._$itemWrapper.is(":empty")
            },
            _renderDimensions: function() {
                this.callBase();
                this.$element().toggleClass(PIVOT_AUTOHEIGHT_CLASS, "auto" === this.option("height"))
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._tabs._dimensionChanged()
                }
            },
            _renderCurrentContent: function(currentIndex, previousIndex) {
                var itemsCache = this._itemsCache;
                itemsCache[previousIndex] = this._selectedItemElement();
                var $hidingItem = itemsCache[previousIndex],
                    $showingItem = itemsCache[currentIndex];
                domUtils.triggerHidingEvent($hidingItem);
                $hidingItem.addClass(PIVOT_ITEM_HIDDEN_CLASS);
                if ($showingItem) {
                    $showingItem.removeClass(PIVOT_ITEM_HIDDEN_CLASS);
                    domUtils.triggerShownEvent($showingItem)
                } else {
                    this._prepareContent();
                    this._renderContent()
                }
                this._selectionChangePromise && this._selectionChangePromise.resolve();
                this._selectionChangePromise = new Deferred
            },
            _updateContentPosition: function(offset) {
                translator.move(this._$itemWrapper, {
                    left: this._calculatePixelOffset(offset)
                })
            },
            _animateRollback: function() {
                animation.returnBack(this._$itemWrapper)
            },
            _animateComplete: function(newIndex, currentIndex) {
                var $itemWrapper = this._$itemWrapper,
                    rtlSignCorrection = this._getRTLSignCorrection(),
                    intermediatePosition = this._elementWidth() * (this._isPrevSwipeHandled() ? 1 : -1) * rtlSignCorrection;
                animation.slideAway($itemWrapper, intermediatePosition, function() {
                    translator.move($itemWrapper, {
                        left: -intermediatePosition
                    });
                    this._renderCurrentContent(newIndex, currentIndex)
                }.bind(this));
                animation.slideBack($itemWrapper)
            },
            _calculatePixelOffset: function(offset) {
                offset = offset || 0;
                return offset * this._elementWidth()
            },
            _isPrevSwipeHandled: function() {
                var wrapperOffset = translator.locate(this._$itemWrapper).left,
                    rtl = this.option("rtlEnabled");
                return rtl ^ wrapperOffset > 0 && 0 !== wrapperOffset
            },
            _initSwipeHandlers: function() {
                var $element = this.$element();
                eventsEngine.on($element, eventUtils.addNamespace(swipeEvents.start, this.NAME), {
                    itemSizeFunc: this._elementWidth.bind(this)
                }, this._swipeStartHandler.bind(this));
                eventsEngine.on($element, eventUtils.addNamespace(swipeEvents.swipe, this.NAME), this._swipeUpdateHandler.bind(this));
                eventsEngine.on($element, eventUtils.addNamespace(swipeEvents.end, this.NAME), this._swipeEndHandler.bind(this))
            },
            _swipeStartHandler: function(e) {
                this._prepareAnimation();
                this._tabs.prepare();
                if (config().designMode || this.option("disabled") || !this.option("swipeEnabled") || this._indexBoundary() <= 1) {
                    e.cancel = true
                } else {
                    this._swipeGestureRunning = true
                }
                e.maxLeftOffset = 1;
                e.maxRightOffset = 1
            },
            _prepareAnimation: function() {
                this._stopAnimation()
            },
            _stopAnimation: function() {
                animation.complete(this._$itemWrapper)
            },
            _swipeUpdateHandler: function(e) {
                var offset = e.offset;
                this._updateContentPosition(offset);
                this._tabs.updatePosition(offset)
            },
            _swipeEndHandler: function(e) {
                var targetOffset = e.targetOffset * this._getRTLSignCorrection();
                if (0 === targetOffset) {
                    this._animateRollback();
                    this._tabs.rollback()
                } else {
                    var newIndex = this._normalizeIndex(this.option("selectedIndex") - targetOffset);
                    this.option("selectedIndex", newIndex)
                }
                this._swipeGestureRunning = false
            },
            _normalizeIndex: function(index) {
                var boundary = this._indexBoundary();
                if (index < 0) {
                    index = boundary + index
                }
                if (index >= boundary) {
                    index -= boundary
                }
                return index
            },
            _indexBoundary: function() {
                return this.option("items").length
            },
            _renderContentImpl: function() {
                if (this._singleContent) {
                    return
                }
                var items = this.option("items"),
                    selectedIndex = this.option("selectedIndex");
                if (items.length) {
                    this._renderItems([items[selectedIndex]])
                }
            },
            _selectedItemElement: function() {
                return this._$itemWrapper.children("." + PIVOT_ITEM_CLASS + ":not(." + PIVOT_ITEM_HIDDEN_CLASS + ")")
            },
            _getRTLSignCorrection: function() {
                return this.option("rtlEnabled") ? -1 : 1
            },
            _clean: function() {
                animation.complete(this._$itemWrapper);
                this.callBase()
            },
            _cleanItemContainer: function() {
                if (this._singleContent) {
                    return
                }
                this.callBase()
            },
            _refresh: function() {
                this._tabs._refresh();
                this.callBase()
            },
            _updateSelection: function(addedItems, removedItems) {
                var newIndex = addedItems[0],
                    oldIndex = removedItems[0];
                if (!this._swipeGestureRunning) {
                    this._prepareAnimation()
                }
                this._animateComplete(newIndex, oldIndex);
                this._tabs.option("selectedIndex", newIndex)
            },
            _optionChanged: function(args) {
                var value = args.value;
                switch (args.name) {
                    case "disabled":
                        this._tabs.option("disabled", value);
                        this.callBase(args);
                        break;
                    case "items":
                        this._tabs.option(args.fullName, value);
                        this._clearItemsCache();
                        this.callBase(args);
                        break;
                    case "rtlEnabled":
                        this._tabs.option("rtlEnabled", value);
                        this._clearItemsCache();
                        this.callBase(args);
                        break;
                    case "itemTitleTemplate":
                        this._tabs.option("itemTemplate", this._getTemplate(value));
                        break;
                    case "swipeEnabled":
                        this._tabs.option("swipeEnabled", value);
                        break;
                    case "contentTemplate":
                        this._singleContent = null;
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            }
        });
        registerComponent("dxPivot", Pivot);
        module.exports = Pivot;
        module.exports.mockPivotTabs = function(Mock) {
            PivotTabs = Mock
        };
        module.exports.animation = animation
    },
    /*!********************************************************!*\
      !*** ./artifacts/transpiled/ui/pivot/ui.pivot_tabs.js ***!
      \********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../../core/renderer */ 2),
            eventsEngine = __webpack_require__( /*! ../../events/core/events_engine */ 5),
            when = __webpack_require__( /*! ../../core/utils/deferred */ 7).when,
            fx = __webpack_require__( /*! ../../animation/fx */ 31),
            swipeEvents = __webpack_require__( /*! ../../events/swipe */ 125),
            translator = __webpack_require__( /*! ../../animation/translator */ 24),
            eventUtils = __webpack_require__( /*! ../../events/utils */ 9),
            extend = __webpack_require__( /*! ../../core/utils/extend */ 0).extend,
            each = __webpack_require__( /*! ../../core/utils/iterator */ 3).each,
            CollectionWidget = __webpack_require__( /*! ../collection/ui.collection_widget.edit */ 47),
            config = __webpack_require__( /*! ../../core/config */ 25),
            BindableTemplate = __webpack_require__( /*! ../widget/bindable_template */ 60);
        var PIVOT_TABS_CLASS = "dx-pivottabs",
            PIVOT_TAB_CLASS = "dx-pivottabs-tab",
            PIVOT_TAB_SELECTED_CLASS = "dx-pivottabs-tab-selected",
            PIVOT_GHOST_TAB_CLASS = "dx-pivottabs-ghosttab",
            PIVOT_TAB_DATA_KEY = "dxPivotTabData",
            PIVOT_TAB_MOVE_DURATION = 200,
            PIVOT_TAB_MOVE_EASING = "cubic-bezier(.40, .80, .60, 1)";
        var animation = {
            moveTo: function($tab, position, completeAction) {
                return fx.animate($tab, {
                    type: "slide",
                    to: {
                        left: position
                    },
                    duration: PIVOT_TAB_MOVE_DURATION,
                    easing: PIVOT_TAB_MOVE_EASING,
                    complete: completeAction
                })
            },
            slideAppear: function($tab, position) {
                return fx.animate($tab, {
                    type: "slide",
                    to: {
                        left: position,
                        opacity: 1
                    },
                    duration: PIVOT_TAB_MOVE_DURATION,
                    easing: PIVOT_TAB_MOVE_EASING
                })
            },
            slideDisappear: function($tab, position) {
                return fx.animate($tab, {
                    type: "slide",
                    to: {
                        left: position,
                        opacity: 0
                    },
                    duration: PIVOT_TAB_MOVE_DURATION,
                    easing: PIVOT_TAB_MOVE_EASING
                })
            },
            complete: function(elements) {
                if (!elements) {
                    return
                }
                each(elements, function(_, $element) {
                    fx.stop($element, true)
                })
            },
            stop: function(elements) {
                if (!elements) {
                    return
                }
                each(elements, function(_, $element) {
                    fx.stop($element)
                })
            }
        };
        var PivotTabs = CollectionWidget.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    selectedIndex: 0,
                    onPrepare: null,
                    onUpdatePosition: null,
                    onRollback: null,
                    focusStateEnabled: false,
                    selectionMode: "single",
                    selectionRequired: true,
                    swipeEnabled: true
                })
            },
            _itemClass: function() {
                return PIVOT_TAB_CLASS
            },
            _itemDataKey: function() {
                return PIVOT_TAB_DATA_KEY
            },
            _itemContainer: function() {
                return this.$element()
            },
            _elementWidth: function() {
                if (!this._elementWidthCache) {
                    this._elementWidthCache = this.$element().width()
                }
                return this._elementWidthCache
            },
            _clearElementWidthCache: function() {
                delete this._elementWidthCache
            },
            _itemWidths: function() {
                if (!this._itemWidthsCache) {
                    var $tabs = this._itemElements(),
                        widths = [];
                    $tabs.each(function() {
                        widths.push($(this).outerWidth())
                    });
                    this._itemWidthsCache = widths
                }
                return this._itemWidthsCache
            },
            _init: function() {
                this.callBase();
                this._initGhostTab();
                this._initSwipeHandlers();
                this._initActions()
            },
            _dimensionChanged: function() {
                this._clearElementWidthCache();
                this._cleanPositionCache();
                this._updateTabsPositions()
            },
            _initGhostTab: function() {
                this._$ghostTab = $("<div>").addClass(PIVOT_GHOST_TAB_CLASS)
            },
            _initActions: function() {
                this._updatePositionAction = this._createActionByOption("onUpdatePosition");
                this._rollbackAction = this._createActionByOption("onRollback");
                this._prepareAction = this._createActionByOption("onPrepare")
            },
            _initTemplates: function() {
                this.callBase();
                this._defaultTemplates.item = new BindableTemplate(function($container, data) {
                    var text = data && data.title ? data.title : String(data);
                    $container.empty();
                    $container.append($("<span>").text(text))
                }, ["title"], this.option("integrationOptions.watchMethod"))
            },
            _render: function() {
                this.$element().addClass(PIVOT_TABS_CLASS);
                this.callBase();
                this._calculateMaxOffsets(this._getSelectedItemIndices());
                this._updateTabsPositions();
                this._renderGhostTab()
            },
            _renderGhostTab: function() {
                this._itemContainer().append(this._$ghostTab);
                this._toggleGhostTab(false)
            },
            _toggleGhostTab: function(visible) {
                var $ghostTab = this._$ghostTab;
                if (visible) {
                    this._updateGhostTabContent();
                    $ghostTab.css("opacity", 1)
                } else {
                    $ghostTab.css("opacity", 0)
                }
            },
            _isGhostTabVisible: function() {
                return "1" === this._$ghostTab.css("opacity")
            },
            _updateGhostTabContent: function(prevIndex) {
                prevIndex = void 0 === prevIndex ? this._previousIndex() : prevIndex;
                var $ghostTab = this._$ghostTab,
                    $items = this._itemElements();
                $ghostTab.html($items.eq(prevIndex).html())
            },
            _updateTabsPositions: function(offset) {
                offset = this._applyOffsetBoundaries(offset);
                var isPrevSwipeHandled = this.option("rtlEnabled") ^ offset > 0 && 0 !== offset,
                    tabPositions = this._calculateTabPositions(isPrevSwipeHandled ? "replace" : "append");
                this._moveTabs(tabPositions, offset);
                this._toggleGhostTab(isPrevSwipeHandled)
            },
            _moveTabs: function(positions, offset) {
                offset = offset || 0;
                var $tabs = this._allTabElements();
                $tabs.each(function(index) {
                    translator.move($(this), {
                        left: positions[index] + offset
                    })
                })
            },
            _applyOffsetBoundaries: function(offset) {
                offset = offset || 0;
                var maxOffset = offset > 0 ? this._maxRightOffset : this._maxLeftOffset;
                return offset * maxOffset
            },
            _animateRollback: function() {
                var that = this,
                    $tabs = this._itemElements(),
                    positions = this._calculateTabPositions("prepend");
                if (this._isGhostTabVisible()) {
                    this._swapGhostWithTab($tabs.eq(this._previousIndex()));
                    animation.moveTo(this._$ghostTab, positions[this._indexBoundary()], function() {
                        that._toggleGhostTab(false)
                    })
                }
                $tabs.each(function(index) {
                    animation.moveTo($(this), positions[index])
                })
            },
            _animateComplete: function(newIndex, currentIndex) {
                var $tabs = this._itemElements(),
                    isPrevSwipeHandled = this._isGhostTabVisible();
                $tabs.eq(currentIndex).removeClass(PIVOT_TAB_SELECTED_CLASS);
                if (isPrevSwipeHandled) {
                    this._animateIndexDecreasing(newIndex)
                } else {
                    this._animateIndexIncreasing(newIndex)
                }
                $tabs.eq(newIndex).addClass(PIVOT_TAB_SELECTED_CLASS)
            },
            _animateIndexDecreasing: function(newIndex) {
                var $tabs = this._itemElements(),
                    positions = this._calculateTabPositions("append", newIndex),
                    animations = [];
                $tabs.each(function(index) {
                    animations.push(animation.moveTo($(this), positions[index]))
                });
                animations.push(animation.slideDisappear(this._$ghostTab, positions[this._indexBoundary()]));
                return when.apply($, animations)
            },
            _animateIndexIncreasing: function(newIndex) {
                var that = this,
                    $tabs = this._itemElements(),
                    positions = this._calculateTabPositions("prepend", newIndex),
                    previousIndex = this._previousIndex(newIndex),
                    $prevTab = $tabs.eq(previousIndex),
                    prevTabPosition = translator.locate($prevTab).left,
                    rtl = this.option("rtlEnabled"),
                    bound = rtl ? this._elementWidth() - this._itemWidths()[previousIndex] : 0,
                    isNextSwipeHandled = (prevTabPosition - bound) * this._getRTLSignCorrection() < 0,
                    animations = [];
                if (!isNextSwipeHandled) {
                    this._moveTabs(this._calculateTabPositions("append", previousIndex))
                }
                this._updateGhostTabContent(previousIndex);
                this._swapGhostWithTab($tabs.eq(previousIndex));
                $tabs.each(function(index) {
                    var $tab = $(this),
                        newPosition = positions[index];
                    animations.push(index === previousIndex ? animation.slideAppear($tab, newPosition) : animation.moveTo($tab, newPosition))
                });
                animations.push(animation.moveTo(this._$ghostTab, positions[this._indexBoundary()], function() {
                    that._toggleGhostTab(false)
                }));
                return when.apply($, animations)
            },
            _swapGhostWithTab: function($tab) {
                var $ghostTab = this._$ghostTab,
                    lastTabPosition = translator.locate($tab).left,
                    lastTabOpacity = $tab.css("opacity");
                translator.move($tab, {
                    left: translator.locate($ghostTab).left
                });
                $tab.css("opacity", $ghostTab.css("opacity"));
                translator.move($ghostTab, {
                    left: lastTabPosition
                });
                $ghostTab.css("opacity", lastTabOpacity)
            },
            _calculateTabPositions: function(ghostPosition, index) {
                index = void 0 === index ? this.option("selectedIndex") : index;
                var mark = index + ghostPosition;
                if (this._calculatedPositionsMark !== mark) {
                    this._calculatedPositions = this._calculateTabPositionsImpl(index, ghostPosition);
                    this._calculatedPositionsMark = mark
                }
                return this._calculatedPositions
            },
            _calculateTabPositionsImpl: function(currentIndex, ghostPosition) {
                var prevIndex = this._normalizeIndex(currentIndex - 1),
                    widths = this._itemWidths();
                var rtl = this.option("rtlEnabled"),
                    signCorrection = this._getRTLSignCorrection(),
                    tabsContainerWidth = this._elementWidth(),
                    nextPosition = rtl ? tabsContainerWidth : 0,
                    positions = [];
                var calculateTabPosition = function(currentIndex, width) {
                    var rtlOffset = rtl * width;
                    positions.splice(currentIndex, 0, nextPosition - rtlOffset);
                    nextPosition += width * signCorrection
                };
                each(widths.slice(currentIndex), calculateTabPosition);
                each(widths.slice(0, currentIndex), calculateTabPosition);
                switch (ghostPosition) {
                    case "replace":
                        var lastTabPosition = positions[prevIndex];
                        positions.splice(prevIndex, 1, rtl ? tabsContainerWidth : -widths[prevIndex]);
                        positions.push(lastTabPosition);
                        break;
                    case "prepend":
                        positions.push(rtl ? tabsContainerWidth : -widths[prevIndex]);
                        break;
                    case "append":
                        positions.push(nextPosition - widths[currentIndex] * rtl)
                }
                return positions
            },
            _allTabElements: function() {
                return this._itemContainer().find("." + PIVOT_TAB_CLASS + ", ." + PIVOT_GHOST_TAB_CLASS)
            },
            _initSwipeHandlers: function() {
                var $element = this.$element();
                eventsEngine.on($element, eventUtils.addNamespace(swipeEvents.start, this.NAME), {
                    itemSizeFunc: this._elementWidth.bind(this)
                }, this._swipeStartHandler.bind(this));
                eventsEngine.on($element, eventUtils.addNamespace(swipeEvents.swipe, this.NAME), this._swipeUpdateHandler.bind(this));
                eventsEngine.on($element, eventUtils.addNamespace(swipeEvents.end, this.NAME), this._swipeEndHandler.bind(this))
            },
            _swipeStartHandler: function(e) {
                this._prepareAnimation();
                this._prepareAction();
                e.maxLeftOffset = 1;
                e.maxRightOffset = 1;
                if (config().designMode || this.option("disabled") || !this.option("swipeEnabled") || this._indexBoundary() <= 1) {
                    e.cancel = true
                } else {
                    this._swipeGestureRunning = true
                }
            },
            _prepareAnimation: function() {
                this._stopAnimation()
            },
            _stopAnimation: function() {
                animation.complete(this._allTabElements())
            },
            _swipeUpdateHandler: function(e) {
                var offset = e.offset;
                this._updateTabsPositions(offset);
                this._updatePositionAction({
                    offset: offset
                })
            },
            _swipeEndHandler: function(e) {
                var targetOffset = e.targetOffset * this._getRTLSignCorrection();
                if (0 === targetOffset) {
                    this._animateRollback();
                    this._rollbackAction()
                } else {
                    var newIndex = this._normalizeIndex(this.option("selectedIndex") - targetOffset);
                    this.option("selectedIndex", newIndex)
                }
                this._swipeGestureRunning = false
            },
            _previousIndex: function(atIndex) {
                atIndex = void 0 === atIndex ? this.option("selectedIndex") : atIndex;
                return this._normalizeIndex(atIndex - 1)
            },
            _normalizeIndex: function(index) {
                var boundary = this._indexBoundary();
                if (index < 0) {
                    index = boundary + index
                }
                if (index >= boundary) {
                    index -= boundary
                }
                return index
            },
            _indexBoundary: function() {
                return this.option("items").length
            },
            _renderSelection: function(current) {
                this._itemElements().eq(current).addClass(PIVOT_TAB_SELECTED_CLASS)
            },
            _updateSelection: function(addedItems, removedItems) {
                var newIndex = addedItems[0],
                    oldIndex = removedItems[0];
                this._calculateMaxOffsets(newIndex);
                if (!this._swipeGestureRunning) {
                    this._prepareAnimation()
                }
                if (this._itemElements().length) {
                    this._animateComplete(newIndex, oldIndex)
                }
            },
            _calculateMaxOffsets: function(index) {
                var currentTabWidth = this._itemWidths()[index],
                    prevTabWidth = this._itemWidths()[this._previousIndex(index)],
                    rtl = this.option("rtlEnabled");
                this._maxLeftOffset = rtl ? prevTabWidth : currentTabWidth;
                this._maxRightOffset = rtl ? currentTabWidth : prevTabWidth
            },
            _getRTLSignCorrection: function() {
                return this.option("rtlEnabled") ? -1 : 1
            },
            _visibilityChanged: function(visible) {
                if (visible) {
                    this._dimensionChanged()
                }
            },
            _clean: function() {
                animation.stop(this._allTabElements());
                clearTimeout(this._resizeEventTimer);
                this._clearElementWidthCache();
                this._cleanPositionCache();
                this.callBase()
            },
            _cleanPositionCache: function() {
                delete this._itemWidthsCache;
                delete this._calculatedPositionsMark
            },
            _optionChanged: function(args) {
                switch (args.name) {
                    case "items":
                    case "rtlEnabled":
                        this._cleanPositionCache();
                        this.callBase(args);
                        break;
                    case "onPrepare":
                    case "swipeEnabled":
                        break;
                    case "onUpdatePosition":
                    case "onRollback":
                        this._initActions();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            prepare: function() {
                this._prepareAnimation()
            },
            updatePosition: function(offset) {
                this._updateTabsPositions(offset)
            },
            rollback: function() {
                this._animateRollback()
            }
        });
        module.exports = PivotTabs;
        module.exports.animation = animation
    },
    /*!**********************************************!*\
      !*** ./artifacts/transpiled/ui/slide_out.js ***!
      \**********************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var $ = __webpack_require__( /*! ../core/renderer */ 2),
            getPublicElement = __webpack_require__( /*! ../core/utils/dom */ 12).getPublicElement,
            noop = __webpack_require__( /*! ../core/utils/common */ 4).noop,
            isDefined = __webpack_require__( /*! ../core/utils/type */ 1).isDefined,
            registerComponent = __webpack_require__( /*! ../core/component_registrator */ 8),
            extend = __webpack_require__( /*! ../core/utils/extend */ 0).extend,
            PlainEditStrategy = __webpack_require__( /*! ./collection/ui.collection_widget.edit.strategy.plain */ 191),
            SlideOutView = __webpack_require__( /*! ./slide_out_view */ 568),
            CollectionWidget = __webpack_require__( /*! ./collection/ui.collection_widget.edit */ 47),
            List = __webpack_require__( /*! ./list */ 109),
            ChildDefaultTemplate = __webpack_require__( /*! ./widget/child_default_template */ 102),
            EmptyTemplate = __webpack_require__( /*! ./widget/empty_template */ 93);
        var SLIDEOUT_CLASS = "dx-slideout",
            SLIDEOUT_ITEM_CONTAINER_CLASS = "dx-slideout-item-container",
            SLIDEOUT_MENU = "dx-slideout-menu",
            SLIDEOUT_ITEM_CLASS = "dx-slideout-item",
            SLIDEOUT_ITEM_DATA_KEY = "dxSlideoutItemData";
        var SlideOut = CollectionWidget.inherit({
            _getDefaultOptions: function() {
                return extend(this.callBase(), {
                    activeStateEnabled: false,
                    menuItemTemplate: "menuItem",
                    swipeEnabled: true,
                    menuVisible: false,
                    menuPosition: "normal",
                    menuGrouped: false,
                    menuGroupTemplate: "menuGroup",
                    onMenuItemRendered: null,
                    onMenuGroupRendered: null,
                    contentTemplate: "content",
                    selectionMode: "single",
                    selectedIndex: 0,
                    selectionRequired: true
                })
            },
            _itemClass: function() {
                return SLIDEOUT_ITEM_CLASS
            },
            _itemDataKey: function() {
                return SLIDEOUT_ITEM_DATA_KEY
            },
            _itemContainer: function() {
                return $(this._slideOutView.content())
            },
            _init: function() {
                this._selectedItemContentRendered = false;
                this.callBase();
                this.$element().addClass(SLIDEOUT_CLASS);
                this._initSlideOutView()
            },
            _initTemplates: function() {
                this.callBase();
                this._defaultTemplates.menuItem = new ChildDefaultTemplate("item", this);
                this._defaultTemplates.menuGroup = new ChildDefaultTemplate("group", this);
                this._defaultTemplates.content = new EmptyTemplate(this)
            },
            _initEditStrategy: function() {
                if (this.option("menuGrouped")) {
                    var strategy = PlainEditStrategy.inherit({
                        _getPlainItems: function() {
                            return this.callBase().reduce(function(result, group) {
                                result.push.apply(result, group.items);
                                return result
                            }, [])
                        }
                    });
                    this._editStrategy = new strategy(this)
                } else {
                    this.callBase()
                }
            },
            _initSlideOutView: function() {
                this._slideOutView = this._createComponent(this.$element(), SlideOutView, {
                    integrationOptions: {},
                    menuVisible: this.option("menuVisible"),
                    swipeEnabled: this.option("swipeEnabled"),
                    menuPosition: this.option("menuPosition"),
                    onOptionChanged: this._slideOutViewOptionChanged.bind(this)
                });
                this._itemContainer().addClass(SLIDEOUT_ITEM_CONTAINER_CLASS)
            },
            _slideOutViewOptionChanged: function(args) {
                if ("menuVisible" === args.name) {
                    this.option(args.name, args.value)
                }
            },
            _initMarkup: function() {
                this._renderList();
                this._renderContentTemplate();
                this.callBase()
            },
            _render: function() {
                this._slideOutView._renderShield();
                this.callBase()
            },
            _renderList: function() {
                var $list = this._list && this._list.$element() || $("<div>").addClass(SLIDEOUT_MENU).appendTo($(this._slideOutView.menuContent()));
                this._renderItemClickAction();
                this._list = this._createComponent($list, List, {
                    itemTemplateProperty: "menuTemplate",
                    selectionMode: this.option("selectionMode"),
                    selectedIndex: this.option("selectedIndex"),
                    selectionRequired: this.option("selectionRequired"),
                    indicateLoading: false,
                    onItemClick: this._listItemClickHandler.bind(this),
                    items: this.option("items"),
                    dataSource: this.option("dataSource"),
                    itemTemplate: this._getTemplateByOption("menuItemTemplate"),
                    grouped: this.option("menuGrouped"),
                    groupTemplate: this._getTemplateByOption("menuGroupTemplate"),
                    onItemRendered: this.option("onMenuItemRendered"),
                    onGroupRendered: this.option("onMenuGroupRendered"),
                    onContentReady: this._updateSlideOutView.bind(this)
                })
            },
            _updateSlideOutView: function() {
                this._slideOutView._dimensionChanged()
            },
            _renderItemClickAction: function() {
                this._itemClickAction = this._createActionByOption("onItemClick")
            },
            _listItemClickHandler: function(e) {
                var selectedIndex = this._list.$element().find(".dx-list-item").index(e.itemElement);
                this.option("selectedIndex", selectedIndex);
                this._itemClickAction(e)
            },
            _renderContentTemplate: function() {
                if (isDefined(this._singleContent)) {
                    return
                }
                var itemsLength = this._itemContainer().html().length;
                this._getTemplateByOption("contentTemplate").render({
                    container: getPublicElement(this._itemContainer())
                });
                this._singleContent = this._itemContainer().html().length !== itemsLength
            },
            _itemClickHandler: noop,
            _renderContentImpl: function() {
                if (this._singleContent) {
                    return
                }
                var items = this.option("items"),
                    selectedIndex = this.option("selectedIndex");
                if (items.length && selectedIndex > -1) {
                    this._selectedItemContentRendered = true;
                    var selectedItem = this._list.getItemByIndex(selectedIndex);
                    this._renderItems([selectedItem])
                }
            },
            _renderItem: function(index, item) {
                this._itemContainer().find("." + SLIDEOUT_ITEM_CLASS).remove();
                this.callBase(index, item)
            },
            _selectedItemElement: function() {
                return this._itemElements().eq(0)
            },
            _renderSelection: function() {
                this._prepareContent();
                this._renderContent()
            },
            _getListWidth: function() {
                return this._slideOutView._getMenuWidth()
            },
            _changeMenuOption: function(name, value) {
                this._list.option(name, value);
                this._updateSlideOutView()
            },
            _cleanItemContainer: function() {
                if (this._singleContent) {
                    return
                }
                this.callBase()
            },
            beginUpdate: function() {
                this.callBase();
                this._list && this._list.beginUpdate()
            },
            endUpdate: function() {
                this._list && this._list.endUpdate();
                this.callBase()
            },
            _optionChanged: function(args) {
                var name = args.name;
                var value = args.value;
                switch (name) {
                    case "menuVisible":
                    case "swipeEnabled":
                    case "rtlEnabled":
                    case "menuPosition":
                        this._slideOutView.option(name, value);
                        break;
                    case "width":
                        this.callBase(args);
                        this._updateSlideOutView();
                        break;
                    case "menuItemTemplate":
                        this._changeMenuOption("itemTemplate", this._getTemplate(value));
                        break;
                    case "items":
                        this._changeMenuOption("items", this.option("items"));
                        if (!this._selectedItemContentRendered) {
                            this._renderSelection()
                        }
                        break;
                    case "dataSource":
                    case "selectedIndex":
                    case "selectedItem":
                        this._changeMenuOption(name, value);
                        this.callBase(args);
                        break;
                    case "menuGrouped":
                        this._initEditStrategy();
                        this._changeMenuOption("grouped", value);
                        break;
                    case "menuGroupTemplate":
                        this._changeMenuOption("groupTemplate", this._getTemplate(value));
                        break;
                    case "onMenuItemRendered":
                        this._changeMenuOption("onItemRendered", value);
                        break;
                    case "onMenuGroupRendered":
                        this._changeMenuOption("onGroupRendered", value);
                        break;
                    case "onItemClick":
                        this._renderItemClickAction();
                        break;
                    case "contentTemplate":
                        this._singleContent = null;
                        this._invalidate();
                        break;
                    default:
                        this.callBase(args)
                }
            },
            showMenu: function() {
                return this._slideOutView.toggleMenuVisibility(true)
            },
            hideMenu: function() {
                return this._slideOutView.toggleMenuVisibility(false)
            },
            toggleMenuVisibility: function(showing) {
                return this._slideOutView.toggleMenuVisibility(showing)
            }
        });
        registerComponent("dxSlideOut", SlideOut);
        module.exports = SlideOut
    }, , , ,
    /*!**********************************************************************!*\
      !*** ./artifacts/transpiled/bundles/modules/parts/widgets-mobile.js ***!
      \**********************************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        var ui = __webpack_require__( /*! ./widgets-base */ 567);
        ui.dxPanorama = __webpack_require__( /*! ../../../ui/panorama */ 802);
        ui.dxPivot = __webpack_require__( /*! ../../../ui/pivot */ 804);
        ui.dxSlideOut = __webpack_require__( /*! ../../../ui/slide_out */ 806);
        ui.dxSlideOutView = __webpack_require__( /*! ../../../ui/slide_out_view */ 568)
    }, , , ,
    /*!*********************************************************!*\
      !*** multi ./artifacts/transpiled/bundles/dx.mobile.js ***!
      \*********************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        module.exports = __webpack_require__( /*! c:\Projects\DevExtreme\18.2\BuildLabel\Temp\DevExtreme.v18.2\repo\GitHub\artifacts\transpiled\bundles\dx.mobile.js */ 815)
    },
    /*!***************************************************!*\
      !*** ./artifacts/transpiled/bundles/dx.mobile.js ***!
      \***************************************************/
    /*! dynamic exports provided */
    /*! all exports used */
    function(module, exports, __webpack_require__) {
        __webpack_require__( /*! ./modules/parts/widgets-mobile */ 810)
    }
]);
