'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var getScrollParent = require('./getScrollParent.js');
var getParentNode = require('./getParentNode.js');
var getWindow = require('./getWindow.js');
var isScrollParent = require('./isScrollParent.js');

/*
given a DOM element, return the list of all scroll parents, up the list of ancesors
until we get to the top window object. This list is what we attach scroll listeners
to, because if any of these parent elements scroll, we'll need to re-calculate the
reference element's position.
*/

function listScrollParents(element, list) {
  var _element$ownerDocumen;

  if (list === void 0) {
    list = [];
  }

  var scrollParent = getScrollParent.default(element);
  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
  var win = getWindow.default(scrollParent);
  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent.default(scrollParent) ? scrollParent : []) : scrollParent;
  var updatedList = list.concat(target);
  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
  updatedList.concat(listScrollParents(getParentNode.default(target)));
}

exports.default = listScrollParents;
//# sourceMappingURL=listScrollParents.js.map
