text: /** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async,_throttle PURE_IMPORTS_END */
  import * as tslib_1 from "tslib";
  import { Subscriber } from '../Subscriber';
  import { async } from '../scheduler/async';
  import { defaultThrottleConfig } from './throttle';
  export function throttleTime(duration, scheduler, config) {
      if (scheduler === void 0) {
          scheduler = async;
      }
      if (config === void 0) {
          config = defaultThrottleConfig;
      }
      return function (source) { return source.lift(new ThrottleTimeOperator(duration, scheduler, config.leading, config.trailing)); };
  }
  var ThrottleTimeOperator = /*@__PURE__*/ (function () {
      function ThrottleTimeOperator(duration, scheduler, leading, trailing) {
          this.duration = duration;
          this.scheduler = scheduler;
          this.leading = leading;
          this.trailing = trailing;
      }
      ThrottleTimeOperator.prototype.call = function (subscriber, source) {
          return source.subscribe(new ThrottleTimeSubscriber(subscriber, this.duration, this.scheduler, this.leading, this.trailing));
      };
      return ThrottleTimeOperator;
  }());
  var ThrottleTimeSubscriber = /*@__PURE__*/ (function (_super) {
      tslib_1.__extends(ThrottleTimeSubscriber, _super);
      function ThrottleTimeSubscriber(destination, duration, scheduler, leading, trailing) {
          var _this = _super.call(this, destination) || this;
          _this.duration = duration;
          _this.scheduler = scheduler;
          _this.leading = leading;
          _this.trailing = trailing;
          _this._hasTrailingValue = false;
          _this._trailingValue = null;
          return _this;
      }
      ThrottleTimeSubscriber.prototype._next = function (value) {
          if (this.throttled) {
              if (this.trailing) {
                  this._trailingValue = value;
                  this._hasTrailingValue = true;
              }
          }
          else {
              this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.duration, { subscriber: this }));
              if (this.leading) {
                  this.destination.next(value);
              }
              else if (this.trailing) {
                  this._trailingValue = value;
                  this._hasTrailingValue = true;
              }
          }
      };
      ThrottleTimeSubscriber.prototype._complete = function () {
          if (this._hasTrailingValue) {
              this.destination.next(this._trailingValue);
              this.destination.complete();
          }
          else {
              this.destination.complete();
          }
      };
      ThrottleTimeSubscriber.prototype.clearThrottle = function () {
          var throttled = this.throttled;
          if (throttled) {
              if (this.trailing && this._hasTrailingValue) {
                  this.destination.next(this._trailingValue);
                  this._trailingValue = null;
                  this._hasTrailingValue = false;
              }
              throttled.unsubscribe();
              this.remove(throttled);
              this.throttled = null;
          }
      };
      return ThrottleTimeSubscriber;
  }(Subscriber));
  function dispatchNext(arg) {
      var subscriber = arg.subscriber;
      subscriber.clearThrottle();
  }
  //# sourceMappingURL=throttleTime.js.map
  