'use strict';
function debounce(t, o, i) {
    var n;
    var u;
    var r;
    var a;
    var c;
    function d() {
        var e = +new Date() - a;
        if (e < o && 0 <= e) {
            n = setTimeout(d, o - e);
        } else {
            n = void 0;
            i || ((c = t.apply(r, u)), n || (u = r = void 0));
        }
    }
    function e() {
        r = this;
        u = arguments;
        a = +new Date();
        var e = i && !n;
        n = n || setTimeout(d, o);
        if (e) {
            c = t.apply(r, u);
            u = r = void 0;
        }
        return c;
    }
    e.cancel = function () {
        if (void 0 !== n) {
            clearTimeout(n);
            n = void 0;
        }
        u = r = void 0;
    };
    return e;
}
Object.defineProperty(exports, '__esModule', {
    value: true
});
exports.default = debounce;
