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