{"version":3,"sources":["kendo.fx.js"],"names":["f","define","$","undefined","parseInteger","value","parseInt","parseCSS","element","property","css","keys","obj","propertyName","acc","push","strip3DTransforms","properties","key","transformProps","indexOf","transform2d","normalizeCSS","lowerKey","isTransformed","transformation","cssValues","toLowerCase","transforms","support","hasHW3D","length","TRANSFORM","join","animationProperty","transform","match","computed","NONE","RegExp","matrix3dRegExp","translateXRegExp","test","parseFloat","Math","atan2","capitalize","word","charAt","toUpperCase","substring","createEffect","name","definition","effectClass","Effect","extend","directions","prototype","fx","Element","direction","opt1","opt2","opt3","this","each","idx","theDirection","createToggleEffect","defaultStart","defaultEnd","IN_OUT","startValue","_startValue","endValue","_endValue","shouldHide","_shouldHide","prepare","start","end","that","out","_direction","startDataValue","data","startDataValueIsSet","isNaN","_reverse","clipInHalf","container","vertical","kendo","size","HEIGHT","WIDTH","CLIPS","replace","curProxy","EffectSet","FOUR_DIRECTIONS","TRANSFER_START_STATE","ROTATIONS","RESTORE_OVERFLOW","IGNORE_TRANSITION_EVENT_SELECTOR","Animation","Transition","window","effects","proxy","browser","transitions","scaleProperties","scale","scalex","scaley","scale3d","translateProperties","translate","translatex","translatey","translate3d","hasZoom","document","documentElement","style","zoom","cssParamsRegExp","oldEffectsRegExp","singleEffectRegExp","unitRegExp","transform2units","rotate","skew","cssPrefix","round","BLANK","PX","AUTO","HIDDEN","ORIGIN","ABORT_ID","OVERFLOW","TRANSLATE","POSITION","COMPLETE_CALLBACK","TRANSITION","BACKFACE","PERSPECTIVE","DEFAULT_PERSPECTIVE","TRANSFORM_PERSPECTIVE","left","reverse","transition","modifier","right","down","up","top","bottom","in","horizontal","fn","kendoStop","clearQueue","gotoEnd","stopQueue","stop","val","transformValue","cssText","step","elem","now","cur","prop","apply","arguments","toggleClass","classes","options","add","split","exclusive","duration","ease","setTimeout","parseEffects","input","mirror","redirectedEffect","resolved","$1","$2","effect","effectBody","timeoutID","stopTransitionCalled","stopTransition","delay","oldKeys","complete","clearTimeout","removeData","dequeue","call","speeds","merge","hasOwnProperty","uniqueSort","height","unique","event","one","taskKeys","retainPosition","completeCallback","getComputedStyles","Class","init","restore","run","jdx","target","children","childrenLength","effectName","deferred","Deferred","done","setReverse","setOptions","addRestoreProperties","is","display","reset","setup","animate","resolve","promise","i","restoreCallback","hide","teardown","effectSet","parsedEffects","elements","useTransition","queue","show","multiple","params","single","position","isFixed","originalPosition","dX","dY","currentValue","marginLeft","marginTop","msie","animatedPromise","_additionalEffects","play","additional","_duration","compositeRun","concat","_complete","noop","divisor","tmp","outerWidth","_outerWidth","outerHeight","_outerHeight","offset","previous","previousDivisor","dir","slideIn","margin","origin","axis","setLength","oldLength","realLength","overflow","appendTo","body","outerBox","box","innerBox","currentScale","fillScale","transformOrigin","x","y","_container","rotation","zIndex","_clipInHalf","clip","append","face","_face","temporary","addClass","opacity","back","temp","reverseDirection","faceClone","clone","removeAttr","backClone","staticPage","turningPage","transformStyle","find","remove","mobileOS","android","_before","_after","transitionClass","_previous","_transitionClass","Error","beforeTransition","callback","afterTransition","_both","_element","_containerClass","containerClass","e","removeClass","off","completeProxy","isAbsolute","originalOverflow","parents","filter","first","both","parent","on","animationFrame","_tickProxy","_tick","_started","tick","onEnd","onCancel","enabled","cancel","timePassed","min","Date","startDate","moveTo","movable","initial","delta","location","_easeProxy","moveAxis","easeOutExpo","t","b","c","d","pow","easeOutBack","s","result","width","inner","outer","fitScale","max","jQuery","amd","a1","a2","a3"],"mappings":"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","file":"kendo.fx.min.js","sourcesContent":["/*!\n * Copyright 2020 Progress Software Corporation and/or one of its subsidiaries or affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n(function (f, define) {\n    define('kendo.fx', ['kendo.core'], f);\n}(function () {\n    var __meta__ = {\n        id: 'fx',\n        name: 'Effects',\n        category: 'framework',\n        description: 'Required for animation effects in all Kendo UI widgets.',\n        depends: ['core']\n    };\n    (function ($, undefined) {\n        var kendo = window.kendo, fx = kendo.effects, each = $.each, extend = $.extend, proxy = $.proxy, support = kendo.support, browser = support.browser, transforms = support.transforms, transitions = support.transitions, scaleProperties = {\n                scale: 0,\n                scalex: 0,\n                scaley: 0,\n                scale3d: 0\n            }, translateProperties = {\n                translate: 0,\n                translatex: 0,\n                translatey: 0,\n                translate3d: 0\n            }, hasZoom = typeof document.documentElement.style.zoom !== 'undefined' && !transforms, matrix3dRegExp = /matrix3?d?\\s*\\(.*,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?/i, cssParamsRegExp = /^(-?[\\d\\.\\-]+)?[\\w\\s]*,?\\s*(-?[\\d\\.\\-]+)?[\\w\\s]*/i, translateXRegExp = /translatex?$/i, oldEffectsRegExp = /(zoom|fade|expand)(\\w+)/, singleEffectRegExp = /(zoom|fade|expand)/, unitRegExp = /[xy]$/i, transformProps = [\n                'perspective',\n                'rotate',\n                'rotatex',\n                'rotatey',\n                'rotatez',\n                'rotate3d',\n                'scale',\n                'scalex',\n                'scaley',\n                'scalez',\n                'scale3d',\n                'skew',\n                'skewx',\n                'skewy',\n                'translate',\n                'translatex',\n                'translatey',\n                'translatez',\n                'translate3d',\n                'matrix',\n                'matrix3d'\n            ], transform2d = [\n                'rotate',\n                'scale',\n                'scalex',\n                'scaley',\n                'skew',\n                'skewx',\n                'skewy',\n                'translate',\n                'translatex',\n                'translatey',\n                'matrix'\n            ], transform2units = {\n                'rotate': 'deg',\n                scale: '',\n                skew: 'px',\n                translate: 'px'\n            }, cssPrefix = transforms.css, round = Math.round, BLANK = '', PX = 'px', NONE = 'none', AUTO = 'auto', WIDTH = 'width', HEIGHT = 'height', HIDDEN = 'hidden', ORIGIN = 'origin', ABORT_ID = 'abortId', OVERFLOW = 'overflow', TRANSLATE = 'translate', POSITION = 'position', COMPLETE_CALLBACK = 'completeCallback', TRANSITION = cssPrefix + 'transition', TRANSFORM = cssPrefix + 'transform', BACKFACE = cssPrefix + 'backface-visibility', PERSPECTIVE = cssPrefix + 'perspective', DEFAULT_PERSPECTIVE = '1500px', TRANSFORM_PERSPECTIVE = 'perspective(' + DEFAULT_PERSPECTIVE + ')', directions = {\n                left: {\n                    reverse: 'right',\n                    property: 'left',\n                    transition: 'translatex',\n                    vertical: false,\n                    modifier: -1\n                },\n                right: {\n                    reverse: 'left',\n                    property: 'left',\n                    transition: 'translatex',\n                    vertical: false,\n                    modifier: 1\n                },\n                down: {\n                    reverse: 'up',\n                    property: 'top',\n                    transition: 'translatey',\n                    vertical: true,\n                    modifier: 1\n                },\n                up: {\n                    reverse: 'down',\n                    property: 'top',\n                    transition: 'translatey',\n                    vertical: true,\n                    modifier: -1\n                },\n                top: { reverse: 'bottom' },\n                bottom: { reverse: 'top' },\n                'in': {\n                    reverse: 'out',\n                    modifier: -1\n                },\n                out: {\n                    reverse: 'in',\n                    modifier: 1\n                },\n                vertical: { reverse: 'vertical' },\n                horizontal: { reverse: 'horizontal' }\n            };\n        kendo.directions = directions;\n        extend($.fn, {\n            kendoStop: function (clearQueue, gotoEnd) {\n                if (transitions) {\n                    return fx.stopQueue(this, clearQueue || false, gotoEnd || false);\n                } else {\n                    return this.stop(clearQueue, gotoEnd);\n                }\n            }\n        });\n        if (transforms && !transitions) {\n            each(transform2d, function (idx, value) {\n                $.fn[value] = function (val) {\n                    if (typeof val == 'undefined') {\n                        return animationProperty(this, value);\n                    } else {\n                        var that = $(this)[0], transformValue = value + '(' + val + transform2units[value.replace(unitRegExp, '')] + ')';\n                        if (that.style.cssText.indexOf(TRANSFORM) == -1) {\n                            $(this).css(TRANSFORM, transformValue);\n                        } else {\n                            that.style.cssText = that.style.cssText.replace(new RegExp(value + '\\\\(.*?\\\\)', 'i'), transformValue);\n                        }\n                    }\n                    return this;\n                };\n                $.fx.step[value] = function (fx) {\n                    $(fx.elem)[value](fx.now);\n                };\n            });\n            var curProxy = $.fx.prototype.cur;\n            $.fx.prototype.cur = function () {\n                if (transform2d.indexOf(this.prop) != -1) {\n                    return parseFloat($(this.elem)[this.prop]());\n                }\n                return curProxy.apply(this, arguments);\n            };\n        }\n        kendo.toggleClass = function (element, classes, options, add) {\n            if (classes) {\n                classes = classes.split(' ');\n                if (transitions) {\n                    options = extend({\n                        exclusive: 'all',\n                        duration: 400,\n                        ease: 'ease-out'\n                    }, options);\n                    element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease);\n                    setTimeout(function () {\n                        element.css(TRANSITION, '').css(HEIGHT);\n                    }, options.duration);\n                }\n                each(classes, function (idx, value) {\n                    element.toggleClass(value, add);\n                });\n            }\n            return element;\n        };\n        kendo.parseEffects = function (input, mirror) {\n            var effects = {};\n            if (typeof input === 'string') {\n                each(input.split(' '), function (idx, value) {\n                    var redirectedEffect = !singleEffectRegExp.test(value), resolved = value.replace(oldEffectsRegExp, function (match, $1, $2) {\n                            return $1 + ':' + $2.toLowerCase();\n                        }), effect = resolved.split(':'), direction = effect[1], effectBody = {};\n                    if (effect.length > 1) {\n                        effectBody.direction = mirror && redirectedEffect ? directions[direction].reverse : direction;\n                    }\n                    effects[effect[0]] = effectBody;\n                });\n            } else {\n                each(input, function (idx) {\n                    var direction = this.direction;\n                    if (direction && mirror && !singleEffectRegExp.test(idx)) {\n                        this.direction = directions[direction].reverse;\n                    }\n                    effects[idx] = this;\n                });\n            }\n            return effects;\n        };\n        function parseInteger(value) {\n            return parseInt(value, 10);\n        }\n        function parseCSS(element, property) {\n            return parseInteger(element.css(property));\n        }\n        function keys(obj) {\n            var acc = [];\n            for (var propertyName in obj) {\n                acc.push(propertyName);\n            }\n            return acc;\n        }\n        function strip3DTransforms(properties) {\n            for (var key in properties) {\n                if (transformProps.indexOf(key) != -1 && transform2d.indexOf(key) == -1) {\n                    delete properties[key];\n                }\n            }\n            return properties;\n        }\n        function normalizeCSS(element, properties) {\n            var transformation = [], cssValues = {}, lowerKey, key, value, isTransformed;\n            for (key in properties) {\n                lowerKey = key.toLowerCase();\n                isTransformed = transforms && transformProps.indexOf(lowerKey) != -1;\n                if (!support.hasHW3D && isTransformed && transform2d.indexOf(lowerKey) == -1) {\n                    delete properties[key];\n                } else {\n                    value = properties[key];\n                    if (isTransformed) {\n                        transformation.push(key + '(' + value + ')');\n                    } else {\n                        cssValues[key] = value;\n                    }\n                }\n            }\n            if (transformation.length) {\n                cssValues[TRANSFORM] = transformation.join(' ');\n            }\n            return cssValues;\n        }\n        if (transitions) {\n            extend(fx, {\n                transition: function (element, properties, options) {\n                    var css, delay = 0, oldKeys = element.data('keys') || [], timeoutID;\n                    options = extend({\n                        duration: 200,\n                        ease: 'ease-out',\n                        complete: null,\n                        exclusive: 'all'\n                    }, options);\n                    var stopTransitionCalled = false;\n                    var stopTransition = function () {\n                        if (!stopTransitionCalled) {\n                            stopTransitionCalled = true;\n                            if (timeoutID) {\n                                clearTimeout(timeoutID);\n                                timeoutID = null;\n                            }\n                            element.removeData(ABORT_ID).dequeue().css(TRANSITION, '').css(TRANSITION);\n                            options.complete.call(element);\n                        }\n                    };\n                    options.duration = $.fx ? $.fx.speeds[options.duration] || options.duration : options.duration;\n                    css = normalizeCSS(element, properties);\n                    $.merge(oldKeys, keys(css));\n                    if ($.hasOwnProperty('uniqueSort')) {\n                        element.data('keys', $.uniqueSort(oldKeys)).height();\n                    } else {\n                        element.data('keys', $.unique(oldKeys)).height();\n                    }\n                    element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease).css(TRANSITION);\n                    element.css(css).css(TRANSFORM);\n                    if (transitions.event) {\n                        element.one(transitions.event, stopTransition);\n                        if (options.duration !== 0) {\n                            delay = 500;\n                        }\n                    }\n                    timeoutID = setTimeout(stopTransition, options.duration + delay);\n                    element.data(ABORT_ID, timeoutID);\n                    element.data(COMPLETE_CALLBACK, stopTransition);\n                },\n                stopQueue: function (element, clearQueue, gotoEnd) {\n                    var cssValues, taskKeys = element.data('keys'), retainPosition = !gotoEnd && taskKeys, completeCallback = element.data(COMPLETE_CALLBACK);\n                    if (retainPosition) {\n                        cssValues = kendo.getComputedStyles(element[0], taskKeys);\n                    }\n                    if (completeCallback) {\n                        completeCallback();\n                    }\n                    if (retainPosition) {\n                        element.css(cssValues);\n                    }\n                    return element.removeData('keys').stop(clearQueue);\n                }\n            });\n        }\n        function animationProperty(element, property) {\n            if (transforms) {\n                var transform = element.css(TRANSFORM);\n                if (transform == NONE) {\n                    return property == 'scale' ? 1 : 0;\n                }\n                var match = transform.match(new RegExp(property + '\\\\s*\\\\(([\\\\d\\\\w\\\\.]+)')), computed = 0;\n                if (match) {\n                    computed = parseInteger(match[1]);\n                } else {\n                    match = transform.match(matrix3dRegExp) || [\n                        0,\n                        0,\n                        0,\n                        0,\n                        0\n                    ];\n                    property = property.toLowerCase();\n                    if (translateXRegExp.test(property)) {\n                        computed = parseFloat(match[3] / match[2]);\n                    } else if (property == 'translatey') {\n                        computed = parseFloat(match[4] / match[2]);\n                    } else if (property == 'scale') {\n                        computed = parseFloat(match[2]);\n                    } else if (property == 'rotate') {\n                        computed = parseFloat(Math.atan2(match[2], match[1]));\n                    }\n                }\n                return computed;\n            } else {\n                return parseFloat(element.css(property));\n            }\n        }\n        var EffectSet = kendo.Class.extend({\n            init: function (element, options) {\n                var that = this;\n                that.element = element;\n                that.effects = [];\n                that.options = options;\n                that.restore = [];\n            },\n            run: function (effects) {\n                var that = this, effect, idx, jdx, length = effects.length, element = that.element, options = that.options, deferred = $.Deferred(), start = {}, end = {}, target, children, childrenLength;\n                that.effects = effects;\n                deferred.done($.proxy(that, 'complete'));\n                element.data('animating', true);\n                for (idx = 0; idx < length; idx++) {\n                    effect = effects[idx];\n                    effect.setReverse(options.reverse);\n                    effect.setOptions(options);\n                    that.addRestoreProperties(effect.restore);\n                    effect.prepare(start, end);\n                    children = effect.children();\n                    for (jdx = 0, childrenLength = children.length; jdx < childrenLength; jdx++) {\n                        children[jdx].duration(options.duration).run();\n                    }\n                }\n                for (var effectName in options.effects) {\n                    extend(end, options.effects[effectName].properties);\n                }\n                if (!element.is(':visible')) {\n                    extend(start, { display: element.data('olddisplay') || 'block' });\n                }\n                if (transforms && !options.reset) {\n                    target = element.data('targetTransform');\n                    if (target) {\n                        start = extend(target, start);\n                    }\n                }\n                start = normalizeCSS(element, start);\n                if (transforms && !transitions) {\n                    start = strip3DTransforms(start);\n                }\n                element.css(start).css(TRANSFORM);\n                for (idx = 0; idx < length; idx++) {\n                    effects[idx].setup();\n                }\n                if (options.init) {\n                    options.init();\n                }\n                element.data('targetTransform', end);\n                fx.animate(element, end, extend({}, options, { complete: deferred.resolve }));\n                return deferred.promise();\n            },\n            stop: function () {\n                $(this.element).kendoStop(true, true);\n            },\n            addRestoreProperties: function (restore) {\n                var element = this.element, value, i = 0, length = restore.length;\n                for (; i < length; i++) {\n                    value = restore[i];\n                    this.restore.push(value);\n                    if (!element.data(value)) {\n                        element.data(value, element.css(value));\n                    }\n                }\n            },\n            restoreCallback: function () {\n                var element = this.element;\n                for (var i = 0, length = this.restore.length; i < length; i++) {\n                    var value = this.restore[i];\n                    element.css(value, element.data(value));\n                }\n            },\n            complete: function () {\n                var that = this, idx = 0, element = that.element, options = that.options, effects = that.effects, length = effects.length;\n                element.removeData('animating').dequeue();\n                if (options.hide) {\n                    element.data('olddisplay', element.css('display')).hide();\n                }\n                this.restoreCallback();\n                if (hasZoom && !transforms) {\n                    setTimeout($.proxy(this, 'restoreCallback'), 0);\n                }\n                for (; idx < length; idx++) {\n                    effects[idx].teardown();\n                }\n                if (options.completeCallback) {\n                    options.completeCallback(element);\n                }\n            }\n        });\n        fx.promise = function (element, options) {\n            var effects = [], effectClass, effectSet = new EffectSet(element, options), parsedEffects = kendo.parseEffects(options.effects), effect;\n            options.effects = parsedEffects;\n            for (var effectName in parsedEffects) {\n                effectClass = fx[capitalize(effectName)];\n                if (effectClass) {\n                    effect = new effectClass(element, parsedEffects[effectName].direction);\n                    effects.push(effect);\n                }\n            }\n            if (effects[0]) {\n                effectSet.run(effects);\n            } else {\n                if (!element.is(':visible')) {\n                    element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n                }\n                if (options.init) {\n                    options.init();\n                }\n                element.dequeue();\n                effectSet.complete();\n            }\n        };\n        extend(fx, {\n            animate: function (elements, properties, options) {\n                var useTransition = options.transition !== false;\n                delete options.transition;\n                if (transitions && 'transition' in fx && useTransition) {\n                    fx.transition(elements, properties, options);\n                } else {\n                    if (transforms) {\n                        elements.animate(strip3DTransforms(properties), {\n                            queue: false,\n                            show: false,\n                            hide: false,\n                            duration: options.duration,\n                            complete: options.complete\n                        });\n                    } else {\n                        elements.each(function () {\n                            var element = $(this), multiple = {};\n                            each(transformProps, function (idx, value) {\n                                var params, currentValue = properties ? properties[value] + ' ' : null;\n                                if (currentValue) {\n                                    var single = properties;\n                                    if (value in scaleProperties && properties[value] !== undefined) {\n                                        params = currentValue.match(cssParamsRegExp);\n                                        if (transforms) {\n                                            extend(single, { scale: +params[0] });\n                                        }\n                                    } else {\n                                        if (value in translateProperties && properties[value] !== undefined) {\n                                            var position = element.css(POSITION), isFixed = position == 'absolute' || position == 'fixed';\n                                            if (!element.data(TRANSLATE)) {\n                                                if (isFixed) {\n                                                    element.data(TRANSLATE, {\n                                                        top: parseCSS(element, 'top') || 0,\n                                                        left: parseCSS(element, 'left') || 0,\n                                                        bottom: parseCSS(element, 'bottom'),\n                                                        right: parseCSS(element, 'right')\n                                                    });\n                                                } else {\n                                                    element.data(TRANSLATE, {\n                                                        top: parseCSS(element, 'marginTop') || 0,\n                                                        left: parseCSS(element, 'marginLeft') || 0\n                                                    });\n                                                }\n                                            }\n                                            var originalPosition = element.data(TRANSLATE);\n                                            params = currentValue.match(cssParamsRegExp);\n                                            if (params) {\n                                                var dX = value == TRANSLATE + 'y' ? +null : +params[1], dY = value == TRANSLATE + 'y' ? +params[1] : +params[2];\n                                                if (isFixed) {\n                                                    if (!isNaN(originalPosition.right)) {\n                                                        if (!isNaN(dX)) {\n                                                            extend(single, { right: originalPosition.right - dX });\n                                                        }\n                                                    } else {\n                                                        if (!isNaN(dX)) {\n                                                            extend(single, { left: originalPosition.left + dX });\n                                                        }\n                                                    }\n                                                    if (!isNaN(originalPosition.bottom)) {\n                                                        if (!isNaN(dY)) {\n                                                            extend(single, { bottom: originalPosition.bottom - dY });\n                                                        }\n                                                    } else {\n                                                        if (!isNaN(dY)) {\n                                                            extend(single, { top: originalPosition.top + dY });\n                                                        }\n                                                    }\n                                                } else {\n                                                    if (!isNaN(dX)) {\n                                                        extend(single, { marginLeft: originalPosition.left + dX });\n                                                    }\n                                                    if (!isNaN(dY)) {\n                                                        extend(single, { marginTop: originalPosition.top + dY });\n                                                    }\n                                                }\n                                            }\n                                        }\n                                    }\n                                    if (!transforms && value != 'scale' && value in single) {\n                                        delete single[value];\n                                    }\n                                    if (single) {\n                                        extend(multiple, single);\n                                    }\n                                }\n                            });\n                            if (browser.msie) {\n                                delete multiple.scale;\n                            }\n                            element.animate(multiple, {\n                                queue: false,\n                                show: false,\n                                hide: false,\n                                duration: options.duration,\n                                complete: options.complete\n                            });\n                        });\n                    }\n                }\n            }\n        });\n        fx.animatedPromise = fx.promise;\n        var Effect = kendo.Class.extend({\n            init: function (element, direction) {\n                var that = this;\n                that.element = element;\n                that._direction = direction;\n                that.options = {};\n                that._additionalEffects = [];\n                if (!that.restore) {\n                    that.restore = [];\n                }\n            },\n            reverse: function () {\n                this._reverse = true;\n                return this.run();\n            },\n            play: function () {\n                this._reverse = false;\n                return this.run();\n            },\n            add: function (additional) {\n                this._additionalEffects.push(additional);\n                return this;\n            },\n            direction: function (value) {\n                this._direction = value;\n                return this;\n            },\n            duration: function (duration) {\n                this._duration = duration;\n                return this;\n            },\n            compositeRun: function () {\n                var that = this, effectSet = new EffectSet(that.element, {\n                        reverse: that._reverse,\n                        duration: that._duration\n                    }), effects = that._additionalEffects.concat([that]);\n                return effectSet.run(effects);\n            },\n            run: function () {\n                if (this._additionalEffects && this._additionalEffects[0]) {\n                    return this.compositeRun();\n                }\n                var that = this, element = that.element, idx = 0, restore = that.restore, length = restore.length, value, deferred = $.Deferred(), start = {}, end = {}, target, children = that.children(), childrenLength = children.length;\n                deferred.done($.proxy(that, '_complete'));\n                element.data('animating', true);\n                for (idx = 0; idx < length; idx++) {\n                    value = restore[idx];\n                    if (!element.data(value)) {\n                        element.data(value, element.css(value));\n                    }\n                }\n                for (idx = 0; idx < childrenLength; idx++) {\n                    children[idx].duration(that._duration).run();\n                }\n                that.prepare(start, end);\n                if (!element.is(':visible')) {\n                    extend(start, { display: element.data('olddisplay') || 'block' });\n                }\n                if (transforms) {\n                    target = element.data('targetTransform');\n                    if (target) {\n                        start = extend(target, start);\n                    }\n                }\n                start = normalizeCSS(element, start);\n                if (transforms && !transitions) {\n                    start = strip3DTransforms(start);\n                }\n                element.css(start).css(TRANSFORM);\n                that.setup();\n                element.data('targetTransform', end);\n                fx.animate(element, end, {\n                    duration: that._duration,\n                    complete: deferred.resolve\n                });\n                return deferred.promise();\n            },\n            stop: function () {\n                var idx = 0, children = this.children(), childrenLength = children.length;\n                for (idx = 0; idx < childrenLength; idx++) {\n                    children[idx].stop();\n                }\n                $(this.element).kendoStop(true, true);\n                return this;\n            },\n            restoreCallback: function () {\n                var element = this.element;\n                for (var i = 0, length = this.restore.length; i < length; i++) {\n                    var value = this.restore[i];\n                    element.css(value, element.data(value));\n                }\n            },\n            _complete: function () {\n                var that = this, element = that.element;\n                element.removeData('animating').dequeue();\n                that.restoreCallback();\n                if (that.shouldHide()) {\n                    element.data('olddisplay', element.css('display')).hide();\n                }\n                if (hasZoom && !transforms) {\n                    setTimeout($.proxy(that, 'restoreCallback'), 0);\n                }\n                that.teardown();\n            },\n            setOptions: function (options) {\n                extend(true, this.options, options);\n            },\n            children: function () {\n                return [];\n            },\n            shouldHide: $.noop,\n            setup: $.noop,\n            prepare: $.noop,\n            teardown: $.noop,\n            directions: [],\n            setReverse: function (reverse) {\n                this._reverse = reverse;\n                return this;\n            }\n        });\n        function capitalize(word) {\n            return word.charAt(0).toUpperCase() + word.substring(1);\n        }\n        function createEffect(name, definition) {\n            var effectClass = Effect.extend(definition), directions = effectClass.prototype.directions;\n            fx[capitalize(name)] = effectClass;\n            fx.Element.prototype[name] = function (direction, opt1, opt2, opt3) {\n                return new effectClass(this.element, direction, opt1, opt2, opt3);\n            };\n            each(directions, function (idx, theDirection) {\n                fx.Element.prototype[name + capitalize(theDirection)] = function (opt1, opt2, opt3) {\n                    return new effectClass(this.element, theDirection, opt1, opt2, opt3);\n                };\n            });\n        }\n        var FOUR_DIRECTIONS = [\n                'left',\n                'right',\n                'up',\n                'down'\n            ], IN_OUT = [\n                'in',\n                'out'\n            ];\n        createEffect('slideIn', {\n            directions: FOUR_DIRECTIONS,\n            divisor: function (value) {\n                this.options.divisor = value;\n                return this;\n            },\n            prepare: function (start, end) {\n                var that = this, tmp, element = that.element, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, direction = directions[that._direction], offset = -direction.modifier * (direction.vertical ? outerHeight(element) : outerWidth(element)), startValue = offset / (that.options && that.options.divisor || 1) + PX, endValue = '0px';\n                if (that._reverse) {\n                    tmp = start;\n                    start = end;\n                    end = tmp;\n                }\n                if (transforms) {\n                    start[direction.transition] = startValue;\n                    end[direction.transition] = endValue;\n                } else {\n                    start[direction.property] = startValue;\n                    end[direction.property] = endValue;\n                }\n            }\n        });\n        createEffect('tile', {\n            directions: FOUR_DIRECTIONS,\n            init: function (element, direction, previous) {\n                Effect.prototype.init.call(this, element, direction);\n                this.options = { previous: previous };\n            },\n            previousDivisor: function (value) {\n                this.options.previousDivisor = value;\n                return this;\n            },\n            children: function () {\n                var that = this, reverse = that._reverse, previous = that.options.previous, divisor = that.options.previousDivisor || 1, dir = that._direction;\n                var children = [kendo.fx(that.element).slideIn(dir).setReverse(reverse)];\n                if (previous) {\n                    children.push(kendo.fx(previous).slideIn(directions[dir].reverse).divisor(divisor).setReverse(!reverse));\n                }\n                return children;\n            }\n        });\n        function createToggleEffect(name, property, defaultStart, defaultEnd) {\n            createEffect(name, {\n                directions: IN_OUT,\n                startValue: function (value) {\n                    this._startValue = value;\n                    return this;\n                },\n                endValue: function (value) {\n                    this._endValue = value;\n                    return this;\n                },\n                shouldHide: function () {\n                    return this._shouldHide;\n                },\n                prepare: function (start, end) {\n                    var that = this, startValue, endValue, out = this._direction === 'out', startDataValue = that.element.data(property), startDataValueIsSet = !(isNaN(startDataValue) || startDataValue == defaultStart);\n                    if (startDataValueIsSet) {\n                        startValue = startDataValue;\n                    } else if (typeof this._startValue !== 'undefined') {\n                        startValue = this._startValue;\n                    } else {\n                        startValue = out ? defaultStart : defaultEnd;\n                    }\n                    if (typeof this._endValue !== 'undefined') {\n                        endValue = this._endValue;\n                    } else {\n                        endValue = out ? defaultEnd : defaultStart;\n                    }\n                    if (this._reverse) {\n                        start[property] = endValue;\n                        end[property] = startValue;\n                    } else {\n                        start[property] = startValue;\n                        end[property] = endValue;\n                    }\n                    that._shouldHide = end[property] === defaultEnd;\n                }\n            });\n        }\n        createToggleEffect('fade', 'opacity', 1, 0);\n        createToggleEffect('zoom', 'scale', 1, 0.01);\n        createEffect('slideMargin', {\n            prepare: function (start, end) {\n                var that = this, element = that.element, options = that.options, origin = element.data(ORIGIN), offset = options.offset, margin, reverse = that._reverse;\n                if (!reverse && origin === null) {\n                    element.data(ORIGIN, parseFloat(element.css('margin-' + options.axis)));\n                }\n                margin = element.data(ORIGIN) || 0;\n                end['margin-' + options.axis] = !reverse ? margin + offset : margin;\n            }\n        });\n        createEffect('slideTo', {\n            prepare: function (start, end) {\n                var that = this, element = that.element, options = that.options, offset = options.offset.split(','), reverse = that._reverse;\n                if (transforms) {\n                    end.translatex = !reverse ? offset[0] : 0;\n                    end.translatey = !reverse ? offset[1] : 0;\n                } else {\n                    end.left = !reverse ? offset[0] : 0;\n                    end.top = !reverse ? offset[1] : 0;\n                }\n                element.css('left');\n            }\n        });\n        createEffect('expand', {\n            directions: [\n                'horizontal',\n                'vertical'\n            ],\n            restore: [OVERFLOW],\n            prepare: function (start, end) {\n                var that = this, element = that.element, options = that.options, reverse = that._reverse, property = that._direction === 'vertical' ? HEIGHT : WIDTH, setLength = element[0].style[property], oldLength = element.data(property), length = parseFloat(oldLength || setLength), realLength = round(element.css(property, AUTO)[property]());\n                start.overflow = HIDDEN;\n                length = options && options.reset ? realLength || length : length || realLength;\n                end[property] = (reverse ? 0 : length) + PX;\n                start[property] = (reverse ? length : 0) + PX;\n                if (oldLength === undefined) {\n                    element.data(property, setLength);\n                }\n            },\n            shouldHide: function () {\n                return this._reverse;\n            },\n            teardown: function () {\n                var that = this, element = that.element, property = that._direction === 'vertical' ? HEIGHT : WIDTH, length = element.data(property);\n                if (length == AUTO || length === BLANK) {\n                    setTimeout(function () {\n                        element.css(property, AUTO).css(property);\n                    }, 0);\n                }\n            }\n        });\n        var TRANSFER_START_STATE = {\n            position: 'absolute',\n            marginLeft: 0,\n            marginTop: 0,\n            scale: 1\n        };\n        createEffect('transfer', {\n            init: function (element, target) {\n                this.element = element;\n                this.options = { target: target };\n                this.restore = [];\n            },\n            setup: function () {\n                this.element.appendTo(document.body);\n            },\n            prepare: function (start, end) {\n                var that = this, element = that.element, outerBox = fx.box(element), innerBox = fx.box(that.options.target), currentScale = animationProperty(element, 'scale'), scale = fx.fillScale(innerBox, outerBox), transformOrigin = fx.transformOrigin(innerBox, outerBox);\n                extend(start, TRANSFER_START_STATE);\n                end.scale = 1;\n                element.css(TRANSFORM, 'scale(1)').css(TRANSFORM);\n                element.css(TRANSFORM, 'scale(' + currentScale + ')');\n                start.top = outerBox.top;\n                start.left = outerBox.left;\n                start.transformOrigin = transformOrigin.x + PX + ' ' + transformOrigin.y + PX;\n                if (that._reverse) {\n                    start.scale = scale;\n                } else {\n                    end.scale = scale;\n                }\n            }\n        });\n        var CLIPS = {\n            top: 'rect(auto auto $size auto)',\n            bottom: 'rect($size auto auto auto)',\n            left: 'rect(auto $size auto auto)',\n            right: 'rect(auto auto auto $size)'\n        };\n        var ROTATIONS = {\n            top: {\n                start: 'rotatex(0deg)',\n                end: 'rotatex(180deg)'\n            },\n            bottom: {\n                start: 'rotatex(-180deg)',\n                end: 'rotatex(0deg)'\n            },\n            left: {\n                start: 'rotatey(0deg)',\n                end: 'rotatey(-180deg)'\n            },\n            right: {\n                start: 'rotatey(180deg)',\n                end: 'rotatey(0deg)'\n            }\n        };\n        function clipInHalf(container, direction) {\n            var vertical = kendo.directions[direction].vertical, size = container[vertical ? HEIGHT : WIDTH]() / 2 + 'px';\n            return CLIPS[direction].replace('$size', size);\n        }\n        createEffect('turningPage', {\n            directions: FOUR_DIRECTIONS,\n            init: function (element, direction, container) {\n                Effect.prototype.init.call(this, element, direction);\n                this._container = container;\n            },\n            prepare: function (start, end) {\n                var that = this, reverse = that._reverse, direction = reverse ? directions[that._direction].reverse : that._direction, rotation = ROTATIONS[direction];\n                start.zIndex = 1;\n                if (that._clipInHalf) {\n                    start.clip = clipInHalf(that._container, kendo.directions[direction].reverse);\n                }\n                start[BACKFACE] = HIDDEN;\n                end[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.start : rotation.end);\n                start[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.end : rotation.start);\n            },\n            setup: function () {\n                this._container.append(this.element);\n            },\n            face: function (value) {\n                this._face = value;\n                return this;\n            },\n            shouldHide: function () {\n                var that = this, reverse = that._reverse, face = that._face;\n                return reverse && !face || !reverse && face;\n            },\n            clipInHalf: function (value) {\n                this._clipInHalf = value;\n                return this;\n            },\n            temporary: function () {\n                this.element.addClass('temp-page');\n                return this;\n            }\n        });\n        createEffect('staticPage', {\n            directions: FOUR_DIRECTIONS,\n            init: function (element, direction, container) {\n                Effect.prototype.init.call(this, element, direction);\n                this._container = container;\n            },\n            restore: ['clip'],\n            prepare: function (start, end) {\n                var that = this, direction = that._reverse ? directions[that._direction].reverse : that._direction;\n                start.clip = clipInHalf(that._container, direction);\n                start.opacity = 0.999;\n                end.opacity = 1;\n            },\n            shouldHide: function () {\n                var that = this, reverse = that._reverse, face = that._face;\n                return reverse && !face || !reverse && face;\n            },\n            face: function (value) {\n                this._face = value;\n                return this;\n            }\n        });\n        createEffect('pageturn', {\n            directions: [\n                'horizontal',\n                'vertical'\n            ],\n            init: function (element, direction, face, back) {\n                Effect.prototype.init.call(this, element, direction);\n                this.options = {};\n                this.options.face = face;\n                this.options.back = back;\n            },\n            children: function () {\n                var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, faceClone = options.face.clone(true).removeAttr('id'), backClone = options.back.clone(true).removeAttr('id'), element = that.element;\n                if (reverse) {\n                    temp = direction;\n                    direction = reverseDirection;\n                    reverseDirection = temp;\n                }\n                return [\n                    kendo.fx(options.face).staticPage(direction, element).face(true).setReverse(reverse),\n                    kendo.fx(options.back).staticPage(reverseDirection, element).setReverse(reverse),\n                    kendo.fx(faceClone).turningPage(direction, element).face(true).clipInHalf(true).temporary().setReverse(reverse),\n                    kendo.fx(backClone).turningPage(reverseDirection, element).clipInHalf(true).temporary().setReverse(reverse)\n                ];\n            },\n            prepare: function (start, end) {\n                start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n                start.transformStyle = 'preserve-3d';\n                start.opacity = 0.999;\n                end.opacity = 1;\n            },\n            teardown: function () {\n                this.element.find('.temp-page').remove();\n            }\n        });\n        createEffect('flip', {\n            directions: [\n                'horizontal',\n                'vertical'\n            ],\n            init: function (element, direction, face, back) {\n                Effect.prototype.init.call(this, element, direction);\n                this.options = {};\n                this.options.face = face;\n                this.options.back = back;\n            },\n            children: function () {\n                var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, element = that.element;\n                if (reverse) {\n                    temp = direction;\n                    direction = reverseDirection;\n                    reverseDirection = temp;\n                }\n                return [\n                    kendo.fx(options.face).turningPage(direction, element).face(true).setReverse(reverse),\n                    kendo.fx(options.back).turningPage(reverseDirection, element).setReverse(reverse)\n                ];\n            },\n            prepare: function (start) {\n                start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n                start.transformStyle = 'preserve-3d';\n            }\n        });\n        var RESTORE_OVERFLOW = !support.mobileOS.android;\n        var IGNORE_TRANSITION_EVENT_SELECTOR = '.km-touch-scrollbar, .km-actionsheet-wrapper';\n        createEffect('replace', {\n            _before: $.noop,\n            _after: $.noop,\n            init: function (element, previous, transitionClass) {\n                Effect.prototype.init.call(this, element);\n                this._previous = $(previous);\n                this._transitionClass = transitionClass;\n            },\n            duration: function () {\n                throw new Error('The replace effect does not support duration setting; the effect duration may be customized through the transition class rule');\n            },\n            beforeTransition: function (callback) {\n                this._before = callback;\n                return this;\n            },\n            afterTransition: function (callback) {\n                this._after = callback;\n                return this;\n            },\n            _both: function () {\n                return $().add(this._element).add(this._previous);\n            },\n            _containerClass: function () {\n                var direction = this._direction, containerClass = 'k-fx k-fx-start k-fx-' + this._transitionClass;\n                if (direction) {\n                    containerClass += ' k-fx-' + direction;\n                }\n                if (this._reverse) {\n                    containerClass += ' k-fx-reverse';\n                }\n                return containerClass;\n            },\n            complete: function (e) {\n                if (!this.deferred || e && $(e.target).is(IGNORE_TRANSITION_EVENT_SELECTOR)) {\n                    return;\n                }\n                var container = this.container;\n                container.removeClass('k-fx-end').removeClass(this._containerClass()).off(transitions.event, this.completeProxy);\n                this._previous.hide().removeClass('k-fx-current');\n                this.element.removeClass('k-fx-next');\n                if (RESTORE_OVERFLOW) {\n                    container.css(OVERFLOW, '');\n                }\n                if (!this.isAbsolute) {\n                    this._both().css(POSITION, '');\n                }\n                this.deferred.resolve();\n                delete this.deferred;\n            },\n            run: function () {\n                if (this._additionalEffects && this._additionalEffects[0]) {\n                    return this.compositeRun();\n                }\n                var that = this, element = that.element, previous = that._previous, container = element.parents().filter(previous.parents()).first(), both = that._both(), deferred = $.Deferred(), originalPosition = element.css(POSITION), originalOverflow;\n                if (!container.length) {\n                    container = element.parent();\n                }\n                this.container = container;\n                this.deferred = deferred;\n                this.isAbsolute = originalPosition == 'absolute';\n                if (!this.isAbsolute) {\n                    both.css(POSITION, 'absolute');\n                }\n                if (RESTORE_OVERFLOW) {\n                    originalOverflow = container.css(OVERFLOW);\n                    container.css(OVERFLOW, 'hidden');\n                }\n                if (!transitions) {\n                    this.complete();\n                } else {\n                    element.addClass('k-fx-hidden');\n                    container.addClass(this._containerClass());\n                    this.completeProxy = $.proxy(this, 'complete');\n                    container.on(transitions.event, this.completeProxy);\n                    kendo.animationFrame(function () {\n                        element.removeClass('k-fx-hidden').addClass('k-fx-next');\n                        previous.css('display', '').addClass('k-fx-current');\n                        that._before(previous, element);\n                        kendo.animationFrame(function () {\n                            container.removeClass('k-fx-start').addClass('k-fx-end');\n                            that._after(previous, element);\n                        });\n                    });\n                }\n                return deferred.promise();\n            },\n            stop: function () {\n                this.complete();\n            }\n        });\n        var Animation = kendo.Class.extend({\n            init: function () {\n                var that = this;\n                that._tickProxy = proxy(that._tick, that);\n                that._started = false;\n            },\n            tick: $.noop,\n            done: $.noop,\n            onEnd: $.noop,\n            onCancel: $.noop,\n            start: function () {\n                if (!this.enabled()) {\n                    return;\n                }\n                if (!this.done()) {\n                    this._started = true;\n                    kendo.animationFrame(this._tickProxy);\n                } else {\n                    this.onEnd();\n                }\n            },\n            enabled: function () {\n                return true;\n            },\n            cancel: function () {\n                this._started = false;\n                this.onCancel();\n            },\n            _tick: function () {\n                var that = this;\n                if (!that._started) {\n                    return;\n                }\n                that.tick();\n                if (!that.done()) {\n                    kendo.animationFrame(that._tickProxy);\n                } else {\n                    that._started = false;\n                    that.onEnd();\n                }\n            }\n        });\n        var Transition = Animation.extend({\n            init: function (options) {\n                var that = this;\n                extend(that, options);\n                Animation.fn.init.call(that);\n            },\n            done: function () {\n                return this.timePassed() >= this.duration;\n            },\n            timePassed: function () {\n                return Math.min(this.duration, new Date() - this.startDate);\n            },\n            moveTo: function (options) {\n                var that = this, movable = that.movable;\n                that.initial = movable[that.axis];\n                that.delta = options.location - that.initial;\n                that.duration = typeof options.duration == 'number' ? options.duration : 300;\n                that.tick = that._easeProxy(options.ease);\n                that.startDate = new Date();\n                that.start();\n            },\n            _easeProxy: function (ease) {\n                var that = this;\n                return function () {\n                    that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\n                };\n            }\n        });\n        extend(Transition, {\n            easeOutExpo: function (t, b, c, d) {\n                return t == d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n            },\n            easeOutBack: function (t, b, c, d, s) {\n                s = 1.70158;\n                return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n            }\n        });\n        fx.Animation = Animation;\n        fx.Transition = Transition;\n        fx.createEffect = createEffect;\n        fx.box = function (element) {\n            element = $(element);\n            var result = element.offset();\n            result.width = kendo._outerWidth(element);\n            result.height = kendo._outerHeight(element);\n            return result;\n        };\n        fx.transformOrigin = function (inner, outer) {\n            var x = (inner.left - outer.left) * outer.width / (outer.width - inner.width), y = (inner.top - outer.top) * outer.height / (outer.height - inner.height);\n            return {\n                x: isNaN(x) ? 0 : x,\n                y: isNaN(y) ? 0 : y\n            };\n        };\n        fx.fillScale = function (inner, outer) {\n            return Math.min(inner.width / outer.width, inner.height / outer.height);\n        };\n        fx.fitScale = function (inner, outer) {\n            return Math.max(inner.width / outer.width, inner.height / outer.height);\n        };\n    }(window.kendo.jQuery));\n    return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n    (a3 || a2)();\n}));"]}