{"version":3,"file":"vendor.js","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","tinyEmitter","exports","tinyEmitterExports","TinyEmitter","arrayParallel","parallel","fns","context","noop","pending","finished","results","Array","forEach","maybeDone","err","result","getNumber","value","parseFloat","Point","x","y","_classCallCheck","_createClass","key","equals","a","b","Point$1","Rect","w","h","id","left","top","width","height","intersects","Classes","BASE","SHUFFLE_ITEM","VISIBLE","HIDDEN","id$1","ShuffleItem","element","isRTL","isVisible","isHidden","show","classList","remove","add","removeAttribute","hide","setAttribute","init","addClasses","applyCss","Css","INITIAL","DIRECTION","rtl","ltr","scale","Scale","point","classes","_this","className","removeClasses","_this2","obj","_this3","Object","keys","style","dispose","position","visibility","willChange","right","before","opacity","after","transitionDelay","ShuffleItem$1","testComputedSize","document","body","documentElement","createElement","cssText","appendChild","_window$getComputedSt","window","getComputedStyle","Math","round","removeChild","getNumberStyle","styles","undefined","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","randomize","array","n","floor","random","temp","defaults","reverse","by","compare","sorter","arr","options","opts","_objectSpread","original","from","revert","sort","valA","valB","transitions","eventName","count","uniqueId","cancelTransitionEnd","removeEventListener","onTransitionEnd","evt","currentTarget","target","addEventListener","arrayMax","max","_toConsumableArray","arrayMin","min","getColumnSpan","itemWidth","columnWidth","columns","threshold","columnSpan","abs","ceil","getAvailablePositions","positions","available","getShortColumn","buffer","minPosition","getItemPosition","_ref","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","_tinyEmitterExports","_this4","_callSuper","lastSort","group","ALL_ITEMS","lastFilter","isEnabled","isDestroyed","isInitialized","_transitions","isTransitioning","_queue","el","_getElementOption","TypeError","_init","_inherits","_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","_this5","visible","hidden","item","_doesPassFilter","attr","dataset","FILTER_ATTRIBUTE_KEY","delimiter","split","JSON","parse","testCategory","isArray","filterMode","FilterMode","ANY","_disposeItems","_updateItemCount","visibleItems","_getFilteredItems","_this$options","positionProps","useTransforms","cssProps","k","properties","join","transitionDuration","transitionTimingFunction","transitionProperty","_this6","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","_this7","itemPositions","_getNextPositions","getStylesForTransition","_this8","isCentered","itemsData","_getItemPosition","getTransformedPositions","_shrink","_this9","entries","_iterator","_createForOfIteratorHelper","_step","s","done","entry","contentRect","cancelAnimationFrame","requestAnimationFrame","update","f","styleObject","sign","roundTransforms","transform","_whenTransitionDone","itemCallback","_getTransitionFunction","_this10","_processQueue","_cancelMovement","hasSpeed","hasQueue","_startTransitions","_styleImmediately","EventType","LAYOUT","_this11","callbacks","_movementFinished","objects","elements","_skipTransitions","sortOptions","_ref2","_ref2$recalculateSize","recalculateSizes","_ref2$force","force","newItems","_this12","allItems","allSortedItemsSet","isNewItem","applyHiddenState","disable","enable","isUpdateLayout","_this13","oldItems","getItemByElement","handleLayout","parentNode","REMOVED","find","resetItems","_this14","destroy","unobserve","includeMargins","marginLeft","marginRight","marginTop","marginBottom","zero","duration","delay","ALL","__sorter","__getColumnSpan","__getAvailablePositions","__getShortColumn","__getCenteredPositions"],"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 representing 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 transition 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 // Synchronously 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// Overridable 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"],"mappings":"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","ignoreList":[]}