{"version":3,"file":"shufflejs.51c5b941875ba05b428f.js","mappings":"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","sources":["webpack://jcb.com/../node_modules/tiny-emitter/index.js","webpack://jcb.com/../node_modules/matches-selector/index.js","webpack://jcb.com/../node_modules/throttleit/index.js","webpack://jcb.com/../node_modules/array-parallel/index.js","webpack://jcb.com/../src/get-number.js","webpack://jcb.com/../src/point.js","webpack://jcb.com/../src/rect.js","webpack://jcb.com/../src/classes.js","webpack://jcb.com/../src/shuffle-item.js","webpack://jcb.com/../src/computed-size.js","webpack://jcb.com/../src/get-number-style.js","webpack://jcb.com/../src/sorter.js","webpack://jcb.com/../src/on-transition-end.js","webpack://jcb.com/../src/array-max.js","webpack://jcb.com/../src/layout.js","webpack://jcb.com/../src/array-min.js","webpack://jcb.com/../src/shuffle.js","webpack://jcb.com/../src/hyphenate.js"],"sourcesContent":["function E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n","'use strict';\n\nvar proto = typeof Element !== 'undefined' ? Element.prototype : {};\nvar vendor = proto.matches\n || proto.matchesSelector\n || proto.webkitMatchesSelector\n || proto.mozMatchesSelector\n || proto.msMatchesSelector\n || proto.oMatchesSelector;\n\nmodule.exports = match;\n\n/**\n * Match `el` to `selector`.\n *\n * @param {Element} el\n * @param {String} selector\n * @return {Boolean}\n * @api public\n */\n\nfunction match(el, selector) {\n if (!el || el.nodeType !== 1) return false;\n if (vendor) return vendor.call(el, selector);\n var nodes = el.parentNode.querySelectorAll(selector);\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i] == el) return true;\n }\n return false;\n}\n","module.exports = throttle;\n\n/**\n * Returns a new function that, when invoked, invokes `func` at most once per `wait` milliseconds.\n *\n * @param {Function} func Function to wrap.\n * @param {Number} wait Number of milliseconds that must elapse between `func` invocations.\n * @return {Function} A new function that wraps the `func` function passed in.\n */\n\nfunction throttle (func, wait) {\n var ctx, args, rtn, timeoutID; // caching\n var last = 0;\n\n return function throttled () {\n ctx = this;\n args = arguments;\n var delta = new Date() - last;\n if (!timeoutID)\n if (delta >= wait) call();\n else timeoutID = setTimeout(call, wait - delta);\n return rtn;\n };\n\n function call () {\n timeoutID = 0;\n last = +new Date();\n rtn = func.apply(ctx, args);\n ctx = null;\n args = null;\n }\n}\n","module.exports = function parallel(fns, context, callback) {\n if (!callback) {\n if (typeof context === 'function') {\n callback = context\n context = null\n } else {\n callback = noop\n }\n }\n\n var pending = fns && fns.length\n if (!pending) return callback(null, []);\n\n var finished = false\n var results = new Array(pending)\n\n fns.forEach(context ? function (fn, i) {\n fn.call(context, maybeDone(i))\n } : function (fn, i) {\n fn(maybeDone(i))\n })\n\n function maybeDone(i) {\n return function (err, result) {\n if (finished) return;\n\n if (err) {\n callback(err, results)\n finished = true\n return\n }\n\n results[i] = result\n\n if (!--pending) callback(null, results);\n }\n }\n}\n\nfunction noop() {}\n","/**\n * Always returns a numeric value, given a value. Logic from jQuery's `isNumeric`.\n * @param {*} value Possibly numeric value.\n * @return {number} `value` or zero if `value` isn't numeric.\n */\nexport default function getNumber(value) {\n return parseFloat(value) || 0;\n}\n","import getNumber from './get-number';\n\nclass Point {\n /**\n * Represents a coordinate pair.\n * @param {number} [x=0] X.\n * @param {number} [y=0] Y.\n */\n constructor(x, y) {\n this.x = getNumber(x);\n this.y = getNumber(y);\n }\n\n /**\n * Whether two points are equal.\n * @param {Point} a Point A.\n * @param {Point} b Point B.\n * @return {boolean}\n */\n static equals(a, b) {\n return a.x === b.x && a.y === b.y;\n }\n}\n\nexport default Point;\n","export default class Rect {\n /**\n * Class for representing rectangular regions.\n * https://github.com/google/closure-library/blob/master/closure/goog/math/rect.js\n * @param {number} x Left.\n * @param {number} y Top.\n * @param {number} w Width.\n * @param {number} h Height.\n * @param {number} id Identifier\n * @constructor\n */\n constructor(x, y, w, h, id) {\n this.id = id;\n\n /** @type {number} */\n this.left = x;\n\n /** @type {number} */\n this.top = y;\n\n /** @type {number} */\n this.width = w;\n\n /** @type {number} */\n this.height = h;\n }\n\n /**\n * Returns whether two rectangles intersect.\n * @param {Rect} a A Rectangle.\n * @param {Rect} b A Rectangle.\n * @return {boolean} Whether a and b intersect.\n */\n static intersects(a, b) {\n return (\n a.left < b.left + b.width && b.left < a.left + a.width\n && a.top < b.top + b.height && b.top < a.top + a.height);\n }\n}\n","export default {\n BASE: 'shuffle',\n SHUFFLE_ITEM: 'shuffle-item',\n VISIBLE: 'shuffle-item--visible',\n HIDDEN: 'shuffle-item--hidden',\n};\n","import Point from './point';\nimport Classes from './classes';\n\nlet id = 0;\n\nclass ShuffleItem {\n constructor(element, isRTL) {\n id += 1;\n this.id = id;\n this.element = element;\n\n /**\n * Set correct direction of item\n */\n this.isRTL = isRTL;\n\n /**\n * Used to separate items for layout and shrink.\n */\n this.isVisible = true;\n\n /**\n * Used to determine if a transition will happen. By the time the _layout\n * and _shrink methods get the ShuffleItem instances, the `isVisible` value\n * has already been changed by the separation methods, so this property is\n * needed to know if the item was visible/hidden before the shrink/layout.\n */\n this.isHidden = false;\n }\n\n show() {\n this.isVisible = true;\n this.element.classList.remove(Classes.HIDDEN);\n this.element.classList.add(Classes.VISIBLE);\n this.element.removeAttribute('aria-hidden');\n }\n\n hide() {\n this.isVisible = false;\n this.element.classList.remove(Classes.VISIBLE);\n this.element.classList.add(Classes.HIDDEN);\n this.element.setAttribute('aria-hidden', true);\n }\n\n init() {\n this.addClasses([Classes.SHUFFLE_ITEM, Classes.VISIBLE]);\n this.applyCss(ShuffleItem.Css.INITIAL);\n this.applyCss(this.isRTL ? ShuffleItem.Css.DIRECTION.rtl : ShuffleItem.Css.DIRECTION.ltr);\n this.scale = ShuffleItem.Scale.VISIBLE;\n this.point = new Point();\n }\n\n addClasses(classes) {\n classes.forEach((className) => {\n this.element.classList.add(className);\n });\n }\n\n removeClasses(classes) {\n classes.forEach((className) => {\n this.element.classList.remove(className);\n });\n }\n\n applyCss(obj) {\n Object.keys(obj).forEach((key) => {\n this.element.style[key] = obj[key];\n });\n }\n\n dispose() {\n this.removeClasses([\n Classes.HIDDEN,\n Classes.VISIBLE,\n Classes.SHUFFLE_ITEM,\n ]);\n\n this.element.removeAttribute('style');\n this.element = null;\n }\n}\n\nShuffleItem.Css = {\n INITIAL: {\n position: 'absolute',\n top: 0,\n visibility: 'visible',\n willChange: 'transform',\n },\n DIRECTION: {\n ltr: {\n left: 0,\n },\n rtl: {\n right: 0,\n },\n },\n VISIBLE: {\n before: {\n opacity: 1,\n visibility: 'visible',\n },\n after: {\n transitionDelay: '',\n },\n },\n HIDDEN: {\n before: {\n opacity: 0,\n },\n after: {\n visibility: 'hidden',\n transitionDelay: '',\n },\n },\n};\n\nShuffleItem.Scale = {\n VISIBLE: 1,\n HIDDEN: 0.001,\n};\n\nexport default ShuffleItem;\n","import getNumber from './get-number';\n\nlet value = null;\nexport default () => {\n if (value !== null) {\n return value;\n }\n\n const element = document.body || document.documentElement;\n const e = document.createElement('div');\n e.style.cssText = 'width:10px;padding:2px;box-sizing:border-box;';\n element.appendChild(e);\n\n const { width } = window.getComputedStyle(e, null);\n // Fix for issue #314\n value = Math.round(getNumber(width)) === 10;\n\n element.removeChild(e);\n\n return value;\n};\n","import getNumber from './get-number';\nimport testComputedSize from './computed-size';\n\n/**\n * Retrieve the computed style for an element, parsed as a float.\n * @param {Element} element Element to get style for.\n * @param {string} style Style property.\n * @param {CSSStyleDeclaration} [styles] Optionally include clean styles to\n * use instead of asking for them again.\n * @return {number} The parsed computed value or zero if that fails because IE\n * will return 'auto' when the element doesn't have margins instead of\n * the computed style.\n */\nexport default function getNumberStyle(\n element, style,\n styles = window.getComputedStyle(element, null),\n) {\n let value = getNumber(styles[style]);\n\n // Support IE<=11 and W3C spec.\n if (!testComputedSize() && style === 'width') {\n value += getNumber(styles.paddingLeft)\n + getNumber(styles.paddingRight)\n + getNumber(styles.borderLeftWidth)\n + getNumber(styles.borderRightWidth);\n } else if (!testComputedSize() && style === 'height') {\n value += getNumber(styles.paddingTop)\n + getNumber(styles.paddingBottom)\n + getNumber(styles.borderTopWidth)\n + getNumber(styles.borderBottomWidth);\n }\n\n return value;\n}\n","/**\n * Fisher-Yates shuffle.\n * http://stackoverflow.com/a/962890/373422\n * https://bost.ocks.org/mike/shuffle/\n * @param {Array} array Array to shuffle.\n * @return {Array} Randomly sorted array.\n */\nfunction randomize(array) {\n let n = array.length;\n\n while (n) {\n n -= 1;\n const i = Math.floor(Math.random() * (n + 1));\n const temp = array[i];\n array[i] = array[n];\n array[n] = temp;\n }\n\n return array;\n}\n\nconst defaults = {\n // Use array.reverse() to reverse the results\n reverse: false,\n\n // Sorting function\n by: null,\n\n // Custom sort function\n compare: null,\n\n // If true, this will skip the sorting and return a randomized order in the array\n randomize: false,\n\n // Determines which property of each item in the array is passed to the\n // sorting method.\n key: 'element',\n};\n\n/**\n * You can return `undefined` from the `by` function to revert to DOM order.\n * @param {Array} arr Array to sort.\n * @param {SortOptions} options Sorting options.\n * @return {Array}\n */\nexport default function sorter(arr, options) {\n // eslint-disable-next-line prefer-object-spread\n const opts = Object.assign({}, defaults, options);\n const original = Array.from(arr);\n let revert = false;\n\n if (!arr.length) {\n return [];\n }\n\n if (opts.randomize) {\n return randomize(arr);\n }\n\n // Sort the elements by the opts.by function.\n // If we don't have opts.by, default to DOM order\n if (typeof opts.by === 'function') {\n arr.sort((a, b) => {\n // Exit early if we already know we want to revert\n if (revert) {\n return 0;\n }\n\n const valA = opts.by(a[opts.key]);\n const valB = opts.by(b[opts.key]);\n\n // If both values are undefined, use the DOM order\n if (valA === undefined && valB === undefined) {\n revert = true;\n return 0;\n }\n\n if (valA < valB || valA === 'sortFirst' || valB === 'sortLast') {\n return -1;\n }\n\n if (valA > valB || valA === 'sortLast' || valB === 'sortFirst') {\n return 1;\n }\n\n return 0;\n });\n } else if (typeof opts.compare === 'function') {\n arr.sort(opts.compare);\n }\n\n // Revert to the original array if necessary\n if (revert) {\n return original;\n }\n\n if (opts.reverse) {\n arr.reverse();\n }\n\n return arr;\n}\n","const transitions = {};\nconst eventName = 'transitionend';\nlet count = 0;\n\nfunction uniqueId() {\n count += 1;\n return eventName + count;\n}\n\nexport function cancelTransitionEnd(id) {\n if (transitions[id]) {\n transitions[id].element.removeEventListener(eventName, transitions[id].listener);\n transitions[id] = null;\n return true;\n }\n\n return false;\n}\n\nexport function onTransitionEnd(element, callback) {\n const id = uniqueId();\n const listener = (evt) => {\n if (evt.currentTarget === evt.target) {\n cancelTransitionEnd(id);\n callback(evt);\n }\n };\n\n element.addEventListener(eventName, listener);\n\n transitions[id] = { element, listener };\n\n return id;\n}\n","export default function arrayMax(array) {\n return Math.max.apply(Math, array); // eslint-disable-line prefer-spread\n}\n","import Point from './point';\nimport Rect from './rect';\nimport arrayMax from './array-max';\nimport arrayMin from './array-min';\n\n/**\n * Determine the number of columns an items spans.\n * @param {number} itemWidth Width of the item.\n * @param {number} columnWidth Width of the column (includes gutter).\n * @param {number} columns Total number of columns\n * @param {number} threshold A buffer value for the size of the column to fit.\n * @return {number}\n */\nexport function getColumnSpan(itemWidth, columnWidth, columns, threshold) {\n let columnSpan = itemWidth / columnWidth;\n\n // If the difference between the rounded column span number and the\n // calculated column span number is really small, round the number to\n // make it fit.\n if (Math.abs(Math.round(columnSpan) - columnSpan) < threshold) {\n // e.g. columnSpan = 4.0089945390298745\n columnSpan = Math.round(columnSpan);\n }\n\n // Ensure the column span is not more than the amount of columns in the whole layout.\n return Math.min(Math.ceil(columnSpan), columns);\n}\n\n/**\n * Retrieves the column set to use for placement.\n * @param {number} columnSpan The number of columns this current item spans.\n * @param {number} columns The total columns in the grid.\n * @return {Array.} An array of numbers represeting the column set.\n */\nexport function getAvailablePositions(positions, columnSpan, columns) {\n // The item spans only one column.\n if (columnSpan === 1) {\n return positions;\n }\n\n // The item spans more than one column, figure out how many different\n // places it could fit horizontally.\n // The group count is the number of places within the positions this block\n // could fit, ignoring the current positions of items.\n // Imagine a 2 column brick as the second item in a 4 column grid with\n // 10px height each. Find the places it would fit:\n // [20, 10, 10, 0]\n // | | |\n // * * *\n //\n // Then take the places which fit and get the bigger of the two:\n // max([20, 10]), max([10, 10]), max([10, 0]) = [20, 10, 10]\n //\n // Next, find the first smallest number (the short column).\n // [20, 10, 10]\n // |\n // *\n //\n // And that's where it should be placed!\n //\n // Another example where the second column's item extends past the first:\n // [10, 20, 10, 0] => [20, 20, 10] => 10\n const available = [];\n\n // For how many possible positions for this item there are.\n for (let i = 0; i <= columns - columnSpan; i++) {\n // Find the bigger value for each place it could fit.\n available.push(arrayMax(positions.slice(i, i + columnSpan)));\n }\n\n return available;\n}\n\n/**\n * Find index of short column, the first from the left where this item will go.\n *\n * @param {Array.} positions The array to search for the smallest number.\n * @param {number} buffer Optional buffer which is very useful when the height\n * is a percentage of the width.\n * @return {number} Index of the short column.\n */\nexport function getShortColumn(positions, buffer) {\n const minPosition = arrayMin(positions);\n for (let i = 0, len = positions.length; i < len; i++) {\n if (positions[i] >= minPosition - buffer && positions[i] <= minPosition + buffer) {\n return i;\n }\n }\n\n return 0;\n}\n\n/**\n * Determine the location of the next item, based on its size.\n * @param {Object} itemSize Object with width and height.\n * @param {Array.} positions Positions of the other current items.\n * @param {number} gridSize The column width or row height.\n * @param {number} total The total number of columns or rows.\n * @param {number} threshold Buffer value for the column to fit.\n * @param {number} buffer Vertical buffer for the height of items.\n * @return {Point}\n */\nexport function getItemPosition({\n itemSize, positions, gridSize, total, threshold, buffer,\n}) {\n const span = getColumnSpan(itemSize.width, gridSize, total, threshold);\n const setY = getAvailablePositions(positions, span, total);\n const shortColumnIndex = getShortColumn(setY, buffer);\n\n // Position the item\n const point = new Point(gridSize * shortColumnIndex, setY[shortColumnIndex]);\n\n // Update the columns array with the new values for each column.\n // e.g. before the update the columns could be [250, 0, 0, 0] for an item\n // which spans 2 columns. After it would be [250, itemHeight, itemHeight, 0].\n const setHeight = setY[shortColumnIndex] + itemSize.height;\n for (let i = 0; i < span; i++) {\n positions[shortColumnIndex + i] = setHeight;\n }\n\n return point;\n}\n\n/**\n * This method attempts to center items. This method could potentially be slow\n * with a large number of items because it must place items, then check every\n * previous item to ensure there is no overlap.\n * @param {Array.} itemRects Item data objects.\n * @param {number} containerWidth Width of the containing element.\n * @return {Array.}\n */\nexport function getCenteredPositions(itemRects, containerWidth) {\n const rowMap = {};\n\n // Populate rows by their offset because items could jump between rows like:\n // a c\n // bbb\n itemRects.forEach((itemRect) => {\n if (rowMap[itemRect.top]) {\n // Push the point to the last row array.\n rowMap[itemRect.top].push(itemRect);\n } else {\n // Start of a new row.\n rowMap[itemRect.top] = [itemRect];\n }\n });\n\n // For each row, find the end of the last item, then calculate\n // the remaining space by dividing it by 2. Then add that\n // offset to the x position of each point.\n let rects = [];\n const rows = [];\n const centeredRows = [];\n Object.keys(rowMap).forEach((key) => {\n const itemRects = rowMap[key];\n rows.push(itemRects);\n const lastItem = itemRects[itemRects.length - 1];\n const end = lastItem.left + lastItem.width;\n const offset = Math.round((containerWidth - end) / 2);\n\n let finalRects = itemRects;\n let canMove = false;\n if (offset > 0) {\n const newRects = [];\n canMove = itemRects.every((r) => {\n const newRect = new Rect(r.left + offset, r.top, r.width, r.height, r.id);\n\n // Check all current rects to make sure none overlap.\n const noOverlap = !rects.some((r) => Rect.intersects(newRect, r));\n\n newRects.push(newRect);\n return noOverlap;\n });\n\n // If none of the rectangles overlapped, the whole group can be centered.\n if (canMove) {\n finalRects = newRects;\n }\n }\n\n // If the items are not going to be offset, ensure that the original\n // placement for this row will not overlap previous rows (row-spanning\n // elements could be in the way).\n if (!canMove) {\n let intersectingRect;\n const hasOverlap = itemRects.some((itemRect) => rects.some((r) => {\n const intersects = Rect.intersects(itemRect, r);\n if (intersects) {\n intersectingRect = r;\n }\n return intersects;\n }));\n\n // If there is any overlap, replace the overlapping row with the original.\n if (hasOverlap) {\n const rowIndex = centeredRows.findIndex((items) => items.includes(intersectingRect));\n centeredRows.splice(rowIndex, 1, rows[rowIndex]);\n }\n }\n\n rects = rects.concat(finalRects);\n centeredRows.push(finalRects);\n });\n\n // Reduce array of arrays to a single array of points.\n // https://stackoverflow.com/a/10865042/373422\n // Then reset sort back to how the items were passed to this method.\n // Remove the wrapper object with index, map to a Point.\n return [].concat.apply([], centeredRows) // eslint-disable-line prefer-spread\n .sort((a, b) => (a.id - b.id))\n .map((itemRect) => new Point(itemRect.left, itemRect.top));\n}\n","export default function arrayMin(array) {\n return Math.min.apply(Math, array); // eslint-disable-line prefer-spread\n}\n","import TinyEmitter from 'tiny-emitter';\nimport matches from 'matches-selector';\nimport throttle from 'throttleit';\nimport parallel from 'array-parallel';\n\nimport Point from './point';\nimport Rect from './rect';\nimport ShuffleItem from './shuffle-item';\nimport Classes from './classes';\nimport getNumberStyle from './get-number-style';\nimport sorter from './sorter';\nimport { onTransitionEnd, cancelTransitionEnd } from './on-transition-end';\nimport {\n getItemPosition,\n getColumnSpan,\n getAvailablePositions,\n getShortColumn,\n getCenteredPositions,\n} from './layout';\nimport arrayMax from './array-max';\nimport hyphenate from './hyphenate';\n\nfunction arrayUnique(x) {\n return Array.from(new Set(x));\n}\n\n// Used for unique instance variables\nlet id = 0;\n\nclass Shuffle extends TinyEmitter {\n /**\n * Categorize, sort, and filter a responsive grid of items.\n *\n * @param {Element} element An element which is the parent container for the grid items.\n * @param {Object} [options=Shuffle.options] Options object.\n * @constructor\n */\n constructor(element, options = {}) {\n super();\n // eslint-disable-next-line prefer-object-spread\n this.options = Object.assign({}, Shuffle.options, options);\n\n // Allow misspelling of delimiter since that's how it used to be.\n // Remove in v6.\n if (this.options.delimeter) {\n this.options.delimiter = this.options.delimeter;\n }\n\n this.lastSort = {};\n this.group = Shuffle.ALL_ITEMS;\n this.lastFilter = Shuffle.ALL_ITEMS;\n this.isEnabled = true;\n this.isDestroyed = false;\n this.isInitialized = false;\n this._transitions = [];\n this.isTransitioning = false;\n this._queue = [];\n\n const el = this._getElementOption(element);\n\n if (!el) {\n throw new TypeError('Shuffle needs to be initialized with an element.');\n }\n\n this.element = el;\n this.id = 'shuffle_' + id;\n id += 1;\n\n this._init();\n this.isInitialized = true;\n }\n\n _init() {\n this.items = this._getItems();\n this.sortedItems = this.items;\n\n this.options.sizer = this._getElementOption(this.options.sizer);\n\n // Add class and invalidate styles\n this.element.classList.add(Shuffle.Classes.BASE);\n\n // Set initial css for each item\n this._initItems(this.items);\n\n // Bind resize events\n this._onResize = this._getResizeFunction();\n window.addEventListener('resize', this._onResize);\n\n // If the page has not already emitted the `load` event, call layout on load.\n // This avoids layout issues caused by images and fonts loading after the\n // instance has been initialized.\n if (document.readyState !== 'complete') {\n const layout = this.layout.bind(this);\n window.addEventListener('load', function onLoad() {\n window.removeEventListener('load', onLoad);\n layout();\n });\n }\n\n // Get container css all in one request. Causes reflow\n const containerCss = window.getComputedStyle(this.element, null);\n const containerWidth = Shuffle.getSize(this.element).width;\n\n // Add styles to the container if it doesn't have them.\n this._validateStyles(containerCss);\n\n // We already got the container's width above, no need to cause another\n // reflow getting it again... Calculate the number of columns there will be\n this._setColumns(containerWidth);\n\n // Kick off!\n this.filter(this.options.group, this.options.initialSort);\n\n // The shuffle items haven't had transitions set on them yet so the user\n // doesn't see the first layout. Set them now that the first layout is done.\n // First, however, a synchronous layout must be caused for the previous\n // styles to be applied without transitions.\n this.element.offsetWidth; // eslint-disable-line no-unused-expressions\n this.setItemTransitions(this.items);\n this.element.style.transition = `height ${this.options.speed}ms ${this.options.easing}`;\n }\n\n /**\n * Returns a throttled and proxied function for the resize handler.\n * @return {function}\n * @private\n */\n _getResizeFunction() {\n const resizeFunction = this._handleResize.bind(this);\n return this.options.throttle\n ? this.options.throttle(resizeFunction, this.options.throttleTime)\n : resizeFunction;\n }\n\n /**\n * Retrieve an element from an option.\n * @param {string|jQuery|Element} option The option to check.\n * @return {?Element} The plain element or null.\n * @private\n */\n _getElementOption(option) {\n // If column width is a string, treat is as a selector and search for the\n // sizer element within the outermost container\n if (typeof option === 'string') {\n return this.element.querySelector(option);\n }\n\n // Check for an element\n if (option && option.nodeType && option.nodeType === 1) {\n return option;\n }\n\n // Check for jQuery object\n if (option && option.jquery) {\n return option[0];\n }\n\n return null;\n }\n\n /**\n * Ensures the shuffle container has the css styles it needs applied to it.\n * @param {Object} styles Key value pairs for position and overflow.\n * @private\n */\n _validateStyles(styles) {\n // Position cannot be static.\n if (styles.position === 'static') {\n this.element.style.position = 'relative';\n }\n\n // Overflow has to be hidden.\n if (styles.overflow !== 'hidden') {\n this.element.style.overflow = 'hidden';\n }\n }\n\n /**\n * Filter the elements by a category.\n * @param {string|string[]|function(Element):boolean} [category] Category to\n * filter by. If it's given, the last category will be used to filter the items.\n * @param {Array} [collection] Optionally filter a collection. Defaults to\n * all the items.\n * @return {{visible: ShuffleItem[], hidden: ShuffleItem[]}}\n * @private\n */\n _filter(category = this.lastFilter, collection = this.items) {\n const set = this._getFilteredSets(category, collection);\n\n // Individually add/remove hidden/visible classes\n this._toggleFilterClasses(set);\n\n // Save the last filter in case elements are appended.\n this.lastFilter = category;\n\n // This is saved mainly because providing a filter function (like searching)\n // will overwrite the `lastFilter` property every time its called.\n if (typeof category === 'string') {\n this.group = category;\n }\n\n return set;\n }\n\n /**\n * Returns an object containing the visible and hidden elements.\n * @param {string|string[]|function(Element):boolean} category Category or function to filter by.\n * @param {ShuffleItem[]} items A collection of items to filter.\n * @return {{visible: ShuffleItem[], hidden: ShuffleItem[]}}\n * @private\n */\n _getFilteredSets(category, items) {\n let visible = [];\n const hidden = [];\n\n // category === 'all', add visible class to everything\n if (category === Shuffle.ALL_ITEMS) {\n visible = items;\n\n // Loop through each item and use provided function to determine\n // whether to hide it or not.\n } else {\n items.forEach((item) => {\n if (this._doesPassFilter(category, item.element)) {\n visible.push(item);\n } else {\n hidden.push(item);\n }\n });\n }\n\n return {\n visible,\n hidden,\n };\n }\n\n /**\n * Test an item to see if it passes a category.\n * @param {string|string[]|function():boolean} category Category or function to filter by.\n * @param {Element} element An element to test.\n * @return {boolean} Whether it passes the category/filter.\n * @private\n */\n _doesPassFilter(category, element) {\n if (typeof category === 'function') {\n return category.call(element, element, this);\n }\n\n // Check each element's data-groups attribute against the given category.\n const attr = element.getAttribute('data-' + Shuffle.FILTER_ATTRIBUTE_KEY);\n const keys = this.options.delimiter\n ? attr.split(this.options.delimiter)\n : JSON.parse(attr);\n\n function testCategory(category) {\n return keys.includes(category);\n }\n\n if (Array.isArray(category)) {\n if (this.options.filterMode === Shuffle.FilterMode.ANY) {\n return category.some(testCategory);\n }\n return category.every(testCategory);\n }\n\n return keys.includes(category);\n }\n\n /**\n * Toggles the visible and hidden class names.\n * @param {{visible, hidden}} Object with visible and hidden arrays.\n * @private\n */\n _toggleFilterClasses({ visible, hidden }) {\n visible.forEach((item) => {\n item.show();\n });\n\n hidden.forEach((item) => {\n item.hide();\n });\n }\n\n /**\n * Set the initial css for each item\n * @param {ShuffleItem[]} items Set to initialize.\n * @private\n */\n _initItems(items) {\n items.forEach((item) => {\n item.init();\n });\n }\n\n /**\n * Remove element reference and styles.\n * @param {ShuffleItem[]} items Set to dispose.\n * @private\n */\n _disposeItems(items) {\n items.forEach((item) => {\n item.dispose();\n });\n }\n\n /**\n * Updates the visible item count.\n * @private\n */\n _updateItemCount() {\n this.visibleItems = this._getFilteredItems().length;\n }\n\n /**\n * Sets css transform transition on a group of elements. This is not executed\n * at the same time as `item.init` so that transitions don't occur upon\n * initialization of a new Shuffle instance.\n * @param {ShuffleItem[]} items Shuffle items to set transitions on.\n * @protected\n */\n setItemTransitions(items) {\n const { speed, easing } = this.options;\n const positionProps = this.options.useTransforms ? ['transform'] : ['top', 'left'];\n\n // Allow users to transtion other properties if they exist in the `before`\n // css mapping of the shuffle item.\n const cssProps = Object.keys(ShuffleItem.Css.HIDDEN.before).map((k) => hyphenate(k));\n const properties = positionProps.concat(cssProps).join();\n\n items.forEach((item) => {\n item.element.style.transitionDuration = speed + 'ms';\n item.element.style.transitionTimingFunction = easing;\n item.element.style.transitionProperty = properties;\n });\n }\n\n _getItems() {\n return Array.from(this.element.children)\n .filter((el) => matches(el, this.options.itemSelector))\n .map((el) => new ShuffleItem(el, this.options.isRTL));\n }\n\n /**\n * Combine the current items array with a new one and sort it by DOM order.\n * @param {ShuffleItem[]} items Items to track.\n * @return {ShuffleItem[]}\n */\n _mergeNewItems(items) {\n const children = Array.from(this.element.children);\n return sorter(this.items.concat(items), {\n by(element) {\n return children.indexOf(element);\n },\n });\n }\n\n _getFilteredItems() {\n return this.items.filter((item) => item.isVisible);\n }\n\n _getConcealedItems() {\n return this.items.filter((item) => !item.isVisible);\n }\n\n /**\n * Returns the column size, based on column width and sizer options.\n * @param {number} containerWidth Size of the parent container.\n * @param {number} gutterSize Size of the gutters.\n * @return {number}\n * @private\n */\n _getColumnSize(containerWidth, gutterSize) {\n let size;\n\n // If the columnWidth property is a function, then the grid is fluid\n if (typeof this.options.columnWidth === 'function') {\n size = this.options.columnWidth(containerWidth);\n\n // columnWidth option isn't a function, are they using a sizing element?\n } else if (this.options.sizer) {\n size = Shuffle.getSize(this.options.sizer).width;\n\n // if not, how about the explicitly set option?\n } else if (this.options.columnWidth) {\n size = this.options.columnWidth;\n\n // or use the size of the first item\n } else if (this.items.length > 0) {\n size = Shuffle.getSize(this.items[0].element, true).width;\n\n // if there's no items, use size of container\n } else {\n size = containerWidth;\n }\n\n // Don't let them set a column width of zero.\n if (size === 0) {\n size = containerWidth;\n }\n\n return size + gutterSize;\n }\n\n /**\n * Returns the gutter size, based on gutter width and sizer options.\n * @param {number} containerWidth Size of the parent container.\n * @return {number}\n * @private\n */\n _getGutterSize(containerWidth) {\n let size;\n if (typeof this.options.gutterWidth === 'function') {\n size = this.options.gutterWidth(containerWidth);\n } else if (this.options.sizer) {\n size = getNumberStyle(this.options.sizer, 'marginLeft');\n } else {\n size = this.options.gutterWidth;\n }\n\n return size;\n }\n\n /**\n * Calculate the number of columns to be used. Gets css if using sizer element.\n * @param {number} [containerWidth] Optionally specify a container width if\n * it's already available.\n */\n _setColumns(containerWidth = Shuffle.getSize(this.element).width) {\n const gutter = this._getGutterSize(containerWidth);\n const columnWidth = this._getColumnSize(containerWidth, gutter);\n let calculatedColumns = (containerWidth + gutter) / columnWidth;\n\n // Widths given from getStyles are not precise enough...\n if (Math.abs(Math.round(calculatedColumns) - calculatedColumns) < this.options.columnThreshold) {\n // e.g. calculatedColumns = 11.998876\n calculatedColumns = Math.round(calculatedColumns);\n }\n\n this.cols = Math.max(Math.floor(calculatedColumns || 0), 1);\n this.containerWidth = containerWidth;\n this.colWidth = columnWidth;\n }\n\n /**\n * Adjust the height of the grid\n */\n _setContainerSize() {\n this.element.style.height = this._getContainerSize() + 'px';\n }\n\n /**\n * Based on the column heights, it returns the biggest one.\n * @return {number}\n * @private\n */\n _getContainerSize() {\n return arrayMax(this.positions);\n }\n\n /**\n * Get the clamped stagger amount.\n * @param {number} index Index of the item to be staggered.\n * @return {number}\n */\n _getStaggerAmount(index) {\n return Math.min(index * this.options.staggerAmount, this.options.staggerAmountMax);\n }\n\n /**\n * Emit an event from this instance.\n * @param {string} name Event name.\n * @param {Object} [data={}] Optional object data.\n */\n _dispatch(name, data = {}) {\n if (this.isDestroyed) {\n return;\n }\n\n data.shuffle = this;\n this.emit(name, data);\n }\n\n /**\n * Zeros out the y columns array, which is used to determine item placement.\n * @private\n */\n _resetCols() {\n let i = this.cols;\n this.positions = [];\n while (i) {\n i -= 1;\n this.positions.push(0);\n }\n }\n\n /**\n * Loops through each item that should be shown and calculates the x, y position.\n * @param {ShuffleItem[]} items Array of items that will be shown/layed\n * out in order in their array.\n */\n _layout(items) {\n const itemPositions = this._getNextPositions(items);\n\n let count = 0;\n items.forEach((item, i) => {\n function callback() {\n item.applyCss(ShuffleItem.Css.VISIBLE.after);\n }\n\n // If the item will not change its position, do not add it to the render\n // queue. Transitions don't fire when setting a property to the same value.\n if (Point.equals(item.point, itemPositions[i]) && !item.isHidden) {\n item.applyCss(ShuffleItem.Css.VISIBLE.before);\n callback();\n return;\n }\n\n item.point = itemPositions[i];\n item.scale = ShuffleItem.Scale.VISIBLE;\n item.isHidden = false;\n\n // Clone the object so that the `before` object isn't modified when the\n // transition delay is added.\n const styles = this.getStylesForTransition(item, ShuffleItem.Css.VISIBLE.before);\n styles.transitionDelay = this._getStaggerAmount(count) + 'ms';\n\n this._queue.push({\n item,\n styles,\n callback,\n });\n\n count += 1;\n });\n }\n\n /**\n * Return an array of Point instances representing the future positions of\n * each item.\n * @param {ShuffleItem[]} items Array of sorted shuffle items.\n * @return {Point[]}\n * @private\n */\n _getNextPositions(items) {\n // If position data is going to be changed, add the item's size to the\n // transformer to allow for calculations.\n if (this.options.isCentered) {\n const itemsData = items.map((item, i) => {\n const itemSize = Shuffle.getSize(item.element, true);\n const point = this._getItemPosition(itemSize);\n return new Rect(point.x, point.y, itemSize.width, itemSize.height, i);\n });\n\n return this.getTransformedPositions(itemsData, this.containerWidth);\n }\n\n // If no transforms are going to happen, simply return an array of the\n // future points of each item.\n return items.map((item) => this._getItemPosition(Shuffle.getSize(item.element, true)));\n }\n\n /**\n * Determine the location of the next item, based on its size.\n * @param {{width: number, height: number}} itemSize Object with width and height.\n * @return {Point}\n * @private\n */\n _getItemPosition(itemSize) {\n return getItemPosition({\n itemSize,\n positions: this.positions,\n gridSize: this.colWidth,\n total: this.cols,\n threshold: this.options.columnThreshold,\n buffer: this.options.buffer,\n });\n }\n\n /**\n * Mutate positions before they're applied.\n * @param {Rect[]} itemRects Item data objects.\n * @param {number} containerWidth Width of the containing element.\n * @return {Point[]}\n * @protected\n */\n getTransformedPositions(itemRects, containerWidth) {\n return getCenteredPositions(itemRects, containerWidth);\n }\n\n /**\n * Hides the elements that don't match our filter.\n * @param {ShuffleItem[]} collection Collection to shrink.\n * @private\n */\n _shrink(collection = this._getConcealedItems()) {\n let count = 0;\n collection.forEach((item) => {\n function callback() {\n item.applyCss(ShuffleItem.Css.HIDDEN.after);\n }\n\n // Continuing would add a transitionend event listener to the element, but\n // that listener would not execute because the transform and opacity would\n // stay the same.\n // The callback is executed here because it is not guaranteed to be called\n // after the transitionend event because the transitionend could be\n // canceled if another animation starts.\n if (item.isHidden) {\n item.applyCss(ShuffleItem.Css.HIDDEN.before);\n callback();\n return;\n }\n\n item.scale = ShuffleItem.Scale.HIDDEN;\n item.isHidden = true;\n\n const styles = this.getStylesForTransition(item, ShuffleItem.Css.HIDDEN.before);\n styles.transitionDelay = this._getStaggerAmount(count) + 'ms';\n\n this._queue.push({\n item,\n styles,\n callback,\n });\n\n count += 1;\n });\n }\n\n /**\n * Resize handler.\n * @private\n */\n _handleResize() {\n // If shuffle is disabled, destroyed, don't do anything\n if (!this.isEnabled || this.isDestroyed) {\n return;\n }\n\n this.update();\n }\n\n /**\n * Returns styles which will be applied to the an item for a transition.\n * @param {ShuffleItem} item Item to get styles for. Should have updated\n * scale and point properties.\n * @param {Object} styleObject Extra styles that will be used in the transition.\n * @return {!Object} Transforms for transitions, left/top for animate.\n * @protected\n */\n getStylesForTransition(item, styleObject) {\n // Clone the object to avoid mutating the original.\n // eslint-disable-next-line prefer-object-spread\n const styles = Object.assign({}, styleObject);\n\n if (this.options.useTransforms) {\n const sign = this.options.isRTL ? '-' : '';\n const x = this.options.roundTransforms ? Math.round(item.point.x) : item.point.x;\n const y = this.options.roundTransforms ? Math.round(item.point.y) : item.point.y;\n styles.transform = `translate(${sign}${x}px, ${y}px) scale(${item.scale})`;\n } else {\n if (this.options.isRTL) {\n styles.right = item.point.x + 'px';\n } else {\n styles.left = item.point.x + 'px';\n }\n styles.top = item.point.y + 'px';\n }\n\n return styles;\n }\n\n /**\n * Listen for the transition end on an element and execute the itemCallback\n * when it finishes.\n * @param {Element} element Element to listen on.\n * @param {function} itemCallback Callback for the item.\n * @param {function} done Callback to notify `parallel` that this one is done.\n */\n _whenTransitionDone(element, itemCallback, done) {\n const id = onTransitionEnd(element, (evt) => {\n itemCallback();\n done(null, evt);\n });\n\n this._transitions.push(id);\n }\n\n /**\n * Return a function which will set CSS styles and call the `done` function\n * when (if) the transition finishes.\n * @param {Object} opts Transition object.\n * @return {function} A function to be called with a `done` function.\n */\n _getTransitionFunction(opts) {\n return (done) => {\n opts.item.applyCss(opts.styles);\n this._whenTransitionDone(opts.item.element, opts.callback, done);\n };\n }\n\n /**\n * Execute the styles gathered in the style queue. This applies styles to elements,\n * triggering transitions.\n * @private\n */\n _processQueue() {\n if (this.isTransitioning) {\n this._cancelMovement();\n }\n\n const hasSpeed = this.options.speed > 0;\n const hasQueue = this._queue.length > 0;\n\n if (hasQueue && hasSpeed && this.isInitialized) {\n this._startTransitions(this._queue);\n } else if (hasQueue) {\n this._styleImmediately(this._queue);\n this._dispatch(Shuffle.EventType.LAYOUT);\n\n // A call to layout happened, but none of the newly visible items will\n // change position or the transition duration is zero, which will not trigger\n // the transitionend event.\n } else {\n this._dispatch(Shuffle.EventType.LAYOUT);\n }\n\n // Remove everything in the style queue\n this._queue.length = 0;\n }\n\n /**\n * Wait for each transition to finish, the emit the layout event.\n * @param {Object[]} transitions Array of transition objects.\n */\n _startTransitions(transitions) {\n // Set flag that shuffle is currently in motion.\n this.isTransitioning = true;\n\n // Create an array of functions to be called.\n const callbacks = transitions.map((obj) => this._getTransitionFunction(obj));\n\n parallel(callbacks, this._movementFinished.bind(this));\n }\n\n _cancelMovement() {\n // Remove the transition end event for each listener.\n this._transitions.forEach(cancelTransitionEnd);\n\n // Reset the array.\n this._transitions.length = 0;\n\n // Show it's no longer active.\n this.isTransitioning = false;\n }\n\n /**\n * Apply styles without a transition.\n * @param {Object[]} objects Array of transition objects.\n * @private\n */\n _styleImmediately(objects) {\n if (objects.length) {\n const elements = objects.map((obj) => obj.item.element);\n\n Shuffle._skipTransitions(elements, () => {\n objects.forEach((obj) => {\n obj.item.applyCss(obj.styles);\n obj.callback();\n });\n });\n }\n }\n\n _movementFinished() {\n this._transitions.length = 0;\n this.isTransitioning = false;\n this._dispatch(Shuffle.EventType.LAYOUT);\n }\n\n /**\n * The magic. This is what makes the plugin 'shuffle'\n * @param {string|string[]|function(Element):boolean} [category] Category to filter by.\n * Can be a function, string, or array of strings.\n * @param {SortOptions} [sortOptions] A sort object which can sort the visible set\n */\n filter(category, sortOptions) {\n if (!this.isEnabled) {\n return;\n }\n\n if (!category || (category && category.length === 0)) {\n category = Shuffle.ALL_ITEMS; // eslint-disable-line no-param-reassign\n }\n\n this._filter(category);\n\n // Shrink each hidden item\n this._shrink();\n\n // How many visible elements?\n this._updateItemCount();\n\n // Update transforms on visible elements so they will animate to their new positions.\n this.sort(sortOptions);\n }\n\n /**\n * Gets the visible elements, sorts them, and passes them to layout.\n * @param {SortOptions} [sortOptions] The options object to pass to `sorter`.\n */\n sort(sortOptions = this.lastSort) {\n if (!this.isEnabled) {\n return;\n }\n\n this._resetCols();\n\n const items = sorter(this._getFilteredItems(), sortOptions);\n this.sortedItems = items;\n\n this._layout(items);\n\n // `_layout` always happens after `_shrink`, so it's safe to process the style\n // queue here with styles from the shrink method.\n this._processQueue();\n\n // Adjust the height of the container.\n this._setContainerSize();\n\n this.lastSort = sortOptions;\n }\n\n /**\n * Reposition everything.\n * @param {boolean} [isOnlyLayout=false] If true, column and gutter widths won't be recalculated.\n */\n update(isOnlyLayout = false) {\n if (this.isEnabled) {\n if (!isOnlyLayout) {\n // Get updated colCount\n this._setColumns();\n }\n\n // Layout items\n this.sort();\n }\n }\n\n /**\n * Use this instead of `update()` if you don't need the columns and gutters updated\n * Maybe an image inside `shuffle` loaded (and now has a height), which means calculations\n * could be off.\n */\n layout() {\n this.update(true);\n }\n\n /**\n * New items have been appended to shuffle. Mix them in with the current\n * filter or sort status.\n * @param {Element[]} newItems Collection of new items.\n */\n add(newItems) {\n const items = arrayUnique(newItems).map((el) => new ShuffleItem(el, this.options.isRTL));\n\n // Add classes and set initial positions.\n this._initItems(items);\n\n // Determine which items will go with the current filter.\n this._resetCols();\n\n const allItems = this._mergeNewItems(items);\n const sortedItems = sorter(allItems, this.lastSort);\n const allSortedItemsSet = this._filter(this.lastFilter, sortedItems);\n\n const isNewItem = (item) => items.includes(item);\n const applyHiddenState = (item) => {\n item.scale = ShuffleItem.Scale.HIDDEN;\n item.isHidden = true;\n item.applyCss(ShuffleItem.Css.HIDDEN.before);\n item.applyCss(ShuffleItem.Css.HIDDEN.after);\n };\n\n // Layout all items again so that new items get positions.\n // Synchonously apply positions.\n const itemPositions = this._getNextPositions(allSortedItemsSet.visible);\n allSortedItemsSet.visible.forEach((item, i) => {\n if (isNewItem(item)) {\n item.point = itemPositions[i];\n applyHiddenState(item);\n item.applyCss(this.getStylesForTransition(item, {}));\n }\n });\n\n allSortedItemsSet.hidden.forEach((item) => {\n if (isNewItem(item)) {\n applyHiddenState(item);\n }\n });\n\n // Cause layout so that the styles above are applied.\n this.element.offsetWidth; // eslint-disable-line no-unused-expressions\n\n // Add transition to each item.\n this.setItemTransitions(items);\n\n // Update the list of items.\n this.items = this._mergeNewItems(items);\n\n // Update layout/visibility of new and old items.\n this.filter(this.lastFilter);\n }\n\n /**\n * Disables shuffle from updating dimensions and layout on resize\n */\n disable() {\n this.isEnabled = false;\n }\n\n /**\n * Enables shuffle again\n * @param {boolean} [isUpdateLayout=true] if undefined, shuffle will update columns and gutters\n */\n enable(isUpdateLayout = true) {\n this.isEnabled = true;\n if (isUpdateLayout) {\n this.update();\n }\n }\n\n /**\n * Remove 1 or more shuffle items.\n * @param {Element[]} elements An array containing one or more\n * elements in shuffle\n * @return {Shuffle} The shuffle instance.\n */\n remove(elements) {\n if (!elements.length) {\n return;\n }\n\n const collection = arrayUnique(elements);\n\n const oldItems = collection\n .map((element) => this.getItemByElement(element))\n .filter((item) => !!item);\n\n const handleLayout = () => {\n this._disposeItems(oldItems);\n\n // Remove the collection in the callback\n collection.forEach((element) => {\n element.parentNode.removeChild(element);\n });\n\n this._dispatch(Shuffle.EventType.REMOVED, { collection });\n };\n\n // Hide collection first.\n this._toggleFilterClasses({\n visible: [],\n hidden: oldItems,\n });\n\n this._shrink(oldItems);\n\n this.sort();\n\n // Update the list of items here because `remove` could be called again\n // with an item that is in the process of being removed.\n this.items = this.items.filter((item) => !oldItems.includes(item));\n this._updateItemCount();\n\n this.once(Shuffle.EventType.LAYOUT, handleLayout);\n }\n\n /**\n * Retrieve a shuffle item by its element.\n * @param {Element} element Element to look for.\n * @return {?ShuffleItem} A shuffle item or undefined if it's not found.\n */\n getItemByElement(element) {\n return this.items.find((item) => item.element === element);\n }\n\n /**\n * Dump the elements currently stored and reinitialize all child elements which\n * match the `itemSelector`.\n */\n resetItems() {\n // Remove refs to current items.\n this._disposeItems(this.items);\n this.isInitialized = false;\n\n // Find new items in the DOM.\n this.items = this._getItems();\n\n // Set initial styles on the new items.\n this._initItems(this.items);\n\n this.once(Shuffle.EventType.LAYOUT, () => {\n // Add transition to each item.\n this.setItemTransitions(this.items);\n this.isInitialized = true;\n });\n\n // Lay out all items.\n this.filter(this.lastFilter);\n }\n\n /**\n * Destroys shuffle, removes events, styles, and classes\n */\n destroy() {\n this._cancelMovement();\n window.removeEventListener('resize', this._onResize);\n\n // Reset container styles\n this.element.classList.remove('shuffle');\n this.element.removeAttribute('style');\n\n // Reset individual item styles\n this._disposeItems(this.items);\n\n this.items.length = 0;\n this._transitions.length = 0;\n\n // Null DOM references\n this.options.sizer = null;\n this.element = null;\n\n // Set a flag so if a debounced resize has been triggered,\n // it can first check if it is actually isDestroyed and not doing anything\n this.isDestroyed = true;\n this.isEnabled = false;\n }\n\n /**\n * Returns the outer width of an element, optionally including its margins.\n *\n * There are a few different methods for getting the width of an element, none of\n * which work perfectly for all Shuffle's use cases.\n *\n * 1. getBoundingClientRect() `left` and `right` properties.\n * - Accounts for transform scaled elements, making it useless for Shuffle\n * elements which have shrunk.\n * 2. The `offsetWidth` property.\n * - This value stays the same regardless of the elements transform property,\n * however, it does not return subpixel values.\n * 3. getComputedStyle()\n * - This works great Chrome, Firefox, Safari, but IE<=11 does not include\n * padding and border when box-sizing: border-box is set, requiring a feature\n * test and extra work to add the padding back for IE and other browsers which\n * follow the W3C spec here.\n *\n * @param {Element} element The element.\n * @param {boolean} [includeMargins=false] Whether to include margins.\n * @return {{width: number, height: number}} The width and height.\n */\n static getSize(element, includeMargins = false) {\n // Store the styles so that they can be used by others without asking for it again.\n const styles = window.getComputedStyle(element, null);\n let width = getNumberStyle(element, 'width', styles);\n let height = getNumberStyle(element, 'height', styles);\n\n if (includeMargins) {\n const marginLeft = getNumberStyle(element, 'marginLeft', styles);\n const marginRight = getNumberStyle(element, 'marginRight', styles);\n const marginTop = getNumberStyle(element, 'marginTop', styles);\n const marginBottom = getNumberStyle(element, 'marginBottom', styles);\n width += marginLeft + marginRight;\n height += marginTop + marginBottom;\n }\n\n return {\n width,\n height,\n };\n }\n\n /**\n * Change a property or execute a function which will not have a transition\n * @param {Element[]} elements DOM elements that won't be transitioned.\n * @param {function} callback A function which will be called while transition\n * is set to 0ms.\n * @private\n */\n static _skipTransitions(elements, callback) {\n const zero = '0ms';\n\n // Save current duration and delay.\n const data = elements.map((element) => {\n const { style } = element;\n const duration = style.transitionDuration;\n const delay = style.transitionDelay;\n\n // Set the duration to zero so it happens immediately\n style.transitionDuration = zero;\n style.transitionDelay = zero;\n\n return {\n duration,\n delay,\n };\n });\n\n callback();\n\n // Cause forced synchronous layout.\n elements[0].offsetWidth; // eslint-disable-line no-unused-expressions\n\n // Put the duration back\n elements.forEach((element, i) => {\n element.style.transitionDuration = data[i].duration;\n element.style.transitionDelay = data[i].delay;\n });\n }\n}\n\nShuffle.ShuffleItem = ShuffleItem;\n\nShuffle.ALL_ITEMS = 'all';\nShuffle.FILTER_ATTRIBUTE_KEY = 'groups';\n\n/** @enum {string} */\nShuffle.EventType = {\n LAYOUT: 'shuffle:layout',\n REMOVED: 'shuffle:removed',\n};\n\n/** @enum {string} */\nShuffle.Classes = Classes;\n\n/** @enum {string} */\nShuffle.FilterMode = {\n ANY: 'any',\n ALL: 'all',\n};\n\n// Overrideable options\nShuffle.options = {\n // Initial filter group.\n group: Shuffle.ALL_ITEMS,\n\n // Transition/animation speed (milliseconds).\n speed: 250,\n\n // CSS easing function to use.\n easing: 'cubic-bezier(0.4, 0.0, 0.2, 1)',\n\n // e.g. '.picture-item'.\n itemSelector: '*',\n\n // Element or selector string. Use an element to determine the size of columns\n // and gutters.\n sizer: null,\n\n // A static number or function that tells the plugin how wide the gutters\n // between columns are (in pixels).\n gutterWidth: 0,\n\n // A static number or function that returns a number which tells the plugin\n // how wide the columns are (in pixels).\n columnWidth: 0,\n\n // If your group is not json, and is comma delimeted, you could set delimiter\n // to ','.\n delimiter: null,\n\n // Useful for percentage based heights when they might not always be exactly\n // the same (in pixels).\n buffer: 0,\n\n // Reading the width of elements isn't precise enough and can cause columns to\n // jump between values.\n columnThreshold: 0.01,\n\n // Shuffle can be isInitialized with a sort object. It is the same object\n // given to the sort method.\n initialSort: null,\n\n // By default, shuffle will throttle resize events. This can be changed or\n // removed.\n throttle,\n\n // How often shuffle can be called on resize (in milliseconds).\n throttleTime: 300,\n\n // Transition delay offset for each item in milliseconds.\n staggerAmount: 15,\n\n // Maximum stagger delay in milliseconds.\n staggerAmountMax: 150,\n\n // Whether to use transforms or absolute positioning.\n useTransforms: true,\n\n // Affects using an array with filter. e.g. `filter(['one', 'two'])`. With \"any\",\n // the element passes the test if any of its groups are in the array. With \"all\",\n // the element only passes if all groups are in the array.\n filterMode: Shuffle.FilterMode.ANY,\n\n // Attempt to center grid items in each row.\n isCentered: false,\n\n // Attempt to align grid items to right.\n isRTL: false,\n\n // Whether to round pixel values used in translate(x, y). This usually avoids\n // blurriness.\n roundTransforms: true,\n};\n\nShuffle.Point = Point;\nShuffle.Rect = Rect;\n\n// Expose for testing. Hack at your own risk.\nShuffle.__sorter = sorter;\nShuffle.__getColumnSpan = getColumnSpan;\nShuffle.__getAvailablePositions = getAvailablePositions;\nShuffle.__getShortColumn = getShortColumn;\nShuffle.__getCenteredPositions = getCenteredPositions;\n\nexport default Shuffle;\n","/**\n * Hyphenates a javascript style string to a css one. For example:\n * MozBoxSizing -> -moz-box-sizing.\n * @param {string} str The string to hyphenate.\n * @return {string} The hyphenated string.\n */\nexport default function hyphenate(str) {\n return str.replace(/([A-Z])/g, (str, m1) => `-${m1.toLowerCase()}`);\n}\n"],"names":["E","prototype","on","name","callback","ctx","e","this","push","fn","once","self","listener","off","apply","arguments","_","emit","data","slice","call","evtArr","i","len","length","evts","liveEvents","tinyEmitterModule","proto","Element","vendor","matches","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","el","selector","nodeType","nodes","parentNode","querySelectorAll","throttleit","func","wait","args","rtn","timeoutID","last","delta","Date","setTimeout","noop","getNumber","value","parseFloat","Point","x","y","_classCallCheck","a","b","Rect","w","h","id","left","top","width","height","BASE","SHUFFLE_ITEM","VISIBLE","HIDDEN","ShuffleItem","element","isRTL","isVisible","isHidden","classList","remove","Classes","add","removeAttribute","setAttribute","addClasses","applyCss","Css","INITIAL","DIRECTION","rtl","ltr","scale","Scale","point","classes","forEach","className","_this","_this2","obj","Object","keys","key","_this3","style","removeClasses","position","visibility","willChange","right","before","opacity","after","transitionDelay","document","body","documentElement","createElement","cssText","appendChild","window","getComputedStyle","Math","round","removeChild","getNumberStyle","styles","testComputedSize","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","defaults","reverse","by","compare","randomize","sorter","arr","options","opts","assign","original","Array","from","revert","array","n","floor","random","temp","sort","valA","valB","undefined","transitions","eventName","count","cancelTransitionEnd","removeEventListener","onTransitionEnd","evt","currentTarget","target","addEventListener","arrayMax","max","getColumnSpan","itemWidth","columnWidth","columns","threshold","columnSpan","abs","min","ceil","getAvailablePositions","positions","available","getShortColumn","buffer","minPosition","getCenteredPositions","itemRects","containerWidth","rowMap","itemRect","rects","rows","centeredRows","intersectingRect","lastItem","end","offset","finalRects","canMove","newRects","every","r","newRect","noOverlap","some","intersects","rowIndex","findIndex","items","includes","splice","concat","map","arrayUnique","Set","Shuffle","delimeter","delimiter","lastSort","group","ALL_ITEMS","lastFilter","isEnabled","isDestroyed","isInitialized","_transitions","isTransitioning","_queue","_getElementOption","TypeError","_init","_getItems","sortedItems","sizer","_initItems","_onResize","_getResizeFunction","readyState","layout","bind","onLoad","containerCss","getSize","_validateStyles","_setColumns","filter","initialSort","offsetWidth","setItemTransitions","transition","speed","easing","resizeFunction","_handleResize","throttle","throttleTime","option","querySelector","jquery","overflow","category","collection","set","_getFilteredSets","_toggleFilterClasses","visible","hidden","item","_doesPassFilter","attr","getAttribute","FILTER_ATTRIBUTE_KEY","split","JSON","parse","testCategory","isArray","filterMode","FilterMode","ANY","show","hide","init","dispose","visibleItems","_getFilteredItems","positionProps","useTransforms","cssProps","k","replace","str","m1","toLowerCase","properties","join","transitionDuration","transitionTimingFunction","transitionProperty","children","itemSelector","indexOf","gutterSize","size","gutterWidth","gutter","_getGutterSize","_getColumnSize","calculatedColumns","columnThreshold","cols","colWidth","_getContainerSize","index","staggerAmount","staggerAmountMax","shuffle","itemPositions","_getNextPositions","equals","_this4","getStylesForTransition","_getStaggerAmount","isCentered","itemsData","itemSize","_this5","_getItemPosition","getTransformedPositions","gridSize","total","span","setY","shortColumnIndex","setHeight","getItemPosition","_getConcealedItems","_this6","update","styleObject","sign","roundTransforms","transform","itemCallback","done","_this7","_whenTransitionDone","_cancelMovement","hasSpeed","hasQueue","_startTransitions","_styleImmediately","_dispatch","EventType","LAYOUT","fns","context","pending","finished","results","maybeDone","err","result","parallel","_this8","_getTransitionFunction","_movementFinished","objects","elements","_skipTransitions","sortOptions","_filter","_shrink","_updateItemCount","_resetCols","_layout","_processQueue","_setContainerSize","isOnlyLayout","newItems","_this9","_mergeNewItems","allSortedItemsSet","isNewItem","applyHiddenState","isUpdateLayout","oldItems","_this10","getItemByElement","_disposeItems","REMOVED","find","_this11","includeMargins","marginLeft","marginRight","marginTop","marginBottom","duration","delay","TinyEmitter","ALL","__sorter","__getColumnSpan","__getAvailablePositions","__getShortColumn","__getCenteredPositions"],"sourceRoot":""}