_shrink(collection = this._getConcealedItems()) {
    let count = 0;
    collection.forEach((item) => {
      function callback() {
        item.applyCss(ShuffleItem.Css.HIDDEN.after);
      }

      // Continuing would add a transitionend event listener to the element, but
      // that listener would not execute because the transform and opacity would
      // stay the same.
      // The callback is executed here because it is not guaranteed to be called
      // after the transitionend event because the transitionend could be
      // canceled if another animation starts.
      if (item.isHidden) {
        item.applyCss(ShuffleItem.Css.HIDDEN.before);
        callback();
        return;
      }

      item.scale = ShuffleItem.Scale.HIDDEN;
      item.isHidden = true;

      const styles = this.getStylesForTransition(item, ShuffleItem.Css.HIDDEN.before);
      styles.transitionDelay = `${this._getStaggerAmount(count)}ms`;

      this._queue.push({
        item,
        styles,
        callback,
      });

      count += 1;
    });
  }
Hides the elements that don't match our filter.
@param {ShuffleItem[]} collection Collection to shrink.
@private