whole_func_string: function Popper(reference, popper) {
        var _this = this;
  
        var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
        classCallCheck(this, Popper);
  
        this.scheduleUpdate = function () {
          return requestAnimationFrame(_this.update);
        }; // make update() debounced, so that it only runs at most once-per-tick
  
  
        this.update = debounce(this.update.bind(this)); // with {} we create a new object with the options inside it
  
        this.options = _extends({}, Popper.Defaults, options); // init state
  
        this.state = {
          isDestroyed: false,
          isCreated: false,
          scrollParents: []
        }; // get reference and popper elements (allow jQuery wrappers)
  
        this.reference = reference && reference.jquery ? reference[0] : reference;
        this.popper = popper && popper.jquery ? popper[0] : popper; // Deep merge modifiers options
  
        this.options.modifiers = {};
        Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {
          _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});
        }); // Refactoring modifiers' list (Object => Array)
  
        this.modifiers = Object.keys(this.options.modifiers).map(function (name) {
          return _extends({
            name: name
          }, _this.options.modifiers[name]);
        }) // sort the modifiers by order
        .sort(function (a, b) {
          return a.order - b.order;
        }); // modifiers have the ability to execute arbitrary code when Popper.js get inited
        // such code is executed in the same order of its modifier
        // they could add new properties to their options configuration
        // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!
  
        this.modifiers.forEach(function (modifierOptions) {
          if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {
            modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);
          }
        }); // fire the first update to position the popper in the right place
  
        this.update();
        var eventsEnabled = this.options.eventsEnabled;
  
        if (eventsEnabled) {
          // setup event listeners, they will take care of update the position in specific situations
          this.enableEventListeners();
        }
  
        this.state.eventsEnabled = eventsEnabled;
      }
func_code_string: function Popper(reference, popper) {
        var _this = this;
  
        var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
        classCallCheck(this, Popper);
  
        this.scheduleUpdate = function () {
          return requestAnimationFrame(_this.update);
        }; // make update() debounced, so that it only runs at most once-per-tick
  
  
        this.update = debounce(this.update.bind(this)); // with {} we create a new object with the options inside it
  
        this.options = _extends({}, Popper.Defaults, options); // init state
  
        this.state = {
          isDestroyed: false,
          isCreated: false,
          scrollParents: []
        }; // get reference and popper elements (allow jQuery wrappers)
  
        this.reference = reference && reference.jquery ? reference[0] : reference;
        this.popper = popper && popper.jquery ? popper[0] : popper; // Deep merge modifiers options
  
        this.options.modifiers = {};
        Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {
          _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});
        }); // Refactoring modifiers' list (Object => Array)
  
        this.modifiers = Object.keys(this.options.modifiers).map(function (name) {
          return _extends({
            name: name
          }, _this.options.modifiers[name]);
        }) // sort the modifiers by order
        .sort(function (a, b) {
          return a.order - b.order;
        }); // modifiers have the ability to execute arbitrary code when Popper.js get inited
        // such code is executed in the same order of its modifier
        // they could add new properties to their options configuration
        // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!
  
        this.modifiers.forEach(function (modifierOptions) {
          if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {
            modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);
          }
        }); // fire the first update to position the popper in the right place
  
        this.update();
        var eventsEnabled = this.options.eventsEnabled;
  
        if (eventsEnabled) {
          // setup event listeners, they will take care of update the position in specific situations
          this.enableEventListeners();
        }
  
        this.state.eventsEnabled = eventsEnabled;
      }
func_documentation_string: Creates a new Popper.js instance.
  @class Popper
  @param {HTMLElement|referenceObject} reference - The reference element used to position the popper
  @param {HTMLElement} popper - The HTML element used as the popper
  @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)
  @return {Object} instance - The generated Popper.js instance