const p = Math.PI, v = 2 * p, c = 1e-6, q = v - c;
function y() {
  this._x0 = this._y0 = // start of current subpath
  this._x1 = this._y1 = null, this._ = "";
}
function C() {
  return new y();
}
y.prototype = C.prototype = {
  constructor: y,
  moveTo: function(i, s) {
    this._ += "M" + (this._x0 = this._x1 = +i) + "," + (this._y0 = this._y1 = +s);
  },
  closePath: function() {
    this._x1 !== null && (this._x1 = this._x0, this._y1 = this._y0, this._ += "Z");
  },
  lineTo: function(i, s) {
    this._ += "L" + (this._x1 = +i) + "," + (this._y1 = +s);
  },
  quadraticCurveTo: function(i, s, t, h) {
    this._ += "Q" + +i + "," + +s + "," + (this._x1 = +t) + "," + (this._y1 = +h);
  },
  bezierCurveTo: function(i, s, t, h, _, e) {
    this._ += "C" + +i + "," + +s + "," + +t + "," + +h + "," + (this._x1 = +_) + "," + (this._y1 = +e);
  },
  arcTo: function(i, s, t, h, _) {
    i = +i, s = +s, t = +t, h = +h, _ = +_;
    var e = this._x1, r = this._y1, f = t - i, a = h - s, n = e - i, u = r - s, o = n * n + u * u;
    if (_ < 0)
      throw new Error("negative radius: " + _);
    if (this._x1 === null)
      this._ += "M" + (this._x1 = i) + "," + (this._y1 = s);
    else if (o > c)
      if (!(Math.abs(u * f - a * n) > c) || !_)
        this._ += "L" + (this._x1 = i) + "," + (this._y1 = s);
      else {
        var M = t - e, l = h - r, d = f * f + a * a, g = M * M + l * l, b = Math.sqrt(d), T = Math.sqrt(o), A = _ * Math.tan((p - Math.acos((d + o - g) / (2 * b * T))) / 2), x = A / T, L = A / b;
        Math.abs(x - 1) > c && (this._ += "L" + (i + x * n) + "," + (s + x * u)), this._ += "A" + _ + "," + _ + ",0,0," + +(u * M > n * l) + "," + (this._x1 = i + L * f) + "," + (this._y1 = s + L * a);
      }
  },
  arc: function(i, s, t, h, _, e) {
    i = +i, s = +s, t = +t, e = !!e;
    var r = t * Math.cos(h), f = t * Math.sin(h), a = i + r, n = s + f, u = 1 ^ e, o = e ? h - _ : _ - h;
    if (t < 0)
      throw new Error("negative radius: " + t);
    this._x1 === null ? this._ += "M" + a + "," + n : (Math.abs(this._x1 - a) > c || Math.abs(this._y1 - n) > c) && (this._ += "L" + a + "," + n), t && (o < 0 && (o = o % v + v), o > q ? this._ += "A" + t + "," + t + ",0,1," + u + "," + (i - r) + "," + (s - f) + "A" + t + "," + t + ",0,1," + u + "," + (this._x1 = a) + "," + (this._y1 = n) : o > c && (this._ += "A" + t + "," + t + ",0," + +(o >= p) + "," + u + "," + (this._x1 = i + t * Math.cos(_)) + "," + (this._y1 = s + t * Math.sin(_))));
  },
  rect: function(i, s, t, h) {
    this._ += "M" + (this._x0 = this._x1 = +i) + "," + (this._y0 = this._y1 = +s) + "h" + +t + "v" + +h + "h" + -t + "Z";
  },
  toString: function() {
    return this._;
  }
};
function E(i) {
  return function() {
    return i;
  };
}
export {
  E as c,
  C as p
};
