{"version":3,"sources":["webpack:///./node_modules/lodash/_baseIteratee.js","webpack:///./node_modules/lodash/_createFind.js","webpack:///./node_modules/lodash/_baseFindIndex.js","webpack:///./node_modules/lodash/toInteger.js","webpack:///./node_modules/lodash/findLast.js","webpack:///./node_modules/lodash/isArrayLike.js","webpack:///./node_modules/lodash/isFunction.js","webpack:///./node_modules/lodash/isLength.js","webpack:///./node_modules/lodash/findLastIndex.js","webpack:///./node_modules/lodash/find.js","webpack:///./node_modules/lodash/findIndex.js","webpack:///./FrontEnd/scripts/modules/_shared/uni-scroll.js","webpack:///./FrontEnd/scripts/modules/general/card-slider.js"],"names":["module","exports","value","baseIteratee","isArrayLike","keys","findIndexFunc","collection","predicate","fromIndex","iterable","Object","iteratee","key","index","array","fromRight","length","findLast","isFunction","isLength","baseGetTag","isObject","tag","baseFindIndex","toInteger","nativeMax","Math","max","nativeMin","min","find","defaultTestItem","UniScroll","testItem","this","SCROLL_DEFAULT","SCROLL_REVERSE","SCROLL_NEGATIVE","detectScrollType","$","appendTo","scrollType","scrollLeft","remove","rtlScrollType","element","scrollWidth","width","offset","defaultOffsetToNegative","defaultOffsetToReverse","abs","CardSlider","sliderEl","sliderSelector","listSelector","itemsSelector","navSelector","buttonPrevSelector","buttonNextSelector","dataDirKey","VISIBLE","NOTICEABLE","INVISIBLE","$slider","$list","$items","$nav","isRtl","String","data","toLocaleLowerCase","$buttonPrev","$buttonNext","uniScroll","init","isInitialized","items","toArray","calculate","debouncedCalculate","t","attachEventListeners","dragAndSlide","previousItemOffset","getNextItemOffset","getPreviousItemOffset","nextItemOffset","isFirstCardVisible","checkLastCardVisibility","checkFirstCardVisibility","isLastCardVisible","prop","addClass","removeClass","card","numberOfVisibleCards","reduce","counter","item","checkCardVisibility","i","currentCardVisibility","cardIndex","offsetLeft","lastFullyVisibleCard","viewPortLeftBoundary","viewPortRightBoundary","cardLeftBoundary","cardRightBoundary","isPartiallyVisible","isFullyVisible","scroll","window","resize","on","left","getNormalizedOffset","get","top","behavior","requestAnimationFrame","slider","hasClass","startX","isDown","e","pageX","preventDefault","walk"],"mappings":"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","file":"11.js","sourcesContent":["/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","var baseIteratee = require('./_baseIteratee'),\n isArrayLike = require('./isArrayLike'),\n keys = require('./keys');\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nmodule.exports = createFind;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","var createFind = require('./_createFind'),\n findLastIndex = require('./findLastIndex');\n\n/**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\nvar findLast = createFind(findLastIndex);\n\nmodule.exports = findLast;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIteratee = require('./_baseIteratee'),\n toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\nfunction findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index, true);\n}\n\nmodule.exports = findLastIndex;\n","var createFind = require('./_createFind'),\n findIndex = require('./findIndex');\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nmodule.exports = find;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIteratee = require('./_baseIteratee'),\n toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n","import $ from 'jquery';\n\n/**\n * @desc Template of the element which eventually appends to DOM to determine current scroll type.\n * @type {string}\n */\nexport const defaultTestItem = `\n
\n ....\n
\n`;\n\n/**\n * @desc Horizontal scrollbar with rtl(right to left) language support have different implement in different browsers.\n * scrollLeft in rtl element is not defined by any spec or standards. So different browser have different implement.\n * As far as I know, there are 3 implements: WebKit, Firefox/Opera, IE.\n * WebKit's implement is the most easy to use implement. Exactly the same as ltr(left to right) element.\n * Except the initial position of scrollbar controller is at most right position.\n * Firefox has a clearly define in their mdn document. The most right position stands for 0.\n * And when user scrolls to left. The value decreases. The value is possible to be negative in this implement.\n * IE thought the element is flip horizontal. So the most right position is 0. And if it scrolls to left.\n * The value increase.\n * @example3 Types of scrollLeft (scrollWidth = 100):\n * Browser | Type | Most Left | Most Right | Initial\n * WebKit | default | 0 | 100 | 100\n * Firefox/Opera | negative | -100 | 0 | 0\n * IE | reverse | 100 | 0 | 0\n * @see {@link https://github.com/othree/jquery.rtl-scroll-type}\n */\nexport default class UniScroll {\n constructor({ testItem = defaultTestItem } = {}) {\n this.SCROLL_DEFAULT = 'default';\n this.SCROLL_REVERSE = 'reverse';\n this.SCROLL_NEGATIVE = 'negative';\n\n this.testItem = testItem;\n\n this.detectScrollType();\n }\n\n /**\n * @param {HTMLElement} element\n * @param {number} offset\n * @return {number}\n */\n static defaultOffsetToNegative(element, offset) {\n return -Math.abs(element.scrollWidth - (offset + $(element).width()));\n }\n\n /**\n * @param {HTMLElement} element\n * @param {number} offset\n * @return {number}\n */\n static defaultOffsetToReverse(element, offset) {\n return Math.abs(element.scrollWidth - (offset + $(element).width()));\n }\n\n /**\n * @modifies {rtlScrollType}\n * @return {string}\n */\n detectScrollType() {\n const testItem = $(this.testItem).appendTo('body')[0];\n\n // Initial scroll type like in IE\n let scrollType = this.SCROLL_REVERSE;\n\n // Only Chrome has initial scrollLeft equals to > 0\n if (testItem.scrollLeft > 0) {\n scrollType = this.SCROLL_DEFAULT;\n } else {\n testItem.scrollLeft = 1;\n\n // If scrollLeft rolled back to 0, then it's Firefox/Opera\n if (testItem.scrollLeft === 0) {\n scrollType = this.SCROLL_NEGATIVE;\n }\n }\n\n $(testItem).remove();\n\n this.rtlScrollType = scrollType;\n\n return scrollType;\n }\n\n /**\n * @param {HTMLElement} element\n * @return {number}\n */\n scrollLeft(element) {\n switch (this.rtlScrollType) {\n case this.SCROLL_NEGATIVE:\n return element.scrollLeft + element.scrollWidth - $(element).width();\n case this.SCROLL_REVERSE:\n return element.scrollWidth - element.scrollLeft - $(element).width();\n default:\n return element.scrollLeft;\n }\n }\n\n /**\n * @desc Converts Webkit-like coordinates to the current scroll-type coordinates.\n * @param {HTMLElement} element\n * @param {number} offset\n * @return {number}\n */\n getNormalizedOffset(element, offset) {\n switch (this.rtlScrollType) {\n case this.SCROLL_NEGATIVE:\n if ((offset + $(element).width() >= element.scrollWidth)) {\n return 0;\n }\n\n return UniScroll.defaultOffsetToNegative(element, offset);\n case this.SCROLL_REVERSE:\n if ((offset + $(element).width() >= element.scrollWidth)) {\n return 0;\n }\n\n return UniScroll.defaultOffsetToReverse(element, offset);\n default:\n return offset;\n }\n }\n}\n","import $ from 'jquery';\nimport { debounce, find, findLast } from 'lodash';\nimport UniScroll from '../_shared/uni-scroll';\n\n/**\n * @desc Implements a horizontal card slider, requires fixed-width cards,\n * utilities native overflow-x behavior.\n */\nexport default class CardSlider {\n /**\n * @param {Object} options\n * @param {null|HTMLElement} options.sliderEl\n * @param {string} options.sliderSelector\n * @param {string} options.listSelector\n * @param {string} options.itemsSelector\n * @param {string} options.navSelector\n * @param {string} options.buttonPrevSelector\n * @param {string} options.buttonNextSelector\n */\n constructor(\n {\n sliderEl = null,\n sliderSelector = '.js-card-slider',\n listSelector = '.js-card-slider-list',\n itemsSelector = '.js-card-slider-list-item',\n navSelector = '.js-card-slider-nav',\n buttonPrevSelector = '.js-card-slider-nav-prev',\n buttonNextSelector = '.js-card-slider-nav-next',\n dataDirKey = 'dir',\n } = {},\n ) {\n this.VISIBLE = 'visible';\n this.NOTICEABLE = 'noticeable';\n this.INVISIBLE = 'invisible';\n\n this.$slider = $(sliderEl || sliderSelector);\n this.$list = this.$slider.find(listSelector);\n this.$items = this.$list.find(itemsSelector);\n this.$nav = this.$slider.find(navSelector);\n this.isRtl = String(this.$slider.data(dataDirKey)).toLocaleLowerCase() === 'rtl';\n this.$buttonPrev = this.$nav.find(buttonPrevSelector);\n this.$buttonNext = this.$nav.find(buttonNextSelector);\n\n this.uniScroll = new UniScroll();\n\n this.init();\n }\n\n init() {\n this.isInitialized = true;\n\n if (!this.$list.length || !this.$items.length || !this.$buttonPrev.length || !this.$buttonNext.length) {\n this.isInitialized = false;\n\n return;\n }\n\n this.items = this.$items.toArray();\n\n this.calculate();\n\n this.debouncedCalculate = debounce(() => this.calculate(), 150);\n\n this.attachEventListeners();\n\n this.dragAndSlide();\n }\n\n /**\n * @desc Calculates the distance in pixels to the left corner\n * of next invisible card (nextItemOffset), and offset in pixels to the left corner\n * of the last invisible card in a row (previousItemOffset). Also, disables/enables\n * control buttons or completely hides them if both buttons are disabled.\n * Turns overflow-x ON and OFF depending on whether we need sliding or not.\n */\n calculate() {\n this.previousItemOffset = this.isRtl ? this.getNextItemOffset() : this.getPreviousItemOffset();\n this.nextItemOffset = this.isRtl ? this.getPreviousItemOffset() : this.getNextItemOffset();\n\n const isFirstCardVisible = this.isRtl ? this.checkLastCardVisibility() : this.checkFirstCardVisibility();\n const isLastCardVisible = this.isRtl ? this.checkFirstCardVisibility() : this.checkLastCardVisibility();\n\n this.$buttonPrev.prop('disabled', isFirstCardVisible);\n this.$buttonNext.prop('disabled', isLastCardVisible);\n\n if (isFirstCardVisible) {\n this.$slider.addClass('is-scrolled-max-left');\n } else {\n this.$slider.removeClass('is-scrolled-max-left');\n }\n\n if (isLastCardVisible) {\n this.$slider.addClass('is-scrolled-max-right');\n } else {\n this.$slider.removeClass('is-scrolled-max-right');\n }\n\n if (isFirstCardVisible && isLastCardVisible) {\n this.$list.addClass('no-scroll');\n this.$nav.addClass('nav-hidden');\n } else {\n this.$list.removeClass('no-scroll');\n this.$nav.removeClass('nav-hidden');\n }\n }\n\n /**\n * @desc Returns distance in pixels to the left corner of the last\n * invisible card in a row (previousItemOffset)\n * @returns {number}\n */\n getPreviousItemOffset() {\n let card = null;\n\n const numberOfVisibleCards = this.items.reduce(\n (counter, item) => (this.checkCardVisibility(item) === this.VISIBLE ? counter + 1 : counter), 0,\n );\n\n for (let i = 0; i < this.items.length; i += 1) {\n const currentCardVisibility = this.checkCardVisibility(this.items[i]);\n\n if (currentCardVisibility === this.VISIBLE) {\n const cardIndex = this.isRtl\n ? i + 2 + (numberOfVisibleCards > 1 ? numberOfVisibleCards : 0)\n : i - 2 - (numberOfVisibleCards > 1 ? numberOfVisibleCards : 0);\n card = this.items[cardIndex];\n\n break;\n } else if (currentCardVisibility === this.NOTICEABLE) {\n const cardIndex = this.isRtl\n ? i + 3 + (numberOfVisibleCards > 1 ? numberOfVisibleCards : 0)\n : i - 1 - (numberOfVisibleCards > 1 ? numberOfVisibleCards : 0);\n card = this.items[cardIndex];\n\n break;\n }\n }\n\n if (!card) {\n return 0;\n }\n\n if (this.isRtl) {\n return this.$list[0].scrollWidth - Math.abs(card.offsetLeft - this.$list.width()) + $(card).width();\n }\n\n return card.offsetLeft + $(card).width();\n }\n\n /**\n * @desc Returns distance in pixels to the left corner of next invisible (or semi-visible) card.\n * @returns {number}\n */\n getNextItemOffset() {\n const lastFullyVisibleCard = findLast(this.items, (item) => this.checkCardVisibility(item) === this.VISIBLE)\n || find(this.items, (item) => this.checkCardVisibility(item) === this.NOTICEABLE);\n\n if (this.isRtl) {\n return (\n this.$list[0].scrollWidth\n - Math.abs(lastFullyVisibleCard.offsetLeft - this.$list.width())\n + $(lastFullyVisibleCard).width()\n );\n }\n\n return lastFullyVisibleCard.offsetLeft + $(lastFullyVisibleCard).width();\n }\n\n /**\n * @desc Checks whether a first card is visible or not.\n * @return {boolean}\n */\n checkFirstCardVisibility() {\n return this.checkCardVisibility(this.items[0]) === this.VISIBLE;\n }\n\n /**\n * @desc Checks whether a last card is visible or not.\n * @return {boolean}\n */\n checkLastCardVisibility() {\n return this.checkCardVisibility(this.items[this.items.length - 1]) === this.VISIBLE;\n }\n\n /**\n * @desc Checks visibility of a card, it can be visible,\n * partially-visible (noticeable), and invisible.\n * @param {HTMLElement} card\n * @returns {string|null}\n */\n checkCardVisibility(card) {\n if (!card) {\n return null;\n }\n\n let viewPortLeftBoundary;\n let viewPortRightBoundary;\n let cardLeftBoundary;\n let cardRightBoundary;\n let isFullyVisible;\n let isPartiallyVisible;\n\n if (this.isRtl) {\n viewPortLeftBoundary = this.$list[0].scrollWidth - this.uniScroll.scrollLeft(this.$list[0]);\n viewPortRightBoundary = Math.abs(\n this.uniScroll.scrollLeft(this.$list[0]) + this.$list.width() - this.$list[0].scrollWidth,\n );\n cardLeftBoundary = this.$list.width() - $(card)[0].offsetLeft;\n cardRightBoundary = this.$list.width() - ($(card)[0].offsetLeft + $(card).width());\n\n isFullyVisible = cardLeftBoundary < viewPortLeftBoundary && cardRightBoundary > viewPortRightBoundary;\n isPartiallyVisible = !isFullyVisible\n && ((cardLeftBoundary < viewPortLeftBoundary && cardLeftBoundary > viewPortRightBoundary)\n || (cardRightBoundary < viewPortLeftBoundary && cardRightBoundary > viewPortRightBoundary));\n } else {\n viewPortLeftBoundary = this.$list.scrollLeft();\n viewPortRightBoundary = this.$list.scrollLeft() + this.$list.width();\n cardLeftBoundary = $(card)[0].offsetLeft;\n cardRightBoundary = $(card)[0].offsetLeft + $(card).width();\n\n isFullyVisible = (cardLeftBoundary >= viewPortLeftBoundary - 1\n && cardRightBoundary <= viewPortRightBoundary + 1)\n\n // exceptional case for wide width cards\n || ($(card).width() >= this.$list.width()\n && (\n (cardLeftBoundary > viewPortLeftBoundary && (\n cardRightBoundary >= viewPortRightBoundary\n && cardRightBoundary < viewPortRightBoundary + $(card).width()\n ))\n || (cardRightBoundary < viewPortRightBoundary && (\n cardLeftBoundary <= viewPortLeftBoundary\n && cardLeftBoundary > viewPortLeftBoundary - $(card).width()\n ))\n ));\n\n isPartiallyVisible = !isFullyVisible\n && ((cardLeftBoundary > viewPortLeftBoundary && cardLeftBoundary < viewPortRightBoundary)\n || (cardRightBoundary > viewPortLeftBoundary && cardRightBoundary < viewPortRightBoundary));\n }\n\n if (isFullyVisible) {\n return this.VISIBLE;\n }\n\n if (isPartiallyVisible) {\n return this.NOTICEABLE;\n }\n\n return this.INVISIBLE;\n }\n\n /**\n * @desc Add event listeners to slider's controls.\n */\n attachEventListeners() {\n this.$list.scroll(this.debouncedCalculate);\n\n $(window).resize(this.debouncedCalculate);\n\n this.$buttonPrev.on('click', () => {\n const left = this.isRtl\n ? this.uniScroll.getNormalizedOffset(this.$list[0], this.nextItemOffset)\n : this.previousItemOffset;\n\n this.$list.get(0).scroll({\n top: 0,\n left,\n behavior: window.requestAnimationFrame ? 'smooth' : 'auto',\n });\n });\n\n this.$buttonNext.on('click', () => {\n const left = this.isRtl\n ? this.uniScroll.getNormalizedOffset(this.$list[0], this.previousItemOffset)\n : this.nextItemOffset;\n\n this.$list.get(0).scroll({\n top: 0,\n left,\n behavior: window.requestAnimationFrame ? 'smooth' : 'auto',\n });\n });\n }\n\n dragAndSlide() {\n const slider = this.$list;\n if (!slider.hasClass('draggable')) {\n return;\n }\n let isDown = false;\n let startX;\n let scrollLeft;\n\n slider.on('mousedown', (e) => {\n isDown = true;\n slider.addClass('active');\n startX = e.pageX - slider.offset().left;\n scrollLeft = slider.scrollLeft();\n });\n slider.on('mouseleave', () => {\n isDown = false;\n slider.removeClass('active');\n });\n slider.on('mouseup', () => {\n isDown = false;\n slider.removeClass('active');\n });\n slider.on('mousemove', (e) => {\n if (!isDown) return;\n e.preventDefault();\n const x = e.pageX - slider.offset().left;\n const walk = (x - startX) * 3; // scroll-fast\n slider.scrollLeft(scrollLeft - walk);\n });\n }\n}\n"],"sourceRoot":""}