{"version":3,"sources":["node_modules/@tweenjs/tween.js/dist/tween.esm.js","src/app/shared/components/ngx-virtual-scroller/index.ts"],"sourcesContent":["/**\n * The Ease class provides a collection of easing functions for use with tween.js.\n */\nvar Easing = Object.freeze({\n Linear: Object.freeze({\n None: function (amount) {\n return amount;\n },\n In: function (amount) {\n return this.None(amount);\n },\n Out: function (amount) {\n return this.None(amount);\n },\n InOut: function (amount) {\n return this.None(amount);\n }\n }),\n Quadratic: Object.freeze({\n In: function (amount) {\n return amount * amount;\n },\n Out: function (amount) {\n return amount * (2 - amount);\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount;\n }\n return -0.5 * (--amount * (amount - 2) - 1);\n }\n }),\n Cubic: Object.freeze({\n In: function (amount) {\n return amount * amount * amount;\n },\n Out: function (amount) {\n return --amount * amount * amount + 1;\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount * amount;\n }\n return 0.5 * ((amount -= 2) * amount * amount + 2);\n }\n }),\n Quartic: Object.freeze({\n In: function (amount) {\n return amount * amount * amount * amount;\n },\n Out: function (amount) {\n return 1 - --amount * amount * amount * amount;\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount * amount * amount;\n }\n return -0.5 * ((amount -= 2) * amount * amount * amount - 2);\n }\n }),\n Quintic: Object.freeze({\n In: function (amount) {\n return amount * amount * amount * amount * amount;\n },\n Out: function (amount) {\n return --amount * amount * amount * amount * amount + 1;\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount * amount * amount * amount;\n }\n return 0.5 * ((amount -= 2) * amount * amount * amount * amount + 2);\n }\n }),\n Sinusoidal: Object.freeze({\n In: function (amount) {\n return 1 - Math.sin((1.0 - amount) * Math.PI / 2);\n },\n Out: function (amount) {\n return Math.sin(amount * Math.PI / 2);\n },\n InOut: function (amount) {\n return 0.5 * (1 - Math.sin(Math.PI * (0.5 - amount)));\n }\n }),\n Exponential: Object.freeze({\n In: function (amount) {\n return amount === 0 ? 0 : Math.pow(1024, amount - 1);\n },\n Out: function (amount) {\n return amount === 1 ? 1 : 1 - Math.pow(2, -10 * amount);\n },\n InOut: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n if ((amount *= 2) < 1) {\n return 0.5 * Math.pow(1024, amount - 1);\n }\n return 0.5 * (-Math.pow(2, -10 * (amount - 1)) + 2);\n }\n }),\n Circular: Object.freeze({\n In: function (amount) {\n return 1 - Math.sqrt(1 - amount * amount);\n },\n Out: function (amount) {\n return Math.sqrt(1 - --amount * amount);\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return -0.5 * (Math.sqrt(1 - amount * amount) - 1);\n }\n return 0.5 * (Math.sqrt(1 - (amount -= 2) * amount) + 1);\n }\n }),\n Elastic: Object.freeze({\n In: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n return -Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI);\n },\n Out: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n return Math.pow(2, -10 * amount) * Math.sin((amount - 0.1) * 5 * Math.PI) + 1;\n },\n InOut: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n amount *= 2;\n if (amount < 1) {\n return -0.5 * Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI);\n }\n return 0.5 * Math.pow(2, -10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI) + 1;\n }\n }),\n Back: Object.freeze({\n In: function (amount) {\n var s = 1.70158;\n return amount === 1 ? 1 : amount * amount * ((s + 1) * amount - s);\n },\n Out: function (amount) {\n var s = 1.70158;\n return amount === 0 ? 0 : --amount * amount * ((s + 1) * amount + s) + 1;\n },\n InOut: function (amount) {\n var s = 1.70158 * 1.525;\n if ((amount *= 2) < 1) {\n return 0.5 * (amount * amount * ((s + 1) * amount - s));\n }\n return 0.5 * ((amount -= 2) * amount * ((s + 1) * amount + s) + 2);\n }\n }),\n Bounce: Object.freeze({\n In: function (amount) {\n return 1 - Easing.Bounce.Out(1 - amount);\n },\n Out: function (amount) {\n if (amount < 1 / 2.75) {\n return 7.5625 * amount * amount;\n } else if (amount < 2 / 2.75) {\n return 7.5625 * (amount -= 1.5 / 2.75) * amount + 0.75;\n } else if (amount < 2.5 / 2.75) {\n return 7.5625 * (amount -= 2.25 / 2.75) * amount + 0.9375;\n } else {\n return 7.5625 * (amount -= 2.625 / 2.75) * amount + 0.984375;\n }\n },\n InOut: function (amount) {\n if (amount < 0.5) {\n return Easing.Bounce.In(amount * 2) * 0.5;\n }\n return Easing.Bounce.Out(amount * 2 - 1) * 0.5 + 0.5;\n }\n }),\n generatePow: function (power) {\n if (power === void 0) {\n power = 4;\n }\n power = power < Number.EPSILON ? Number.EPSILON : power;\n power = power > 10000 ? 10000 : power;\n return {\n In: function (amount) {\n return Math.pow(amount, power);\n },\n Out: function (amount) {\n return 1 - Math.pow(1 - amount, power);\n },\n InOut: function (amount) {\n if (amount < 0.5) {\n return Math.pow(amount * 2, power) / 2;\n }\n return (1 - Math.pow(2 - amount * 2, power)) / 2 + 0.5;\n }\n };\n }\n});\nvar now = function () {\n return performance.now();\n};\n\n/**\n * Controlling groups of tweens\n *\n * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components.\n * In these cases, you may want to create your own smaller groups of tween\n */\nvar Group = /** @class */function () {\n function Group() {\n this._tweens = {};\n this._tweensAddedDuringUpdate = {};\n }\n Group.prototype.getAll = function () {\n var _this = this;\n return Object.keys(this._tweens).map(function (tweenId) {\n return _this._tweens[tweenId];\n });\n };\n Group.prototype.removeAll = function () {\n this._tweens = {};\n };\n Group.prototype.add = function (tween) {\n this._tweens[tween.getId()] = tween;\n this._tweensAddedDuringUpdate[tween.getId()] = tween;\n };\n Group.prototype.remove = function (tween) {\n delete this._tweens[tween.getId()];\n delete this._tweensAddedDuringUpdate[tween.getId()];\n };\n Group.prototype.update = function (time, preserve) {\n if (time === void 0) {\n time = now();\n }\n if (preserve === void 0) {\n preserve = false;\n }\n var tweenIds = Object.keys(this._tweens);\n if (tweenIds.length === 0) {\n return false;\n }\n // Tweens are updated in \"batches\". If you add a new tween during an\n // update, then the new tween will be updated in the next batch.\n // If you remove a tween during an update, it may or may not be updated.\n // However, if the removed tween was added during the current batch,\n // then it will not be updated.\n while (tweenIds.length > 0) {\n this._tweensAddedDuringUpdate = {};\n for (var i = 0; i < tweenIds.length; i++) {\n var tween = this._tweens[tweenIds[i]];\n var autoStart = !preserve;\n if (tween && tween.update(time, autoStart) === false && !preserve) {\n delete this._tweens[tweenIds[i]];\n }\n }\n tweenIds = Object.keys(this._tweensAddedDuringUpdate);\n }\n return true;\n };\n return Group;\n}();\n\n/**\n *\n */\nvar Interpolation = {\n Linear: function (v, k) {\n var m = v.length - 1;\n var f = m * k;\n var i = Math.floor(f);\n var fn = Interpolation.Utils.Linear;\n if (k < 0) {\n return fn(v[0], v[1], f);\n }\n if (k > 1) {\n return fn(v[m], v[m - 1], m - f);\n }\n return fn(v[i], v[i + 1 > m ? m : i + 1], f - i);\n },\n Bezier: function (v, k) {\n var b = 0;\n var n = v.length - 1;\n var pw = Math.pow;\n var bn = Interpolation.Utils.Bernstein;\n for (var i = 0; i <= n; i++) {\n b += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);\n }\n return b;\n },\n CatmullRom: function (v, k) {\n var m = v.length - 1;\n var f = m * k;\n var i = Math.floor(f);\n var fn = Interpolation.Utils.CatmullRom;\n if (v[0] === v[m]) {\n if (k < 0) {\n i = Math.floor(f = m * (1 + k));\n }\n return fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);\n } else {\n if (k < 0) {\n return v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);\n }\n if (k > 1) {\n return v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);\n }\n return fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);\n }\n },\n Utils: {\n Linear: function (p0, p1, t) {\n return (p1 - p0) * t + p0;\n },\n Bernstein: function (n, i) {\n var fc = Interpolation.Utils.Factorial;\n return fc(n) / fc(i) / fc(n - i);\n },\n Factorial: function () {\n var a = [1];\n return function (n) {\n var s = 1;\n if (a[n]) {\n return a[n];\n }\n for (var i = n; i > 1; i--) {\n s *= i;\n }\n a[n] = s;\n return s;\n };\n }(),\n CatmullRom: function (p0, p1, p2, p3, t) {\n var v0 = (p2 - p0) * 0.5;\n var v1 = (p3 - p1) * 0.5;\n var t2 = t * t;\n var t3 = t * t2;\n return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\n }\n }\n};\n\n/**\n * Utils\n */\nvar Sequence = /** @class */function () {\n function Sequence() {}\n Sequence.nextId = function () {\n return Sequence._nextId++;\n };\n Sequence._nextId = 0;\n return Sequence;\n}();\nvar mainGroup = new Group();\n\n/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\nvar Tween = /** @class */function () {\n function Tween(_object, _group) {\n if (_group === void 0) {\n _group = mainGroup;\n }\n this._object = _object;\n this._group = _group;\n this._isPaused = false;\n this._pauseStart = 0;\n this._valuesStart = {};\n this._valuesEnd = {};\n this._valuesStartRepeat = {};\n this._duration = 1000;\n this._isDynamic = false;\n this._initialRepeat = 0;\n this._repeat = 0;\n this._yoyo = false;\n this._isPlaying = false;\n this._reversed = false;\n this._delayTime = 0;\n this._startTime = 0;\n this._easingFunction = Easing.Linear.None;\n this._interpolationFunction = Interpolation.Linear;\n // eslint-disable-next-line\n this._chainedTweens = [];\n this._onStartCallbackFired = false;\n this._onEveryStartCallbackFired = false;\n this._id = Sequence.nextId();\n this._isChainStopped = false;\n this._propertiesAreSetUp = false;\n this._goToEnd = false;\n }\n Tween.prototype.getId = function () {\n return this._id;\n };\n Tween.prototype.isPlaying = function () {\n return this._isPlaying;\n };\n Tween.prototype.isPaused = function () {\n return this._isPaused;\n };\n Tween.prototype.to = function (target, duration) {\n if (duration === void 0) {\n duration = 1000;\n }\n if (this._isPlaying) throw new Error('Can not call Tween.to() while Tween is already started or paused. Stop the Tween first.');\n this._valuesEnd = target;\n this._propertiesAreSetUp = false;\n this._duration = duration;\n return this;\n };\n Tween.prototype.duration = function (duration) {\n if (duration === void 0) {\n duration = 1000;\n }\n this._duration = duration;\n return this;\n };\n Tween.prototype.dynamic = function (dynamic) {\n if (dynamic === void 0) {\n dynamic = false;\n }\n this._isDynamic = dynamic;\n return this;\n };\n Tween.prototype.start = function (time, overrideStartingValues) {\n if (time === void 0) {\n time = now();\n }\n if (overrideStartingValues === void 0) {\n overrideStartingValues = false;\n }\n if (this._isPlaying) {\n return this;\n }\n // eslint-disable-next-line\n this._group && this._group.add(this);\n this._repeat = this._initialRepeat;\n if (this._reversed) {\n // If we were reversed (f.e. using the yoyo feature) then we need to\n // flip the tween direction back to forward.\n this._reversed = false;\n for (var property in this._valuesStartRepeat) {\n this._swapEndStartRepeatValues(property);\n this._valuesStart[property] = this._valuesStartRepeat[property];\n }\n }\n this._isPlaying = true;\n this._isPaused = false;\n this._onStartCallbackFired = false;\n this._onEveryStartCallbackFired = false;\n this._isChainStopped = false;\n this._startTime = time;\n this._startTime += this._delayTime;\n if (!this._propertiesAreSetUp || overrideStartingValues) {\n this._propertiesAreSetUp = true;\n // If dynamic is not enabled, clone the end values instead of using the passed-in end values.\n if (!this._isDynamic) {\n var tmp = {};\n for (var prop in this._valuesEnd) tmp[prop] = this._valuesEnd[prop];\n this._valuesEnd = tmp;\n }\n this._setupProperties(this._object, this._valuesStart, this._valuesEnd, this._valuesStartRepeat, overrideStartingValues);\n }\n return this;\n };\n Tween.prototype.startFromCurrentValues = function (time) {\n return this.start(time, true);\n };\n Tween.prototype._setupProperties = function (_object, _valuesStart, _valuesEnd, _valuesStartRepeat, overrideStartingValues) {\n for (var property in _valuesEnd) {\n var startValue = _object[property];\n var startValueIsArray = Array.isArray(startValue);\n var propType = startValueIsArray ? 'array' : typeof startValue;\n var isInterpolationList = !startValueIsArray && Array.isArray(_valuesEnd[property]);\n // If `to()` specifies a property that doesn't exist in the source object,\n // we should not set that property in the object\n if (propType === 'undefined' || propType === 'function') {\n continue;\n }\n // Check if an Array was provided as property value\n if (isInterpolationList) {\n var endValues = _valuesEnd[property];\n if (endValues.length === 0) {\n continue;\n }\n // Handle an array of relative values.\n // Creates a local copy of the Array with the start value at the front\n var temp = [startValue];\n for (var i = 0, l = endValues.length; i < l; i += 1) {\n var value = this._handleRelativeValue(startValue, endValues[i]);\n if (isNaN(value)) {\n isInterpolationList = false;\n console.warn('Found invalid interpolation list. Skipping.');\n break;\n }\n temp.push(value);\n }\n if (isInterpolationList) {\n // if (_valuesStart[property] === undefined) { // handle end values only the first time. NOT NEEDED? setupProperties is now guarded by _propertiesAreSetUp.\n _valuesEnd[property] = temp;\n // }\n }\n }\n // handle the deepness of the values\n if ((propType === 'object' || startValueIsArray) && startValue && !isInterpolationList) {\n _valuesStart[property] = startValueIsArray ? [] : {};\n var nestedObject = startValue;\n for (var prop in nestedObject) {\n _valuesStart[property][prop] = nestedObject[prop];\n }\n // TODO? repeat nested values? And yoyo? And array values?\n _valuesStartRepeat[property] = startValueIsArray ? [] : {};\n var endValues = _valuesEnd[property];\n // If dynamic is not enabled, clone the end values instead of using the passed-in end values.\n if (!this._isDynamic) {\n var tmp = {};\n for (var prop in endValues) tmp[prop] = endValues[prop];\n _valuesEnd[property] = endValues = tmp;\n }\n this._setupProperties(nestedObject, _valuesStart[property], endValues, _valuesStartRepeat[property], overrideStartingValues);\n } else {\n // Save the starting value, but only once unless override is requested.\n if (typeof _valuesStart[property] === 'undefined' || overrideStartingValues) {\n _valuesStart[property] = startValue;\n }\n if (!startValueIsArray) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings\n }\n if (isInterpolationList) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _valuesStartRepeat[property] = _valuesEnd[property].slice().reverse();\n } else {\n _valuesStartRepeat[property] = _valuesStart[property] || 0;\n }\n }\n }\n };\n Tween.prototype.stop = function () {\n if (!this._isChainStopped) {\n this._isChainStopped = true;\n this.stopChainedTweens();\n }\n if (!this._isPlaying) {\n return this;\n }\n // eslint-disable-next-line\n this._group && this._group.remove(this);\n this._isPlaying = false;\n this._isPaused = false;\n if (this._onStopCallback) {\n this._onStopCallback(this._object);\n }\n return this;\n };\n Tween.prototype.end = function () {\n this._goToEnd = true;\n this.update(Infinity);\n return this;\n };\n Tween.prototype.pause = function (time) {\n if (time === void 0) {\n time = now();\n }\n if (this._isPaused || !this._isPlaying) {\n return this;\n }\n this._isPaused = true;\n this._pauseStart = time;\n // eslint-disable-next-line\n this._group && this._group.remove(this);\n return this;\n };\n Tween.prototype.resume = function (time) {\n if (time === void 0) {\n time = now();\n }\n if (!this._isPaused || !this._isPlaying) {\n return this;\n }\n this._isPaused = false;\n this._startTime += time - this._pauseStart;\n this._pauseStart = 0;\n // eslint-disable-next-line\n this._group && this._group.add(this);\n return this;\n };\n Tween.prototype.stopChainedTweens = function () {\n for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n this._chainedTweens[i].stop();\n }\n return this;\n };\n Tween.prototype.group = function (group) {\n if (group === void 0) {\n group = mainGroup;\n }\n this._group = group;\n return this;\n };\n Tween.prototype.delay = function (amount) {\n if (amount === void 0) {\n amount = 0;\n }\n this._delayTime = amount;\n return this;\n };\n Tween.prototype.repeat = function (times) {\n if (times === void 0) {\n times = 0;\n }\n this._initialRepeat = times;\n this._repeat = times;\n return this;\n };\n Tween.prototype.repeatDelay = function (amount) {\n this._repeatDelayTime = amount;\n return this;\n };\n Tween.prototype.yoyo = function (yoyo) {\n if (yoyo === void 0) {\n yoyo = false;\n }\n this._yoyo = yoyo;\n return this;\n };\n Tween.prototype.easing = function (easingFunction) {\n if (easingFunction === void 0) {\n easingFunction = Easing.Linear.None;\n }\n this._easingFunction = easingFunction;\n return this;\n };\n Tween.prototype.interpolation = function (interpolationFunction) {\n if (interpolationFunction === void 0) {\n interpolationFunction = Interpolation.Linear;\n }\n this._interpolationFunction = interpolationFunction;\n return this;\n };\n // eslint-disable-next-line\n Tween.prototype.chain = function () {\n var tweens = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n tweens[_i] = arguments[_i];\n }\n this._chainedTweens = tweens;\n return this;\n };\n Tween.prototype.onStart = function (callback) {\n this._onStartCallback = callback;\n return this;\n };\n Tween.prototype.onEveryStart = function (callback) {\n this._onEveryStartCallback = callback;\n return this;\n };\n Tween.prototype.onUpdate = function (callback) {\n this._onUpdateCallback = callback;\n return this;\n };\n Tween.prototype.onRepeat = function (callback) {\n this._onRepeatCallback = callback;\n return this;\n };\n Tween.prototype.onComplete = function (callback) {\n this._onCompleteCallback = callback;\n return this;\n };\n Tween.prototype.onStop = function (callback) {\n this._onStopCallback = callback;\n return this;\n };\n /**\n * @returns true if the tween is still playing after the update, false\n * otherwise (calling update on a paused tween still returns true because\n * it is still playing, just paused).\n */\n Tween.prototype.update = function (time, autoStart) {\n if (time === void 0) {\n time = now();\n }\n if (autoStart === void 0) {\n autoStart = true;\n }\n if (this._isPaused) return true;\n var property;\n var elapsed;\n var endTime = this._startTime + this._duration;\n if (!this._goToEnd && !this._isPlaying) {\n if (time > endTime) return false;\n if (autoStart) this.start(time, true);\n }\n this._goToEnd = false;\n if (time < this._startTime) {\n return true;\n }\n if (this._onStartCallbackFired === false) {\n if (this._onStartCallback) {\n this._onStartCallback(this._object);\n }\n this._onStartCallbackFired = true;\n }\n if (this._onEveryStartCallbackFired === false) {\n if (this._onEveryStartCallback) {\n this._onEveryStartCallback(this._object);\n }\n this._onEveryStartCallbackFired = true;\n }\n elapsed = (time - this._startTime) / this._duration;\n elapsed = this._duration === 0 || elapsed > 1 ? 1 : elapsed;\n var value = this._easingFunction(elapsed);\n // properties transformations\n this._updateProperties(this._object, this._valuesStart, this._valuesEnd, value);\n if (this._onUpdateCallback) {\n this._onUpdateCallback(this._object, elapsed);\n }\n if (elapsed === 1) {\n if (this._repeat > 0) {\n if (isFinite(this._repeat)) {\n this._repeat--;\n }\n // Reassign starting values, restart by making startTime = now\n for (property in this._valuesStartRepeat) {\n if (!this._yoyo && typeof this._valuesEnd[property] === 'string') {\n this._valuesStartRepeat[property] =\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n this._valuesStartRepeat[property] + parseFloat(this._valuesEnd[property]);\n }\n if (this._yoyo) {\n this._swapEndStartRepeatValues(property);\n }\n this._valuesStart[property] = this._valuesStartRepeat[property];\n }\n if (this._yoyo) {\n this._reversed = !this._reversed;\n }\n if (this._repeatDelayTime !== undefined) {\n this._startTime = time + this._repeatDelayTime;\n } else {\n this._startTime = time + this._delayTime;\n }\n if (this._onRepeatCallback) {\n this._onRepeatCallback(this._object);\n }\n this._onEveryStartCallbackFired = false;\n return true;\n } else {\n if (this._onCompleteCallback) {\n this._onCompleteCallback(this._object);\n }\n for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n // Make the chained tweens start exactly at the time they should,\n // even if the `update()` method was called way past the duration of the tween\n this._chainedTweens[i].start(this._startTime + this._duration, false);\n }\n this._isPlaying = false;\n return false;\n }\n }\n return true;\n };\n Tween.prototype._updateProperties = function (_object, _valuesStart, _valuesEnd, value) {\n for (var property in _valuesEnd) {\n // Don't update properties that do not exist in the source object\n if (_valuesStart[property] === undefined) {\n continue;\n }\n var start = _valuesStart[property] || 0;\n var end = _valuesEnd[property];\n var startIsArray = Array.isArray(_object[property]);\n var endIsArray = Array.isArray(end);\n var isInterpolationList = !startIsArray && endIsArray;\n if (isInterpolationList) {\n _object[property] = this._interpolationFunction(end, value);\n } else if (typeof end === 'object' && end) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n this._updateProperties(_object[property], start, end, value);\n } else {\n // Parses relative end values with start as base (e.g.: +10, -3)\n end = this._handleRelativeValue(start, end);\n // Protect against non numeric properties.\n if (typeof end === 'number') {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _object[property] = start + (end - start) * value;\n }\n }\n }\n };\n Tween.prototype._handleRelativeValue = function (start, end) {\n if (typeof end !== 'string') {\n return end;\n }\n if (end.charAt(0) === '+' || end.charAt(0) === '-') {\n return start + parseFloat(end);\n }\n return parseFloat(end);\n };\n Tween.prototype._swapEndStartRepeatValues = function (property) {\n var tmp = this._valuesStartRepeat[property];\n var endValue = this._valuesEnd[property];\n if (typeof endValue === 'string') {\n this._valuesStartRepeat[property] = this._valuesStartRepeat[property] + parseFloat(endValue);\n } else {\n this._valuesStartRepeat[property] = this._valuesEnd[property];\n }\n this._valuesEnd[property] = tmp;\n };\n return Tween;\n}();\nvar VERSION = '21.1.1';\n\n/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\nvar nextId = Sequence.nextId;\n/**\n * Controlling groups of tweens\n *\n * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components.\n * In these cases, you may want to create your own smaller groups of tweens.\n */\nvar TWEEN = mainGroup;\n// This is the best way to export things in a way that's compatible with both ES\n// Modules and CommonJS, without build hacks, and so as not to break the\n// existing API.\n// https://github.com/rollup/rollup/issues/1961#issuecomment-423037881\nvar getAll = TWEEN.getAll.bind(TWEEN);\nvar removeAll = TWEEN.removeAll.bind(TWEEN);\nvar add = TWEEN.add.bind(TWEEN);\nvar remove = TWEEN.remove.bind(TWEEN);\nvar update = TWEEN.update.bind(TWEEN);\nvar exports = {\n Easing: Easing,\n Group: Group,\n Interpolation: Interpolation,\n now: now,\n Sequence: Sequence,\n nextId: nextId,\n Tween: Tween,\n VERSION: VERSION,\n getAll: getAll,\n removeAll: removeAll,\n add: add,\n remove: remove,\n update: update\n};\nexport { Easing, Group, Interpolation, Sequence, Tween, VERSION, add, exports as default, getAll, nextId, now, remove, removeAll, update };","import {\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n DoCheck,\r\n ElementRef,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n NgModule,\r\n NgZone,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n Renderer2,\r\n ViewChild,\r\n} from '@angular/core';\r\n\r\nimport { PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformServer } from '@angular/common';\r\n\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport * as tween from '@tweenjs/tween.js'\r\n\r\nexport interface VirtualScrollerDefaultOptions {\r\n checkResizeInterval: number\r\n modifyOverflowStyleOfParentScroll: boolean,\r\n resizeBypassRefreshThreshold: number,\r\n scrollAnimationTime: number;\r\n scrollDebounceTime: number;\r\n scrollThrottlingTime: number;\r\n scrollbarHeight?: number;\r\n scrollbarWidth?: number;\r\n stripedTable: boolean\r\n}\r\n\r\nexport function VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY(): VirtualScrollerDefaultOptions {\r\n return {\r\n checkResizeInterval: 1000,\r\n modifyOverflowStyleOfParentScroll: true,\r\n resizeBypassRefreshThreshold: 5,\r\n scrollAnimationTime: 750,\r\n scrollDebounceTime: 0,\r\n scrollThrottlingTime: 0,\r\n stripedTable: false\r\n };\r\n}\r\n\r\nexport interface WrapGroupDimensions {\r\n maxChildSizePerWrapGroup: WrapGroupDimension[];\r\n numberOfKnownWrapGroupChildSizes: number;\r\n sumOfKnownWrapGroupChildHeights: number;\r\n sumOfKnownWrapGroupChildWidths: number;\r\n}\r\n\r\nexport interface WrapGroupDimension {\r\n childHeight: number;\r\n childWidth: number;\r\n items: any[];\r\n}\r\n\r\nexport interface IDimensions {\r\n childHeight: number;\r\n childWidth: number;\r\n itemCount: number;\r\n itemsPerPage: number;\r\n itemsPerWrapGroup: number;\r\n maxScrollPosition: number;\r\n pageCount_fractional: number;\r\n scrollLength: number;\r\n viewportLength: number;\r\n wrapGroupsPerPage: number;\r\n}\r\n\r\nexport interface IPageInfo {\r\n endIndex: number;\r\n endIndexWithBuffer: number;\r\n maxScrollPosition: number;\r\n scrollEndPosition: number;\r\n scrollStartPosition: number;\r\n startIndex: number;\r\n startIndexWithBuffer: number;\r\n scrollLength: number;\r\n}\r\n\r\nexport interface IViewport extends IPageInfo {\r\n padding: number;\r\n}\r\n\r\n// tslint:disable-next-line: no-conflicting-lifecycle\r\n@Component({\r\n selector: 'virtual-scroller,[virtualScroller]',\r\n exportAs: 'virtualScroller',\r\n template: `\r\n
\r\n
\r\n \r\n
\r\n `,\r\n host: {\r\n '[class.horizontal]': \"horizontal\",\r\n '[class.vertical]': \"!horizontal\",\r\n '[class.selfScroll]': \"!parentScroll\",\r\n '[class.rtl]': \"RTL\"\r\n },\r\n styles: [`\r\n :host {\r\n position: relative;\r\n\t \tdisplay: block;\r\n -webkit-overflow-scrolling: touch;\r\n }\r\n\t\t:host.horizontal.selfScroll {\r\n overflow-y: visible;\r\n overflow-x: auto;\r\n\t\t}\r\n\t\t:host.horizontal.selfScroll.rtl {\r\n\t\t\ttransform: scaleX(-1);\r\n\t\t}\r\n\t\t:host.vertical.selfScroll {\r\n overflow-y: auto;\r\n overflow-x: visible;\r\n\t\t}\r\n .scrollable-content {\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n max-width: 100vw;\r\n max-height: 100vh;\r\n position: absolute;\r\n }\r\n\t\t.scrollable-content ::ng-deep > * {\r\n\t\t\tbox-sizing: border-box;\r\n\t\t}\r\n\t\t:host.horizontal {\r\n\t\t\twhite-space: nowrap;\r\n\t\t}\r\n\t\t:host.horizontal .scrollable-content {\r\n\t\t\tdisplay: flex;\r\n\t\t}\r\n\t\t:host.horizontal .scrollable-content ::ng-deep > * {\r\n\t\t\tflex-shrink: 0;\r\n\t\t\tflex-grow: 0;\r\n\t\t\twhite-space: initial;\r\n\t\t}\r\n\t\t:host.horizontal.rtl .scrollable-content ::ng-deep > * {\r\n\t\t\ttransform:scaleX(-1);\r\n\t\t}\r\n .total-padding {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n height: 1px;\r\n width: 1px;\r\n transform-origin: 0 0;\r\n opacity: 0;\r\n }\r\n :host.horizontal .total-padding {\r\n height: 100%;\r\n }\r\n `],\r\n standalone: true\r\n})\r\nexport class VirtualScrollerComponent implements OnInit, OnChanges, OnDestroy, DoCheck {\r\n public viewPortItems: any[];\r\n public window = window;\r\n\r\n public get viewPortInfo(): IPageInfo {\r\n const pageInfo: IViewport = this.previousViewPort || {} as any;\r\n return {\r\n startIndex: pageInfo.startIndex || 0,\r\n endIndex: pageInfo.endIndex || 0,\r\n scrollStartPosition: pageInfo.scrollStartPosition || 0,\r\n scrollEndPosition: pageInfo.scrollEndPosition || 0,\r\n maxScrollPosition: pageInfo.maxScrollPosition || 0,\r\n startIndexWithBuffer: pageInfo.startIndexWithBuffer || 0,\r\n endIndexWithBuffer: pageInfo.endIndexWithBuffer || 0,\r\n scrollLength: pageInfo.scrollLength || 0,\r\n };\r\n }\r\n\r\n @Input()\r\n public executeRefreshOutsideAngularZone = false;\r\n\r\n protected _enableUnequalChildrenSizes = false;\r\n @Input()\r\n public get enableUnequalChildrenSizes(): boolean {\r\n return this._enableUnequalChildrenSizes;\r\n }\r\n public set enableUnequalChildrenSizes(value: boolean) {\r\n if (this._enableUnequalChildrenSizes === value) {\r\n return;\r\n }\r\n\r\n this._enableUnequalChildrenSizes = value;\r\n this.minMeasuredChildWidth = undefined;\r\n this.minMeasuredChildHeight = undefined;\r\n }\r\n\r\n @Input()\r\n public RTL = false;\r\n\r\n @Input()\r\n public useMarginInsteadOfTranslate = false;\r\n\r\n @Input()\r\n public modifyOverflowStyleOfParentScroll: boolean;\r\n\r\n @Input()\r\n public stripedTable: boolean;\r\n\r\n @Input()\r\n public scrollbarWidth: number;\r\n\r\n @Input()\r\n public scrollbarHeight: number;\r\n\r\n @Input()\r\n public childWidth: number;\r\n\r\n @Input()\r\n public childHeight: number;\r\n\r\n @Input()\r\n public ssrChildWidth: number;\r\n\r\n @Input()\r\n public ssrChildHeight: number;\r\n\r\n @Input()\r\n public ssrViewportWidth = 1920;\r\n\r\n @Input()\r\n public ssrViewportHeight = 1080;\r\n protected _bufferAmount: number;\r\n protected cachedPageSize = 0;\r\n protected previousScrollNumberElements = 0;\r\n protected _invisiblePaddingProperty;\r\n protected _offsetType;\r\n protected _scrollType;\r\n protected _pageOffsetType;\r\n protected _childScrollDim;\r\n protected _translateDir;\r\n protected _marginDir;\r\n protected calculatedScrollbarWidth = 0;\r\n protected calculatedScrollbarHeight = 0;\r\n protected padding = 0;\r\n protected previousViewPort: IViewport = {} as any;\r\n protected currentTween: tween.Tween;\r\n protected cachedItemsLength: number;\r\n protected checkScrollElementResizedTimer: number;\r\n protected _checkResizeInterval: number;\r\n protected _items: any[] = [];\r\n protected _horizontal: boolean;\r\n protected oldParentScrollOverflow: { x: string, y: string };\r\n protected _parentScroll: Element | Window;\r\n protected isAngularUniversalSSR: boolean;\r\n protected minMeasuredChildWidth: number;\r\n protected minMeasuredChildHeight: number;\r\n protected wrapGroupDimensions: WrapGroupDimensions;\r\n protected previousScrollBoundingRect: DOMRect;\r\n\r\n protected disposeScrollHandler: () => void | undefined;\r\n protected disposeResizeHandler: () => void | undefined;\r\n\r\n @Output()\r\n public vsUpdate: EventEmitter = new EventEmitter();\r\n\r\n @Output()\r\n public vsChange: EventEmitter = new EventEmitter();\r\n\r\n @Output()\r\n public vsScrollLenghtChange: EventEmitter = new EventEmitter();\r\n\r\n @Output()\r\n public vsStart: EventEmitter = new EventEmitter();\r\n\r\n @Output()\r\n public vsEnd: EventEmitter = new EventEmitter();\r\n\r\n @ViewChild('content', { read: ElementRef, static: true })\r\n protected contentElementRef: ElementRef;\r\n\r\n @ViewChild('invisiblePadding', { read: ElementRef, static: true })\r\n protected invisiblePaddingElementRef: ElementRef;\r\n\r\n @ContentChild('header', { read: ElementRef, static: false })\r\n protected headerElementRef: ElementRef;\r\n\r\n @ContentChild('container', { read: ElementRef, static: false })\r\n protected containerElementRef: ElementRef;\r\n\r\n @Input()\r\n public get bufferAmount(): number {\r\n if (typeof (this._bufferAmount) === 'number' && this._bufferAmount >= 0) {\r\n return this._bufferAmount;\r\n } else {\r\n return this.enableUnequalChildrenSizes ? 5 : 0;\r\n }\r\n }\r\n public set bufferAmount(value: number) {\r\n this._bufferAmount = value;\r\n }\r\n\r\n @Input()\r\n public scrollAnimationTime: number;\r\n\r\n @Input()\r\n public resizeBypassRefreshThreshold: number;\r\n\r\n protected _scrollThrottlingTime: number;\r\n @Input()\r\n public get scrollThrottlingTime(): number {\r\n return this._scrollThrottlingTime;\r\n }\r\n public set scrollThrottlingTime(value: number) {\r\n this._scrollThrottlingTime = value;\r\n this.updateOnScrollFunction();\r\n }\r\n\r\n protected _scrollDebounceTime: number;\r\n @Input()\r\n public get scrollDebounceTime(): number {\r\n return this._scrollDebounceTime;\r\n }\r\n public set scrollDebounceTime(value: number) {\r\n this._scrollDebounceTime = value;\r\n this.updateOnScrollFunction();\r\n }\r\n\r\n protected onScroll: () => void;\r\n protected updateOnScrollFunction(): void {\r\n if (this.scrollDebounceTime) {\r\n this.onScroll = this.debounce(() => {\r\n this.refresh_internal(false);\r\n }, this.scrollDebounceTime) as any;\r\n }\r\n else if (this.scrollThrottlingTime) {\r\n this.onScroll = this.throttleTrailing(() => {\r\n this.refresh_internal(false);\r\n }, this.scrollThrottlingTime) as any;\r\n }\r\n else {\r\n this.onScroll = () => {\r\n this.refresh_internal(false);\r\n };\r\n }\r\n }\r\n\r\n @Input()\r\n public get checkResizeInterval(): number {\r\n return this._checkResizeInterval;\r\n }\r\n public set checkResizeInterval(value: number) {\r\n if (this._checkResizeInterval === value) {\r\n return;\r\n }\r\n\r\n this._checkResizeInterval = value;\r\n this.addScrollEventHandlers();\r\n }\r\n\r\n @Input()\r\n public get items(): any[] {\r\n return this._items;\r\n }\r\n public set items(value: any[]) {\r\n if (value === this._items) {\r\n return;\r\n }\r\n\r\n this._items = value || [];\r\n this.refresh_internal(true);\r\n }\r\n\r\n @Input()\r\n public compareItems: (item1: any, item2: any) => boolean = (item1: any, item2: any) => item1 === item2;\r\n\r\n @Input()\r\n public get horizontal(): boolean {\r\n return this._horizontal;\r\n }\r\n public set horizontal(value: boolean) {\r\n this._horizontal = value;\r\n this.updateDirection();\r\n }\r\n\r\n protected revertParentOverscroll(): void {\r\n const scrollElement = this.getScrollElement();\r\n if (scrollElement && this.oldParentScrollOverflow) {\r\n scrollElement.style['overflow-y'] = this.oldParentScrollOverflow.y;\r\n scrollElement.style['overflow-x'] = this.oldParentScrollOverflow.x;\r\n }\r\n\r\n this.oldParentScrollOverflow = undefined;\r\n }\r\n\r\n @Input()\r\n public get parentScroll(): Element | Window {\r\n return this._parentScroll;\r\n }\r\n public set parentScroll(value: Element | Window) {\r\n if (this._parentScroll === value) {\r\n return;\r\n }\r\n\r\n this.revertParentOverscroll();\r\n this._parentScroll = value;\r\n this.addScrollEventHandlers();\r\n\r\n const scrollElement = this.getScrollElement();\r\n if (this.modifyOverflowStyleOfParentScroll && scrollElement !== this.element.nativeElement) {\r\n this.oldParentScrollOverflow = { x: scrollElement.style['overflow-x'], y: scrollElement.style['overflow-y'] };\r\n scrollElement.style['overflow-y'] = this.horizontal ? 'visible' : 'auto';\r\n scrollElement.style['overflow-x'] = this.horizontal ? 'auto' : 'visible';\r\n }\r\n }\r\n\r\n constructor(\r\n protected readonly element: ElementRef,\r\n protected readonly renderer: Renderer2,\r\n protected readonly zone: NgZone,\r\n protected changeDetectorRef: ChangeDetectorRef,\r\n @Inject(PLATFORM_ID) platformId: object,\r\n @Optional() @Inject('virtual-scroller-default-options')\r\n options: VirtualScrollerDefaultOptions\r\n ) {\r\n\r\n this.isAngularUniversalSSR = isPlatformServer(platformId);\r\n\r\n this.checkResizeInterval = options.checkResizeInterval;\r\n this.modifyOverflowStyleOfParentScroll = options.modifyOverflowStyleOfParentScroll;\r\n this.resizeBypassRefreshThreshold = options.resizeBypassRefreshThreshold;\r\n this.scrollAnimationTime = options.scrollAnimationTime;\r\n this.scrollDebounceTime = options.scrollDebounceTime;\r\n this.scrollThrottlingTime = options.scrollThrottlingTime;\r\n this.scrollbarHeight = options.scrollbarHeight;\r\n this.scrollbarWidth = options.scrollbarWidth;\r\n this.stripedTable = options.stripedTable;\r\n\r\n this.horizontal = false;\r\n this.resetWrapGroupDimensions();\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.addScrollEventHandlers();\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.removeScrollEventHandlers();\r\n this.revertParentOverscroll();\r\n }\r\n\r\n public ngOnChanges(changes: any): void {\r\n const indexLengthChanged = this.cachedItemsLength !== this.items.length;\r\n this.cachedItemsLength = this.items.length;\r\n\r\n const firstRun: boolean = !changes.items || !changes.items.previousValue || changes.items.previousValue.length === 0;\r\n this.refresh_internal(indexLengthChanged || firstRun);\r\n }\r\n\r\n public ngDoCheck(): void {\r\n if (this.cachedItemsLength !== this.items.length) {\r\n this.cachedItemsLength = this.items.length;\r\n this.refresh_internal(true);\r\n return;\r\n }\r\n\r\n if (this.previousViewPort && this.viewPortItems && this.viewPortItems.length > 0) {\r\n let itemsArrayChanged = false;\r\n for (let i = 0; i < this.viewPortItems.length; ++i) {\r\n if (!this.compareItems(this.items[this.previousViewPort.startIndexWithBuffer + i], this.viewPortItems[i])) {\r\n itemsArrayChanged = true;\r\n break;\r\n }\r\n }\r\n if (itemsArrayChanged) {\r\n this.refresh_internal(true);\r\n }\r\n }\r\n }\r\n\r\n public refresh(): void {\r\n this.refresh_internal(true);\r\n }\r\n\r\n public invalidateAllCachedMeasurements(): void {\r\n this.wrapGroupDimensions = {\r\n maxChildSizePerWrapGroup: [],\r\n numberOfKnownWrapGroupChildSizes: 0,\r\n sumOfKnownWrapGroupChildWidths: 0,\r\n sumOfKnownWrapGroupChildHeights: 0\r\n };\r\n\r\n this.minMeasuredChildWidth = undefined;\r\n this.minMeasuredChildHeight = undefined;\r\n\r\n this.refresh_internal(false);\r\n }\r\n\r\n public invalidateCachedMeasurementForItem(item: any): void {\r\n if (this.enableUnequalChildrenSizes) {\r\n const index = this.items && this.items.indexOf(item);\r\n if (index >= 0) {\r\n this.invalidateCachedMeasurementAtIndex(index);\r\n }\r\n } else {\r\n this.minMeasuredChildWidth = undefined;\r\n this.minMeasuredChildHeight = undefined;\r\n }\r\n\r\n this.refresh_internal(false);\r\n }\r\n\r\n public invalidateCachedMeasurementAtIndex(index: number): void {\r\n if (this.enableUnequalChildrenSizes) {\r\n const cachedMeasurement = this.wrapGroupDimensions.maxChildSizePerWrapGroup[index];\r\n if (cachedMeasurement) {\r\n this.wrapGroupDimensions.maxChildSizePerWrapGroup[index] = undefined;\r\n --this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths -= cachedMeasurement.childWidth || 0;\r\n this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights -= cachedMeasurement.childHeight || 0;\r\n }\r\n } else {\r\n this.minMeasuredChildWidth = undefined;\r\n this.minMeasuredChildHeight = undefined;\r\n }\r\n\r\n this.refresh_internal(false);\r\n }\r\n\r\n public scrollInto(item: any, alignToBeginning = true, additionalOffset = 0, animationMilliseconds: number, animationCompletedCallback: () => void): void {\r\n const index: number = this.items.indexOf(item);\r\n if (index === -1) {\r\n return;\r\n }\r\n\r\n this.scrollToIndex(index, alignToBeginning, additionalOffset, animationMilliseconds, animationCompletedCallback);\r\n }\r\n\r\n public scrollToIndex(index: number, alignToBeginning = true, additionalOffset = 0, animationMilliseconds: number, animationCompletedCallback: () => void): void {\r\n let maxRetries = 5;\r\n\r\n const retryIfNeeded = () => {\r\n --maxRetries;\r\n if (maxRetries <= 0) {\r\n if (animationCompletedCallback) {\r\n animationCompletedCallback();\r\n }\r\n return;\r\n }\r\n\r\n const dimensions = this.calculateDimensions();\r\n const desiredStartIndex = Math.min(Math.max(index, 0), dimensions.itemCount - 1);\r\n if (this.previousViewPort.startIndex === desiredStartIndex) {\r\n if (animationCompletedCallback) {\r\n animationCompletedCallback();\r\n }\r\n return;\r\n }\r\n\r\n this.scrollToIndex_internal(index, alignToBeginning, additionalOffset, 0, retryIfNeeded);\r\n };\r\n\r\n this.scrollToIndex_internal(index, alignToBeginning, additionalOffset, animationMilliseconds, retryIfNeeded);\r\n }\r\n\r\n protected scrollToIndex_internal(index: number, alignToBeginning = true, additionalOffset = 0, animationMilliseconds: number, animationCompletedCallback: () => void): void {\r\n animationMilliseconds = animationMilliseconds === undefined ? this.scrollAnimationTime : animationMilliseconds;\r\n\r\n const dimensions = this.calculateDimensions();\r\n let scroll = this.calculatePadding(index, dimensions) + additionalOffset;\r\n if (!alignToBeginning) {\r\n scroll -= dimensions.wrapGroupsPerPage * dimensions[this._childScrollDim];\r\n }\r\n\r\n this.scrollToPosition(scroll, animationMilliseconds, animationCompletedCallback);\r\n }\r\n\r\n public scrollToPosition(scrollPosition: number, animationMilliseconds: number, animationCompletedCallback: () => void): void {\r\n scrollPosition += this.getElementsOffset();\r\n\r\n animationMilliseconds = animationMilliseconds === undefined ? this.scrollAnimationTime : animationMilliseconds;\r\n\r\n const scrollElement = this.getScrollElement();\r\n\r\n let animationRequest: number;\r\n\r\n if (this.currentTween) {\r\n this.currentTween.stop();\r\n this.currentTween = undefined;\r\n }\r\n\r\n if (!animationMilliseconds) {\r\n this.renderer.setProperty(scrollElement, this._scrollType, scrollPosition);\r\n this.refresh_internal(false, animationCompletedCallback);\r\n return;\r\n }\r\n\r\n const tweenConfigObj = { scrollPosition: scrollElement[this._scrollType] };\r\n\r\n const newTween = new tween.Tween(tweenConfigObj)\r\n .to({ scrollPosition }, animationMilliseconds)\r\n .easing(tween.Easing.Quadratic.Out)\r\n .onUpdate((data) => {\r\n if (isNaN(data.scrollPosition)) {\r\n return;\r\n }\r\n this.renderer.setProperty(scrollElement, this._scrollType, data.scrollPosition);\r\n this.refresh_internal(false);\r\n })\r\n .onStop(() => {\r\n cancelAnimationFrame(animationRequest);\r\n })\r\n .start();\r\n\r\n const animate = (time?: number) => {\r\n if (!newTween['isPlaying']()) {\r\n return;\r\n }\r\n\r\n newTween.update(time);\r\n if (tweenConfigObj.scrollPosition === scrollPosition) {\r\n this.refresh_internal(false, animationCompletedCallback);\r\n return;\r\n }\r\n\r\n this.zone.runOutsideAngular(() => {\r\n animationRequest = requestAnimationFrame(animate);\r\n });\r\n };\r\n\r\n animate();\r\n this.currentTween = newTween;\r\n }\r\n\r\n protected getElementSize(element: HTMLElement): DOMRect {\r\n const result = element.getBoundingClientRect();\r\n const styles = getComputedStyle(element);\r\n const marginTop = parseInt(styles['margin-top'], 10) || 0;\r\n const marginBottom = parseInt(styles['margin-bottom'], 10) || 0;\r\n const marginLeft = parseInt(styles['margin-left'], 10) || 0;\r\n const marginRight = parseInt(styles['margin-right'], 10) || 0;\r\n\r\n return {\r\n x: result.x,\r\n y: result.y,\r\n top: result.top + marginTop,\r\n bottom: result.bottom + marginBottom,\r\n left: result.left + marginLeft,\r\n right: result.right + marginRight,\r\n width: result.width + marginLeft + marginRight,\r\n height: result.height + marginTop + marginBottom,\r\n toJSON: () => { }\r\n };\r\n }\r\n\r\n protected checkScrollElementResized(): void {\r\n const boundingRect = this.getElementSize(this.getScrollElement());\r\n\r\n let sizeChanged: boolean;\r\n if (!this.previousScrollBoundingRect) {\r\n sizeChanged = true;\r\n } else {\r\n const widthChange = Math.abs(boundingRect.width - this.previousScrollBoundingRect.width);\r\n const heightChange = Math.abs(boundingRect.height - this.previousScrollBoundingRect.height);\r\n sizeChanged = widthChange > this.resizeBypassRefreshThreshold || heightChange > this.resizeBypassRefreshThreshold;\r\n }\r\n\r\n if (sizeChanged) {\r\n this.previousScrollBoundingRect = boundingRect;\r\n if (boundingRect.width > 0 && boundingRect.height > 0) {\r\n this.refresh_internal(false);\r\n }\r\n }\r\n }\r\n\r\n protected updateDirection(): void {\r\n if (this.horizontal) {\r\n this._childScrollDim = 'childWidth';\r\n this._invisiblePaddingProperty = 'scaleX';\r\n this._marginDir = 'margin-left';\r\n this._offsetType = 'offsetLeft';\r\n this._pageOffsetType = 'pageXOffset';\r\n this._scrollType = 'scrollLeft';\r\n this._translateDir = 'translateX';\r\n }\r\n else {\r\n this._childScrollDim = 'childHeight';\r\n this._invisiblePaddingProperty = 'scaleY';\r\n this._marginDir = 'margin-top';\r\n this._offsetType = 'offsetTop';\r\n this._pageOffsetType = 'pageYOffset';\r\n this._scrollType = 'scrollTop';\r\n this._translateDir = 'translateY';\r\n }\r\n }\r\n\r\n protected debounce(func: Function, wait: number): () => void {\r\n const throttled = this.throttleTrailing(func, wait);\r\n const result = () => {\r\n throttled['cancel']();\r\n throttled.apply(this, arguments);\r\n };\r\n result['cancel'] = () => {\r\n throttled['cancel']();\r\n };\r\n\r\n return result;\r\n }\r\n\r\n protected throttleTrailing(func: Function, wait: number): () => void {\r\n let timeout;\r\n let _arguments = arguments;\r\n const result = () => {\r\n const _this = this;\r\n _arguments = arguments;\r\n\r\n if (timeout) {\r\n return;\r\n }\r\n\r\n if (wait <= 0) {\r\n func.apply(_this, _arguments);\r\n } else {\r\n timeout = setTimeout(() => {\r\n timeout = undefined;\r\n func.apply(_this, _arguments);\r\n }, wait);\r\n }\r\n };\r\n result['cancel'] = () => {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n timeout = undefined;\r\n }\r\n };\r\n\r\n return result;\r\n }\r\n\r\n protected refresh_internal(itemsArrayModified: boolean, refreshCompletedCallback?: () => void, maxRunTimes: number = 2): void {\r\n // note: maxRunTimes is to force it to keep recalculating if the previous iteration caused a re-render (different sliced items in viewport or scrollPosition changed).\r\n // The default of 2x max will probably be accurate enough without causing too large a performance bottleneck\r\n // The code would typically quit out on the 2nd iteration anyways. The main time it'd think more than 2 runs would be necessary would be for vastly\r\n // different sized child items or if this is the 1st time the items array was initialized.\r\n // Without maxRunTimes, If the user is actively scrolling this code would become an infinite loop until they stopped scrolling.\r\n // This would be okay, except each scroll event would start an additional infinte loop. We want to short-circuit it to prevent this.\r\n\r\n if (itemsArrayModified && this.previousViewPort && this.previousViewPort.scrollStartPosition > 0) {\r\n // if items were prepended, scroll forward to keep same items visible\r\n const oldViewPort = this.previousViewPort;\r\n const oldViewPortItems = this.viewPortItems;\r\n\r\n const oldRefreshCompletedCallback = refreshCompletedCallback;\r\n refreshCompletedCallback = () => {\r\n const scrollLengthDelta = this.previousViewPort.scrollLength - oldViewPort.scrollLength;\r\n if (scrollLengthDelta > 0 && this.viewPortItems) {\r\n const oldStartItem = oldViewPortItems[0];\r\n const oldStartItemIndex = this.items.findIndex(x => this.compareItems(oldStartItem, x));\r\n if (oldStartItemIndex > this.previousViewPort.startIndexWithBuffer) {\r\n let itemOrderChanged = false;\r\n for (let i = 1; i < this.viewPortItems.length; ++i) {\r\n if (!this.compareItems(this.items[oldStartItemIndex + i], oldViewPortItems[i])) {\r\n itemOrderChanged = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!itemOrderChanged) {\r\n this.scrollToPosition(this.previousViewPort.scrollStartPosition + scrollLengthDelta, 0, oldRefreshCompletedCallback);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (oldRefreshCompletedCallback) {\r\n oldRefreshCompletedCallback();\r\n }\r\n };\r\n }\r\n\r\n this.zone.runOutsideAngular(() => {\r\n requestAnimationFrame(() => {\r\n\r\n if (itemsArrayModified) {\r\n this.resetWrapGroupDimensions();\r\n }\r\n const viewport = this.calculateViewport();\r\n\r\n const startChanged = itemsArrayModified || viewport.startIndex !== this.previousViewPort.startIndex;\r\n const endChanged = itemsArrayModified || viewport.endIndex !== this.previousViewPort.endIndex;\r\n const scrollLengthChanged = viewport.scrollLength !== this.previousViewPort.scrollLength;\r\n const paddingChanged = viewport.padding !== this.previousViewPort.padding;\r\n const scrollPositionChanged = viewport.scrollStartPosition !== this.previousViewPort.scrollStartPosition ||\r\n viewport.scrollEndPosition !== this.previousViewPort.scrollEndPosition || viewport.maxScrollPosition !== this.previousViewPort.maxScrollPosition;\r\n\r\n this.previousViewPort = viewport;\r\n\r\n if (scrollLengthChanged) {\r\n this.renderer.setStyle(this.invisiblePaddingElementRef.nativeElement, 'transform', `${this._invisiblePaddingProperty}(${viewport.scrollLength})`);\r\n this.renderer.setStyle(this.invisiblePaddingElementRef.nativeElement, 'webkitTransform', `${this._invisiblePaddingProperty}(${viewport.scrollLength})`);\r\n this.vsScrollLenghtChange.emit(viewport.scrollLength);\r\n }\r\n\r\n if (paddingChanged) {\r\n if (this.useMarginInsteadOfTranslate) {\r\n this.renderer.setStyle(this.contentElementRef.nativeElement, this._marginDir, `${viewport.padding}px`);\r\n }\r\n else {\r\n this.renderer.setStyle(this.contentElementRef.nativeElement, 'transform', `${this._translateDir}(${viewport.padding}px)`);\r\n this.renderer.setStyle(this.contentElementRef.nativeElement, 'webkitTransform', `${this._translateDir}(${viewport.padding}px)`);\r\n }\r\n }\r\n\r\n if (this.headerElementRef) {\r\n const scrollPosition = this.getScrollElement()[this._scrollType];\r\n const containerOffset = this.getElementsOffset();\r\n const offset = Math.max(scrollPosition - viewport.padding - containerOffset + this.headerElementRef.nativeElement.clientHeight, 0);\r\n this.renderer.setStyle(this.headerElementRef.nativeElement, 'transform', `${this._translateDir}(${offset}px)`);\r\n this.renderer.setStyle(this.headerElementRef.nativeElement, 'webkitTransform', `${this._translateDir}(${offset}px)`);\r\n }\r\n\r\n const changeEventArg: IPageInfo = (startChanged || endChanged) ? {\r\n startIndex: viewport.startIndex,\r\n endIndex: viewport.endIndex,\r\n scrollStartPosition: viewport.scrollStartPosition,\r\n scrollEndPosition: viewport.scrollEndPosition,\r\n startIndexWithBuffer: viewport.startIndexWithBuffer,\r\n endIndexWithBuffer: viewport.endIndexWithBuffer,\r\n maxScrollPosition: viewport.maxScrollPosition,\r\n scrollLength: viewport.scrollLength\r\n } : undefined;\r\n\r\n\r\n if (startChanged || endChanged || scrollPositionChanged) {\r\n const handleChanged = () => {\r\n // update the scroll list to trigger re-render of components in viewport\r\n this.viewPortItems = viewport.startIndexWithBuffer >= 0 && viewport.endIndexWithBuffer >= 0 ?\r\n this.items.slice(viewport.startIndexWithBuffer, viewport.endIndexWithBuffer + 1) : [];\r\n this.vsUpdate.emit(this.viewPortItems);\r\n\r\n if (startChanged) {\r\n this.vsStart.emit(changeEventArg);\r\n }\r\n\r\n if (endChanged) {\r\n this.vsEnd.emit(changeEventArg);\r\n }\r\n\r\n if (startChanged || endChanged) {\r\n this.changeDetectorRef.markForCheck();\r\n this.vsChange.emit(changeEventArg);\r\n }\r\n\r\n if (maxRunTimes > 0) {\r\n this.refresh_internal(false, refreshCompletedCallback, maxRunTimes - 1);\r\n return;\r\n }\r\n\r\n if (refreshCompletedCallback) {\r\n refreshCompletedCallback();\r\n }\r\n };\r\n\r\n\r\n if (this.executeRefreshOutsideAngularZone) {\r\n handleChanged();\r\n }\r\n else {\r\n this.zone.run(handleChanged);\r\n }\r\n } else {\r\n if (maxRunTimes > 0 && (scrollLengthChanged || paddingChanged)) {\r\n this.refresh_internal(false, refreshCompletedCallback, maxRunTimes - 1);\r\n return;\r\n }\r\n\r\n if (refreshCompletedCallback) {\r\n refreshCompletedCallback();\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n protected getScrollElement(): HTMLElement {\r\n return this.parentScroll instanceof Window ? document.scrollingElement || document.documentElement || document.body : this.parentScroll || this.element.nativeElement;\r\n }\r\n\r\n protected addScrollEventHandlers(): void {\r\n if (this.isAngularUniversalSSR) {\r\n return;\r\n }\r\n\r\n const scrollElement = this.getScrollElement();\r\n\r\n this.removeScrollEventHandlers();\r\n\r\n this.zone.runOutsideAngular(() => {\r\n if (this.parentScroll instanceof Window) {\r\n this.disposeScrollHandler = this.renderer.listen('window', 'scroll', this.onScroll);\r\n this.disposeResizeHandler = this.renderer.listen('window', 'resize', this.onScroll);\r\n }\r\n else {\r\n this.disposeScrollHandler = this.renderer.listen(scrollElement, 'scroll', this.onScroll);\r\n if (this._checkResizeInterval > 0) {\r\n this.checkScrollElementResizedTimer = setInterval(() => { this.checkScrollElementResized(); }, this._checkResizeInterval) as any;\r\n }\r\n }\r\n });\r\n }\r\n\r\n protected removeScrollEventHandlers(): void {\r\n if (this.checkScrollElementResizedTimer) {\r\n clearInterval(this.checkScrollElementResizedTimer);\r\n }\r\n\r\n if (this.disposeScrollHandler) {\r\n this.disposeScrollHandler();\r\n this.disposeScrollHandler = undefined;\r\n }\r\n\r\n if (this.disposeResizeHandler) {\r\n this.disposeResizeHandler();\r\n this.disposeResizeHandler = undefined;\r\n }\r\n }\r\n\r\n protected getElementsOffset(): number {\r\n if (this.isAngularUniversalSSR) {\r\n return 0;\r\n }\r\n\r\n let offset = 0;\r\n\r\n if (this.containerElementRef && this.containerElementRef.nativeElement) {\r\n offset += this.containerElementRef.nativeElement[this._offsetType];\r\n }\r\n\r\n if (this.parentScroll) {\r\n const scrollElement = this.getScrollElement();\r\n const elementClientRect = this.getElementSize(this.element.nativeElement);\r\n const scrollClientRect = this.getElementSize(scrollElement);\r\n if (this.horizontal) {\r\n offset += elementClientRect.left - scrollClientRect.left;\r\n }\r\n else {\r\n offset += elementClientRect.top - scrollClientRect.top;\r\n }\r\n\r\n if (!(this.parentScroll instanceof Window)) {\r\n offset += scrollElement[this._scrollType];\r\n }\r\n }\r\n\r\n return offset;\r\n }\r\n\r\n protected countItemsPerWrapGroup(): number {\r\n if (this.isAngularUniversalSSR) {\r\n return Math.round(this.horizontal ? this.ssrViewportHeight / this.ssrChildHeight : this.ssrViewportWidth / this.ssrChildWidth);\r\n }\r\n\r\n const propertyName = this.horizontal ? 'offsetLeft' : 'offsetTop';\r\n const children = ((this.containerElementRef && this.containerElementRef.nativeElement) || this.contentElementRef.nativeElement).children;\r\n\r\n const childrenLength = children ? children.length : 0;\r\n if (childrenLength === 0) {\r\n return 1;\r\n }\r\n\r\n const firstOffset = children[0][propertyName];\r\n let result = 1;\r\n while (result < childrenLength && firstOffset === children[result][propertyName]) {\r\n ++result;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n protected getScrollStartPosition(): number {\r\n let windowScrollValue;\r\n if (this.parentScroll instanceof Window) {\r\n windowScrollValue = window[this._pageOffsetType];\r\n }\r\n\r\n return windowScrollValue || this.getScrollElement()[this._scrollType] || 0;\r\n }\r\n\r\n protected resetWrapGroupDimensions(): void {\r\n const oldWrapGroupDimensions = this.wrapGroupDimensions;\r\n this.invalidateAllCachedMeasurements();\r\n\r\n if (!this.enableUnequalChildrenSizes || !oldWrapGroupDimensions || oldWrapGroupDimensions.numberOfKnownWrapGroupChildSizes === 0) {\r\n return;\r\n }\r\n\r\n const itemsPerWrapGroup: number = this.countItemsPerWrapGroup();\r\n for (let wrapGroupIndex = 0; wrapGroupIndex < oldWrapGroupDimensions.maxChildSizePerWrapGroup.length; ++wrapGroupIndex) {\r\n const oldWrapGroupDimension: WrapGroupDimension = oldWrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex];\r\n if (!oldWrapGroupDimension || !oldWrapGroupDimension.items || !oldWrapGroupDimension.items.length) {\r\n continue;\r\n }\r\n\r\n if (oldWrapGroupDimension.items.length !== itemsPerWrapGroup) {\r\n return;\r\n }\r\n\r\n let itemsChanged = false;\r\n const arrayStartIndex = itemsPerWrapGroup * wrapGroupIndex;\r\n for (let i = 0; i < itemsPerWrapGroup; ++i) {\r\n if (!this.compareItems(oldWrapGroupDimension.items[i], this.items[arrayStartIndex + i])) {\r\n itemsChanged = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!itemsChanged) {\r\n ++this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths += oldWrapGroupDimension.childWidth || 0;\r\n this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights += oldWrapGroupDimension.childHeight || 0;\r\n this.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex] = oldWrapGroupDimension;\r\n }\r\n }\r\n }\r\n\r\n protected calculateDimensions(): IDimensions {\r\n const scrollElement = this.getScrollElement();\r\n\r\n const maxCalculatedScrollBarSize = 25; // Note: Formula to auto-calculate doesn't work for ParentScroll, so we default to this if not set by consuming application\r\n this.calculatedScrollbarHeight = Math.max(Math.min(scrollElement.offsetHeight - scrollElement.clientHeight, maxCalculatedScrollBarSize), this.calculatedScrollbarHeight);\r\n this.calculatedScrollbarWidth = Math.max(Math.min(scrollElement.offsetWidth - scrollElement.clientWidth, maxCalculatedScrollBarSize), this.calculatedScrollbarWidth);\r\n\r\n let viewportWidth = scrollElement.offsetWidth - (this.scrollbarWidth || this.calculatedScrollbarWidth || (this.horizontal ? 0 : maxCalculatedScrollBarSize));\r\n let viewportHeight = scrollElement.offsetHeight - (this.scrollbarHeight || this.calculatedScrollbarHeight || (this.horizontal ? maxCalculatedScrollBarSize : 0));\r\n\r\n const content = (this.containerElementRef && this.containerElementRef.nativeElement) || this.contentElementRef.nativeElement;\r\n\r\n const itemsPerWrapGroup = this.countItemsPerWrapGroup();\r\n let wrapGroupsPerPage;\r\n\r\n let defaultChildWidth;\r\n let defaultChildHeight;\r\n\r\n if (this.isAngularUniversalSSR) {\r\n viewportWidth = this.ssrViewportWidth;\r\n viewportHeight = this.ssrViewportHeight;\r\n defaultChildWidth = this.ssrChildWidth;\r\n defaultChildHeight = this.ssrChildHeight;\r\n const itemsPerRow = Math.max(Math.ceil(viewportWidth / defaultChildWidth), 1);\r\n const itemsPerCol = Math.max(Math.ceil(viewportHeight / defaultChildHeight), 1);\r\n wrapGroupsPerPage = this.horizontal ? itemsPerRow : itemsPerCol;\r\n }\r\n else if (!this.enableUnequalChildrenSizes) {\r\n if (content.children.length > 0) {\r\n if (!this.childWidth || !this.childHeight) {\r\n if (!this.minMeasuredChildWidth && viewportWidth > 0) {\r\n this.minMeasuredChildWidth = viewportWidth;\r\n }\r\n if (!this.minMeasuredChildHeight && viewportHeight > 0) {\r\n this.minMeasuredChildHeight = viewportHeight;\r\n }\r\n }\r\n\r\n const child = content.children[0];\r\n const clientRect = this.getElementSize(child);\r\n this.minMeasuredChildWidth = Math.min(this.minMeasuredChildWidth, clientRect.width);\r\n this.minMeasuredChildHeight = Math.min(this.minMeasuredChildHeight, clientRect.height);\r\n }\r\n\r\n defaultChildWidth = this.childWidth || this.minMeasuredChildWidth || viewportWidth;\r\n defaultChildHeight = this.childHeight || this.minMeasuredChildHeight || viewportHeight;\r\n const itemsPerRow = Math.max(Math.ceil(viewportWidth / defaultChildWidth), 1);\r\n const itemsPerCol = Math.max(Math.ceil(viewportHeight / defaultChildHeight), 1);\r\n wrapGroupsPerPage = this.horizontal ? itemsPerRow : itemsPerCol;\r\n } else {\r\n let scrollOffset = scrollElement[this._scrollType] - (this.previousViewPort ? this.previousViewPort.padding : 0);\r\n\r\n let arrayStartIndex = this.previousViewPort.startIndexWithBuffer || 0;\r\n let wrapGroupIndex = Math.ceil(arrayStartIndex / itemsPerWrapGroup);\r\n\r\n let maxWidthForWrapGroup = 0;\r\n let maxHeightForWrapGroup = 0;\r\n let sumOfVisibleMaxWidths = 0;\r\n let sumOfVisibleMaxHeights = 0;\r\n wrapGroupsPerPage = 0;\r\n\r\n for (const child of content.children) {\r\n ++arrayStartIndex;\r\n const clientRect = this.getElementSize(child);\r\n\r\n maxWidthForWrapGroup = Math.max(maxWidthForWrapGroup, clientRect.width);\r\n maxHeightForWrapGroup = Math.max(maxHeightForWrapGroup, clientRect.height);\r\n\r\n if (arrayStartIndex % itemsPerWrapGroup === 0) {\r\n const oldValue = this.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex];\r\n if (oldValue) {\r\n --this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths -= oldValue.childWidth || 0;\r\n this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights -= oldValue.childHeight || 0;\r\n }\r\n\r\n ++this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n const items = this.items.slice(arrayStartIndex - itemsPerWrapGroup, arrayStartIndex);\r\n this.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex] = {\r\n childWidth: maxWidthForWrapGroup,\r\n childHeight: maxHeightForWrapGroup,\r\n items: items\r\n };\r\n this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths += maxWidthForWrapGroup;\r\n this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights += maxHeightForWrapGroup;\r\n\r\n if (this.horizontal) {\r\n let maxVisibleWidthForWrapGroup = Math.min(maxWidthForWrapGroup, Math.max(viewportWidth - sumOfVisibleMaxWidths, 0));\r\n if (scrollOffset > 0) {\r\n const scrollOffsetToRemove = Math.min(scrollOffset, maxVisibleWidthForWrapGroup);\r\n maxVisibleWidthForWrapGroup -= scrollOffsetToRemove;\r\n scrollOffset -= scrollOffsetToRemove;\r\n }\r\n\r\n sumOfVisibleMaxWidths += maxVisibleWidthForWrapGroup;\r\n if (maxVisibleWidthForWrapGroup > 0 && viewportWidth >= sumOfVisibleMaxWidths) {\r\n ++wrapGroupsPerPage;\r\n }\r\n } else {\r\n let maxVisibleHeightForWrapGroup = Math.min(maxHeightForWrapGroup, Math.max(viewportHeight - sumOfVisibleMaxHeights, 0));\r\n if (scrollOffset > 0) {\r\n const scrollOffsetToRemove = Math.min(scrollOffset, maxVisibleHeightForWrapGroup);\r\n maxVisibleHeightForWrapGroup -= scrollOffsetToRemove;\r\n scrollOffset -= scrollOffsetToRemove;\r\n }\r\n\r\n sumOfVisibleMaxHeights += maxVisibleHeightForWrapGroup;\r\n if (maxVisibleHeightForWrapGroup > 0 && viewportHeight >= sumOfVisibleMaxHeights) {\r\n ++wrapGroupsPerPage;\r\n }\r\n }\r\n\r\n ++wrapGroupIndex;\r\n\r\n maxWidthForWrapGroup = 0;\r\n maxHeightForWrapGroup = 0;\r\n }\r\n }\r\n\r\n const averageChildWidth = this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths / this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n const averageChildHeight = this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights / this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n defaultChildWidth = this.childWidth || averageChildWidth || viewportWidth;\r\n defaultChildHeight = this.childHeight || averageChildHeight || viewportHeight;\r\n\r\n if (this.horizontal) {\r\n if (viewportWidth > sumOfVisibleMaxWidths) {\r\n wrapGroupsPerPage += Math.ceil((viewportWidth - sumOfVisibleMaxWidths) / defaultChildWidth);\r\n }\r\n } else {\r\n if (viewportHeight > sumOfVisibleMaxHeights) {\r\n wrapGroupsPerPage += Math.ceil((viewportHeight - sumOfVisibleMaxHeights) / defaultChildHeight);\r\n }\r\n }\r\n }\r\n\r\n const itemCount = this.items.length;\r\n const itemsPerPage = itemsPerWrapGroup * wrapGroupsPerPage;\r\n let pageCount_fractional = itemCount / itemsPerPage;\r\n const numberOfWrapGroups = Math.ceil(itemCount / itemsPerWrapGroup);\r\n\r\n let scrollLength = 0;\r\n\r\n const defaultScrollLengthPerWrapGroup = this.horizontal ? defaultChildWidth : defaultChildHeight;\r\n if (this.enableUnequalChildrenSizes) {\r\n let numUnknownChildSizes = 0;\r\n for (let i = 0; i < numberOfWrapGroups; ++i) {\r\n const childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\r\n if (childSize) {\r\n scrollLength += childSize;\r\n } else {\r\n ++numUnknownChildSizes;\r\n }\r\n }\r\n\r\n scrollLength += Math.round(numUnknownChildSizes * defaultScrollLengthPerWrapGroup);\r\n } else {\r\n scrollLength = numberOfWrapGroups * defaultScrollLengthPerWrapGroup;\r\n }\r\n\r\n if (this.headerElementRef) {\r\n scrollLength += this.headerElementRef.nativeElement.clientHeight;\r\n }\r\n\r\n const viewportLength = this.horizontal ? viewportWidth : viewportHeight;\r\n const maxScrollPosition = Math.max(scrollLength - viewportLength, 0);\r\n\r\n return {\r\n childHeight: defaultChildHeight,\r\n childWidth: defaultChildWidth,\r\n itemCount: itemCount,\r\n itemsPerPage: itemsPerPage,\r\n itemsPerWrapGroup: itemsPerWrapGroup,\r\n maxScrollPosition: maxScrollPosition,\r\n pageCount_fractional: pageCount_fractional,\r\n scrollLength: scrollLength,\r\n viewportLength: viewportLength,\r\n wrapGroupsPerPage: wrapGroupsPerPage,\r\n };\r\n }\r\n\r\n protected calculatePadding(arrayStartIndexWithBuffer: number, dimensions: IDimensions): number {\r\n if (dimensions.itemCount === 0) {\r\n return 0;\r\n }\r\n\r\n const defaultScrollLengthPerWrapGroup = dimensions[this._childScrollDim];\r\n const startingWrapGroupIndex = Math.floor(arrayStartIndexWithBuffer / dimensions.itemsPerWrapGroup) || 0;\r\n\r\n if (!this.enableUnequalChildrenSizes) {\r\n return defaultScrollLengthPerWrapGroup * startingWrapGroupIndex;\r\n }\r\n\r\n let numUnknownChildSizes = 0;\r\n let result = 0;\r\n for (let i = 0; i < startingWrapGroupIndex; ++i) {\r\n const childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\r\n if (childSize) {\r\n result += childSize;\r\n } else {\r\n ++numUnknownChildSizes;\r\n }\r\n }\r\n result += Math.round(numUnknownChildSizes * defaultScrollLengthPerWrapGroup);\r\n\r\n return result;\r\n }\r\n\r\n protected calculatePageInfo(scrollPosition: number, dimensions: IDimensions): IPageInfo {\r\n let scrollPercentage = 0;\r\n if (this.enableUnequalChildrenSizes) {\r\n const numberOfWrapGroups = Math.ceil(dimensions.itemCount / dimensions.itemsPerWrapGroup);\r\n let totalScrolledLength = 0;\r\n const defaultScrollLengthPerWrapGroup = dimensions[this._childScrollDim];\r\n for (let i = 0; i < numberOfWrapGroups; ++i) {\r\n const childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\r\n if (childSize) {\r\n totalScrolledLength += childSize;\r\n } else {\r\n totalScrolledLength += defaultScrollLengthPerWrapGroup;\r\n }\r\n\r\n if (scrollPosition < totalScrolledLength) {\r\n scrollPercentage = i / numberOfWrapGroups;\r\n break;\r\n }\r\n }\r\n } else {\r\n scrollPercentage = scrollPosition / dimensions.scrollLength;\r\n }\r\n\r\n let startingArrayIndex_fractional = Math.min(Math.max(scrollPercentage * dimensions.pageCount_fractional, 0), dimensions.pageCount_fractional) * dimensions.itemsPerPage;\r\n\r\n const maxStart = dimensions.itemCount - dimensions.itemsPerPage - 1;\r\n let arrayStartIndex = Math.min(Math.floor(startingArrayIndex_fractional), maxStart);\r\n arrayStartIndex -= arrayStartIndex % dimensions.itemsPerWrapGroup; // round down to start of wrapGroup\r\n\r\n if (this.stripedTable) {\r\n const bufferBoundary = 2 * dimensions.itemsPerWrapGroup;\r\n if (arrayStartIndex % bufferBoundary !== 0) {\r\n arrayStartIndex = Math.max(arrayStartIndex - arrayStartIndex % bufferBoundary, 0);\r\n }\r\n }\r\n\r\n let arrayEndIndex = Math.ceil(startingArrayIndex_fractional) + dimensions.itemsPerPage - 1;\r\n const endIndexWithinWrapGroup = (arrayEndIndex + 1) % dimensions.itemsPerWrapGroup;\r\n if (endIndexWithinWrapGroup > 0) {\r\n arrayEndIndex += dimensions.itemsPerWrapGroup - endIndexWithinWrapGroup; // round up to end of wrapGroup\r\n }\r\n\r\n if (isNaN(arrayStartIndex)) {\r\n arrayStartIndex = 0;\r\n }\r\n if (isNaN(arrayEndIndex)) {\r\n arrayEndIndex = 0;\r\n }\r\n\r\n arrayStartIndex = Math.min(Math.max(arrayStartIndex, 0), dimensions.itemCount - 1);\r\n arrayEndIndex = Math.min(Math.max(arrayEndIndex, 0), dimensions.itemCount - 1);\r\n\r\n const bufferSize = this.bufferAmount * dimensions.itemsPerWrapGroup;\r\n const startIndexWithBuffer = Math.min(Math.max(arrayStartIndex - bufferSize, 0), dimensions.itemCount - 1);\r\n const endIndexWithBuffer = Math.min(Math.max(arrayEndIndex + bufferSize, 0), dimensions.itemCount - 1);\r\n\r\n return {\r\n startIndex: arrayStartIndex,\r\n endIndex: arrayEndIndex,\r\n startIndexWithBuffer: startIndexWithBuffer,\r\n endIndexWithBuffer: endIndexWithBuffer,\r\n scrollStartPosition: scrollPosition,\r\n scrollEndPosition: scrollPosition + dimensions.viewportLength,\r\n maxScrollPosition: dimensions.maxScrollPosition,\r\n scrollLength: dimensions.scrollLength,\r\n };\r\n }\r\n\r\n protected calculateViewport(): IViewport {\r\n const dimensions = this.calculateDimensions();\r\n const offset = this.getElementsOffset();\r\n\r\n let scrollStartPosition = this.getScrollStartPosition();\r\n if (scrollStartPosition > (dimensions.scrollLength + offset) && !(this.parentScroll instanceof Window)) {\r\n scrollStartPosition = dimensions.scrollLength;\r\n } else {\r\n scrollStartPosition -= offset;\r\n }\r\n scrollStartPosition = Math.max(0, scrollStartPosition);\r\n\r\n const pageInfo = this.calculatePageInfo(scrollStartPosition, dimensions);\r\n const newPadding = this.calculatePadding(pageInfo.startIndexWithBuffer, dimensions);\r\n const newScrollLength = dimensions.scrollLength;\r\n\r\n return {\r\n startIndex: pageInfo.startIndex,\r\n endIndex: pageInfo.endIndex,\r\n startIndexWithBuffer: pageInfo.startIndexWithBuffer,\r\n endIndexWithBuffer: pageInfo.endIndexWithBuffer,\r\n padding: Math.round(newPadding),\r\n scrollLength: Math.round(newScrollLength),\r\n scrollStartPosition: pageInfo.scrollStartPosition,\r\n scrollEndPosition: pageInfo.scrollEndPosition,\r\n maxScrollPosition: pageInfo.maxScrollPosition\r\n };\r\n }\r\n}\r\n\r\n@NgModule({\r\n exports: [VirtualScrollerComponent],\r\n imports: [CommonModule, VirtualScrollerComponent],\r\n providers: [\r\n {\r\n provide: 'virtual-scroller-default-options',\r\n useFactory: VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY\r\n }\r\n ]\r\n})\r\nexport class VirtualScrollerModule { }\r\n"],"mappings":"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","names":["Easing","amount","s","power","now","Group","_this","tweenId","tween","time","preserve","tweenIds","autoStart","Interpolation","v","k","m","f","fn","b","n","pw","bn","i","p0","p1","t","fc","a","p2","p3","v0","v1","t2","t3","Sequence","mainGroup","Tween","_object","_group","target","duration","dynamic","overrideStartingValues","property","tmp","prop","_valuesStart","_valuesEnd","_valuesStartRepeat","startValue","startValueIsArray","propType","isInterpolationList","endValues","temp","l","value","nestedObject","numChainedTweens","group","times","yoyo","easingFunction","interpolationFunction","tweens","_i","callback","elapsed","endTime","start","end","startIsArray","endIsArray","endValue","nextId","Sequence","TWEEN","mainGroup","getAll","removeAll","add","remove","update","VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY","checkResizeInterval","modifyOverflowStyleOfParentScroll","resizeBypassRefreshThreshold","scrollAnimationTime","scrollDebounceTime","scrollThrottlingTime","stripedTable","VirtualScrollerComponent","viewPortInfo","pageInfo","previousViewPort","startIndex","endIndex","scrollStartPosition","scrollEndPosition","maxScrollPosition","startIndexWithBuffer","endIndexWithBuffer","scrollLength","enableUnequalChildrenSizes","_enableUnequalChildrenSizes","value","minMeasuredChildWidth","undefined","minMeasuredChildHeight","bufferAmount","_bufferAmount","_scrollThrottlingTime","updateOnScrollFunction","_scrollDebounceTime","onScroll","debounce","refresh_internal","throttleTrailing","_checkResizeInterval","addScrollEventHandlers","items","_items","horizontal","_horizontal","updateDirection","revertParentOverscroll","scrollElement","getScrollElement","oldParentScrollOverflow","style","y","x","parentScroll","_parentScroll","element","nativeElement","constructor","renderer","zone","changeDetectorRef","platformId","options","window","executeRefreshOutsideAngularZone","RTL","useMarginInsteadOfTranslate","ssrViewportWidth","ssrViewportHeight","cachedPageSize","previousScrollNumberElements","calculatedScrollbarWidth","calculatedScrollbarHeight","padding","vsUpdate","EventEmitter","vsChange","vsScrollLenghtChange","vsStart","vsEnd","compareItems","item1","item2","isAngularUniversalSSR","isPlatformServer","scrollbarHeight","scrollbarWidth","resetWrapGroupDimensions","ngOnInit","ngOnDestroy","removeScrollEventHandlers","ngOnChanges","changes","indexLengthChanged","cachedItemsLength","length","firstRun","previousValue","ngDoCheck","viewPortItems","itemsArrayChanged","i","refresh","invalidateAllCachedMeasurements","wrapGroupDimensions","maxChildSizePerWrapGroup","numberOfKnownWrapGroupChildSizes","sumOfKnownWrapGroupChildWidths","sumOfKnownWrapGroupChildHeights","invalidateCachedMeasurementForItem","item","index","indexOf","invalidateCachedMeasurementAtIndex","cachedMeasurement","childWidth","childHeight","scrollInto","alignToBeginning","additionalOffset","animationMilliseconds","animationCompletedCallback","scrollToIndex","maxRetries","retryIfNeeded","dimensions","calculateDimensions","desiredStartIndex","Math","min","max","itemCount","scrollToIndex_internal","scroll","calculatePadding","wrapGroupsPerPage","_childScrollDim","scrollToPosition","scrollPosition","getElementsOffset","animationRequest","currentTween","stop","setProperty","_scrollType","tweenConfigObj","newTween","Tween","to","easing","Easing","Quadratic","Out","onUpdate","data","isNaN","onStop","cancelAnimationFrame","start","animate","time","update","runOutsideAngular","requestAnimationFrame","getElementSize","result","getBoundingClientRect","styles","getComputedStyle","marginTop","parseInt","marginBottom","marginLeft","marginRight","top","bottom","left","right","width","height","toJSON","checkScrollElementResized","boundingRect","sizeChanged","previousScrollBoundingRect","widthChange","abs","heightChange","_invisiblePaddingProperty","_marginDir","_offsetType","_pageOffsetType","_translateDir","func","wait","throttled","apply","arguments","timeout","_arguments","_this","setTimeout","clearTimeout","itemsArrayModified","refreshCompletedCallback","maxRunTimes","oldViewPort","oldViewPortItems","oldRefreshCompletedCallback","scrollLengthDelta","oldStartItem","oldStartItemIndex","findIndex","itemOrderChanged","viewport","calculateViewport","startChanged","endChanged","scrollLengthChanged","paddingChanged","scrollPositionChanged","setStyle","invisiblePaddingElementRef","emit","contentElementRef","headerElementRef","containerOffset","offset","clientHeight","changeEventArg","handleChanged","slice","markForCheck","run","Window","document","scrollingElement","documentElement","body","disposeScrollHandler","listen","disposeResizeHandler","checkScrollElementResizedTimer","setInterval","clearInterval","containerElementRef","elementClientRect","scrollClientRect","countItemsPerWrapGroup","round","ssrChildHeight","ssrChildWidth","propertyName","children","childrenLength","firstOffset","getScrollStartPosition","windowScrollValue","oldWrapGroupDimensions","itemsPerWrapGroup","wrapGroupIndex","oldWrapGroupDimension","itemsChanged","arrayStartIndex","maxCalculatedScrollBarSize","offsetHeight","offsetWidth","clientWidth","viewportWidth","viewportHeight","content","defaultChildWidth","defaultChildHeight","itemsPerRow","ceil","itemsPerCol","scrollOffset","maxWidthForWrapGroup","maxHeightForWrapGroup","sumOfVisibleMaxWidths","sumOfVisibleMaxHeights","child","clientRect","oldValue","maxVisibleWidthForWrapGroup","scrollOffsetToRemove","maxVisibleHeightForWrapGroup","averageChildWidth","averageChildHeight","itemsPerPage","pageCount_fractional","numberOfWrapGroups","defaultScrollLengthPerWrapGroup","numUnknownChildSizes","childSize","viewportLength","arrayStartIndexWithBuffer","startingWrapGroupIndex","floor","calculatePageInfo","scrollPercentage","totalScrolledLength","startingArrayIndex_fractional","maxStart","bufferBoundary","arrayEndIndex","endIndexWithinWrapGroup","bufferSize","newPadding","newScrollLength","ɵɵdirectiveInject","ElementRef","Renderer2","NgZone","ChangeDetectorRef","PLATFORM_ID","selectors","contentQueries","rf","ctx","dirIndex","ɵɵclassProp","ɵɵelement","ɵɵelementStart","ɵɵprojection","ɵɵelementEnd","_VirtualScrollerComponent","VirtualScrollerModule","provide","useFactory","imports","CommonModule","_VirtualScrollerModule"],"x_google_ignoreList":[0]}