{"version":3,"file":"shuffle.js","sources":["../../../node_modules/tiny-emitter/index.js","../../../node_modules/array-parallel/index.js","../src/get-number.js","../src/point.js","../src/rect.js","../src/classes.js","../src/shuffle-item.js","../src/computed-size.js","../src/get-number-style.js","../src/sorter.js","../src/on-transition-end.js","../src/array-max.js","../src/array-min.js","../src/layout.js","../src/hyphenate.js","../src/shuffle.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","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 && a.top < b.top + b.height && b.top < a.top + a.height\n );\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([Classes.HIDDEN, Classes.VISIBLE, Classes.SHUFFLE_ITEM]);\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(element, style, styles = window.getComputedStyle(element, null)) {\n let value = getNumber(styles[style]);\n\n // Support IE<=11 and W3C spec.\n if (!testComputedSize() && style === 'width') {\n value +=\n getNumber(styles.paddingLeft) +\n getNumber(styles.paddingRight) +\n getNumber(styles.borderLeftWidth) +\n getNumber(styles.borderRightWidth);\n } else if (!testComputedSize() && style === 'height') {\n value +=\n 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 const opts = { ...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(...array);\n}\n","export default function arrayMin(array) {\n return Math.min(...array);\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({ itemSize, positions, gridSize, total, threshold, buffer }) {\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) =>\n rects.some((r) => {\n const intersects = Rect.intersects(itemRect, r);\n if (intersects) {\n intersectingRect = r;\n }\n return intersects;\n }),\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 centeredRows\n .flat()\n .sort((a, b) => a.id - b.id)\n .map((itemRect) => new Point(itemRect.left, itemRect.top));\n}\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","import TinyEmitter from 'tiny-emitter';\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 { getItemPosition, getColumnSpan, getAvailablePositions, getShortColumn, getCenteredPositions } 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 this.options = { ...Shuffle.options, ...options };\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 // 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 // Bind resize events\n this._rafId = null;\n // This is true for all supported browsers, but just to be safe, avoid throwing\n // an error if ResizeObserver is not present. You can manually add a window resize\n // event and call `update()` if ResizeObserver is missing, or use Shuffle v5.\n if ('ResizeObserver' in window) {\n this._resizeObserver = new ResizeObserver(this._handleResizeCallback.bind(this));\n this._resizeObserver.observe(this.element);\n }\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 * 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.dataset[Shuffle.FILTER_ATTRIBUTE_KEY];\n const keys = this.options.delimiter ? attr.split(this.options.delimiter) : 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) => el.matches(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 * @param {ResizeObserverEntry[]} entries\n */\n _handleResizeCallback(entries) {\n // If shuffle is disabled, destroyed, don't do anything.\n // You can still manually force a shuffle update with shuffle.update({ force: true }).\n if (!this.isEnabled || this.isDestroyed) {\n return;\n }\n\n // The reason ESLint disables this is because for..of generates a lot of extra\n // code using Babel, but Shuffle no longer supports browsers that old, so\n // nothing to worry about.\n // eslint-disable-next-line no-restricted-syntax\n for (const entry of entries) {\n if (Math.round(entry.contentRect.width) !== Math.round(this.containerWidth)) {\n // If there was already an animation waiting, cancel it.\n cancelAnimationFrame(this._rafId);\n // Offload updating the DOM until the browser is ready.\n this._rafId = requestAnimationFrame(this.update.bind(this));\n }\n }\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 const styles = { ...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 {object} options options object\n * @param {boolean} [options.recalculateSizes=true] Whether to calculate column, gutter, and container widths again.\n * @param {boolean} [options.force=false] By default, `update` does nothing if the instance is disabled. Setting this\n * to true forces the update to happen regardless.\n */\n update({ recalculateSizes = true, force = false } = {}) {\n if (this.isEnabled || force) {\n if (recalculateSizes) {\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({\n recalculateSizes: true,\n });\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.map((element) => this.getItemByElement(element)).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 if (this._resizeObserver) {\n this._resizeObserver.unobserve(this.element);\n this._resizeObserver = null;\n }\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.sortedItems.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 delimited, 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 initialized with a sort object. It is the same object\n // given to the sort method.\n initialSort: null,\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 // Note, this has no effect if you supply a custom filter function.\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"],"names":["E","prototype","on","name","callback","ctx","e","push","fn","once","self","listener","off","apply","arguments","_","emit","data","slice","call","evtArr","i","len","length","evts","liveEvents","tinyEmitterModule","exports","tinyEmitter","TinyEmitter","arrayParallel","parallel","fns","context","noop","pending","finished","results","Array","forEach","maybeDone","err","result","getNumber","value","parseFloat","Point","constructor","x","y","equals","a","b","Rect","w","h","id","left","top","width","height","intersects","BASE","SHUFFLE_ITEM","VISIBLE","HIDDEN","ShuffleItem","element","isRTL","isVisible","isHidden","show","classList","remove","Classes","add","removeAttribute","hide","setAttribute","init","addClasses","applyCss","Css","INITIAL","DIRECTION","rtl","ltr","scale","Scale","point","classes","className","removeClasses","obj","Object","keys","key","style","dispose","position","visibility","willChange","right","before","opacity","after","transitionDelay","document","body","documentElement","createElement","cssText","appendChild","window","getComputedStyle","Math","round","removeChild","getNumberStyle","styles","testComputedSize","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","randomize","array","n","floor","random","temp","defaults","reverse","by","compare","sorter","arr","options","opts","original","from","revert","sort","valA","valB","undefined","transitions","eventName","count","uniqueId","cancelTransitionEnd","removeEventListener","onTransitionEnd","evt","currentTarget","target","addEventListener","arrayMax","max","arrayMin","min","getColumnSpan","itemWidth","columnWidth","columns","threshold","columnSpan","abs","ceil","getAvailablePositions","positions","available","getShortColumn","buffer","minPosition","getItemPosition","itemSize","gridSize","total","span","setY","shortColumnIndex","setHeight","getCenteredPositions","itemRects","containerWidth","rowMap","itemRect","rects","rows","centeredRows","lastItem","end","offset","finalRects","canMove","newRects","every","r","newRect","noOverlap","some","intersectingRect","hasOverlap","rowIndex","findIndex","items","includes","splice","concat","flat","map","hyphenate","str","replace","m1","toLowerCase","arrayUnique","Set","Shuffle","lastSort","group","ALL_ITEMS","lastFilter","isEnabled","isDestroyed","isInitialized","_transitions","isTransitioning","_queue","el","_getElementOption","TypeError","_init","_getItems","sortedItems","sizer","_initItems","readyState","layout","bind","onLoad","containerCss","getSize","_validateStyles","_setColumns","filter","initialSort","_rafId","_resizeObserver","ResizeObserver","_handleResizeCallback","observe","offsetWidth","setItemTransitions","transition","speed","easing","option","querySelector","nodeType","jquery","overflow","_filter","category","collection","set","_getFilteredSets","_toggleFilterClasses","visible","hidden","item","_doesPassFilter","attr","dataset","FILTER_ATTRIBUTE_KEY","delimiter","split","JSON","parse","testCategory","isArray","filterMode","FilterMode","ANY","_disposeItems","_updateItemCount","visibleItems","_getFilteredItems","positionProps","useTransforms","cssProps","k","properties","join","transitionDuration","transitionTimingFunction","transitionProperty","children","matches","itemSelector","_mergeNewItems","indexOf","_getConcealedItems","_getColumnSize","gutterSize","size","_getGutterSize","gutterWidth","gutter","calculatedColumns","columnThreshold","cols","colWidth","_setContainerSize","_getContainerSize","_getStaggerAmount","index","staggerAmount","staggerAmountMax","_dispatch","shuffle","_resetCols","_layout","itemPositions","_getNextPositions","getStylesForTransition","isCentered","itemsData","_getItemPosition","getTransformedPositions","_shrink","entries","entry","contentRect","cancelAnimationFrame","requestAnimationFrame","update","styleObject","sign","roundTransforms","transform","_whenTransitionDone","itemCallback","done","_getTransitionFunction","_processQueue","_cancelMovement","hasSpeed","hasQueue","_startTransitions","_styleImmediately","EventType","LAYOUT","callbacks","_movementFinished","objects","elements","_skipTransitions","sortOptions","recalculateSizes","force","newItems","allItems","allSortedItemsSet","isNewItem","applyHiddenState","disable","enable","isUpdateLayout","oldItems","getItemByElement","handleLayout","parentNode","REMOVED","find","resetItems","destroy","unobserve","includeMargins","marginLeft","marginRight","marginTop","marginBottom","zero","duration","delay","ALL","__sorter","__getColumnSpan","__getAvailablePositions","__getShortColumn","__getCenteredPositions"],"mappings":"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"}