svg-path-commander 2.0.5 → 2.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/.eslintrc.cjs +1 -1
  2. package/.lgtm.yml +0 -0
  3. package/.prettierrc.json +0 -0
  4. package/LICENSE +0 -0
  5. package/README.md +5 -5
  6. package/cypress/e2e/svg-path-commander.spec.ts +1 -1
  7. package/cypress/fixtures/shapeObjects.js +0 -0
  8. package/cypress/fixtures/shapes.js +7 -7
  9. package/cypress/fixtures/simpleShapes.js +0 -0
  10. package/cypress/plugins/esbuild-istanbul.ts +0 -0
  11. package/cypress/plugins/tsCompile.ts +0 -0
  12. package/cypress/support/commands.ts +0 -0
  13. package/cypress/support/e2e.ts +0 -0
  14. package/cypress/test.html +0 -0
  15. package/cypress.config.ts +0 -0
  16. package/dist/svg-path-commander.cjs +1 -1
  17. package/dist/svg-path-commander.cjs.map +1 -1
  18. package/dist/svg-path-commander.d.ts +8 -0
  19. package/dist/svg-path-commander.js +1 -1
  20. package/dist/svg-path-commander.js.map +1 -1
  21. package/dist/svg-path-commander.mjs +66 -63
  22. package/dist/svg-path-commander.mjs.map +1 -1
  23. package/dts.config.ts +0 -0
  24. package/package.json +13 -13
  25. package/src/convert/pathToAbsolute.ts +0 -0
  26. package/src/convert/pathToCurve.ts +0 -0
  27. package/src/convert/pathToRelative.ts +0 -0
  28. package/src/convert/pathToString.ts +0 -0
  29. package/src/index.ts +2 -0
  30. package/src/interface.ts +0 -0
  31. package/src/math/distanceSquareRoot.ts +0 -0
  32. package/src/math/midPoint.ts +0 -0
  33. package/src/math/polygonArea.ts +0 -0
  34. package/src/math/polygonLength.ts +0 -0
  35. package/src/math/rotateVector.ts +0 -0
  36. package/src/options/options.ts +0 -0
  37. package/src/parser/error.ts +0 -0
  38. package/src/parser/finalizeSegment.ts +0 -0
  39. package/src/parser/invalidPathValue.ts +0 -0
  40. package/src/parser/isArcCommand.ts +0 -0
  41. package/src/parser/isDigit.ts +0 -0
  42. package/src/parser/isDigitStart.ts +0 -0
  43. package/src/parser/isPathCommand.ts +0 -0
  44. package/src/parser/isSpace.ts +0 -0
  45. package/src/parser/paramsCount.ts +0 -0
  46. package/src/parser/paramsParser.ts +0 -0
  47. package/src/parser/parsePathString.ts +0 -0
  48. package/src/parser/pathParser.ts +0 -0
  49. package/src/parser/scanFlag.ts +0 -0
  50. package/src/parser/scanParam.ts +0 -0
  51. package/src/parser/scanSegment.ts +0 -0
  52. package/src/parser/skipSpaces.ts +0 -0
  53. package/src/process/arcToCubic.ts +0 -0
  54. package/src/process/fixArc.ts +0 -0
  55. package/src/process/getSVGMatrix.ts +0 -0
  56. package/src/process/lineToCubic.ts +3 -3
  57. package/src/process/normalizePath.ts +0 -0
  58. package/src/process/normalizeSegment.ts +0 -0
  59. package/src/process/optimizePath.ts +0 -0
  60. package/src/process/projection2d.ts +0 -0
  61. package/src/process/quadToCubic.ts +0 -0
  62. package/src/process/reverseCurve.ts +0 -0
  63. package/src/process/reversePath.ts +0 -0
  64. package/src/process/roundPath.ts +0 -0
  65. package/src/process/segmentToCubic.ts +0 -0
  66. package/src/process/shortenSegment.ts +0 -0
  67. package/src/process/splitCubic.ts +0 -0
  68. package/src/process/splitPath.ts +0 -0
  69. package/src/process/transformPath.ts +0 -0
  70. package/src/types.ts +0 -0
  71. package/src/util/getClosestPoint.ts +0 -0
  72. package/src/util/getDrawDirection.ts +0 -0
  73. package/src/util/getPathArea.ts +0 -0
  74. package/src/util/getPathBBox.ts +0 -0
  75. package/src/util/getPointAtLength.ts +0 -0
  76. package/src/util/getPropertiesAtLength.ts +0 -0
  77. package/src/util/getPropertiesAtPoint.ts +0 -0
  78. package/src/util/getSegmentAtLength.ts +0 -0
  79. package/src/util/getSegmentOfPoint.ts +0 -0
  80. package/src/util/getTotalLength.ts +0 -0
  81. package/src/util/isAbsoluteArray.ts +0 -0
  82. package/src/util/isCurveArray.ts +0 -0
  83. package/src/util/isNormalizedArray.ts +0 -0
  84. package/src/util/isPathArray.ts +0 -0
  85. package/src/util/isPointInStroke.ts +0 -0
  86. package/src/util/isRelativeArray.ts +0 -0
  87. package/src/util/isValidPath.ts +0 -0
  88. package/src/util/pathLengthFactory.ts +0 -0
  89. package/src/util/segmentArcFactory.ts +0 -0
  90. package/src/util/segmentCubicFactory.ts +0 -0
  91. package/src/util/segmentLineFactory.ts +0 -0
  92. package/src/util/segmentQuadFactory.ts +0 -0
  93. package/src/util/shapeParams.ts +0 -0
  94. package/src/util/shapeToPath.ts +0 -0
  95. package/src/util/shapeToPathArray.ts +0 -0
  96. package/tsconfig.json +0 -0
  97. package/vite.config.ts +0 -0
@@ -1,6 +1,6 @@
1
- var Gt = Object.defineProperty;
2
- var te = (e, t, n) => t in e ? Gt(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;
3
- var N = (e, t, n) => (te(e, typeof t != "symbol" ? t + "" : t, n), n);
1
+ var te = Object.defineProperty;
2
+ var ee = (e, t, n) => t in e ? te(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;
3
+ var N = (e, t, n) => (ee(e, typeof t != "symbol" ? t + "" : t, n), n);
4
4
  const mt = {
5
5
  origin: [0, 0, 0],
6
6
  round: 4
@@ -21,7 +21,7 @@ const mt = {
21
21
  const { data: r } = e;
22
22
  for (; r.length >= U[n] && (n === "m" && r.length > 2 ? (e.segments.push([t, ...r.splice(0, 2)]), n = "l", t = t === "m" ? "l" : "L") : e.segments.push([t, ...r.splice(0, U[n])]), !!U[n]); )
23
23
  ;
24
- }, ee = (e) => {
24
+ }, ne = (e) => {
25
25
  const { index: t, pathValue: n } = e, r = n.charCodeAt(t);
26
26
  if (r === 48) {
27
27
  e.param = 0, e.index += 1;
@@ -32,7 +32,7 @@ const mt = {
32
32
  return;
33
33
  }
34
34
  e.err = `${k}: invalid Arc flag "${n[t]}", expecting 0 or 1 at index ${t}`;
35
- }, D = (e) => e >= 48 && e <= 57, R = "Invalid path value", ne = (e) => {
35
+ }, D = (e) => e >= 48 && e <= 57, R = "Invalid path value", se = (e) => {
36
36
  const { max: t, pathValue: n, index: r } = e;
37
37
  let s = r, i = !1, o = !1, a = !1, l = !1, c;
38
38
  if (s >= t) {
@@ -71,7 +71,7 @@ const mt = {
71
71
  }
72
72
  }
73
73
  e.index = s, e.param = +e.pathValue.slice(r, s);
74
- }, se = (e) => [
74
+ }, re = (e) => [
75
75
  // Special spaces
76
76
  5760,
77
77
  6158,
@@ -103,9 +103,9 @@ const mt = {
103
103
  160
104
104
  ].includes(e), V = (e) => {
105
105
  const { pathValue: t, max: n } = e;
106
- for (; e.index < n && se(t.charCodeAt(e.index)); )
106
+ for (; e.index < n && re(t.charCodeAt(e.index)); )
107
107
  e.index += 1;
108
- }, re = (e) => {
108
+ }, ie = (e) => {
109
109
  switch (e | 32) {
110
110
  case 109:
111
111
  case 122:
@@ -121,9 +121,9 @@ const mt = {
121
121
  default:
122
122
  return !1;
123
123
  }
124
- }, ie = (e) => D(e) || e === 43 || e === 45 || e === 46, oe = (e) => (e | 32) === 97, jt = (e) => {
124
+ }, oe = (e) => D(e) || e === 43 || e === 45 || e === 46, ce = (e) => (e | 32) === 97, jt = (e) => {
125
125
  const { max: t, pathValue: n, index: r } = e, s = n.charCodeAt(r), i = U[n[r].toLowerCase()];
126
- if (e.segmentStart = r, !re(s)) {
126
+ if (e.segmentStart = r, !ie(s)) {
127
127
  e.err = `${k}: ${R} "${n[r]}" is not a path command`;
128
128
  return;
129
129
  }
@@ -133,11 +133,11 @@ const mt = {
133
133
  }
134
134
  for (; ; ) {
135
135
  for (let o = i; o > 0; o -= 1) {
136
- if (oe(s) && (o === 3 || o === 4) ? ee(e) : ne(e), e.err.length)
136
+ if (ce(s) && (o === 3 || o === 4) ? ne(e) : se(e), e.err.length)
137
137
  return;
138
138
  e.data.push(e.param), V(e), e.index < t && n.charCodeAt(e.index) === 44 && (e.index += 1, V(e));
139
139
  }
140
- if (e.index >= e.max || !ie(n.charCodeAt(e.index)))
140
+ if (e.index >= e.max || !oe(n.charCodeAt(e.index)))
141
141
  break;
142
142
  }
143
143
  Tt(e);
@@ -159,15 +159,15 @@ const _ = (e) => Array.isArray(e) && e.every((t) => {
159
159
  if (t.err && t.err.length)
160
160
  throw TypeError(t.err);
161
161
  return t.segments;
162
- }, ce = (e) => {
162
+ }, le = (e) => {
163
163
  const t = e.length;
164
164
  let n = -1, r, s = e[t - 1], i = 0;
165
165
  for (; ++n < t; )
166
166
  r = s, s = e[n], i += r[1] * s[0] - r[0] * s[1];
167
167
  return i / 2;
168
- }, W = (e, t) => Math.sqrt((e[0] - t[0]) * (e[0] - t[0]) + (e[1] - t[1]) * (e[1] - t[1])), le = (e) => e.reduce((t, n, r) => r ? t + W(e[r - 1], n) : 0, 0);
169
- var ae = Object.defineProperty, me = (e, t, n) => t in e ? ae(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n, C = (e, t, n) => (me(e, typeof t != "symbol" ? t + "" : t, n), n);
170
- const he = {
168
+ }, W = (e, t) => Math.sqrt((e[0] - t[0]) * (e[0] - t[0]) + (e[1] - t[1]) * (e[1] - t[1])), ae = (e) => e.reduce((t, n, r) => r ? t + W(e[r - 1], n) : 0, 0);
169
+ var me = Object.defineProperty, he = (e, t, n) => t in e ? me(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n, C = (e, t, n) => (he(e, typeof t != "symbol" ? t + "" : t, n), n);
170
+ const ue = {
171
171
  a: 1,
172
172
  b: 0,
173
173
  c: 0,
@@ -192,7 +192,7 @@ const he = {
192
192
  m44: 1,
193
193
  is2D: !0,
194
194
  isIdentity: !0
195
- }, It = (e) => (e instanceof Float64Array || e instanceof Float32Array || Array.isArray(e) && e.every((t) => typeof t == "number")) && [6, 16].some((t) => e.length === t), Dt = (e) => e instanceof DOMMatrix || e instanceof v || typeof e == "object" && Object.keys(he).every((t) => e && t in e), G = (e) => {
195
+ }, It = (e) => (e instanceof Float64Array || e instanceof Float32Array || Array.isArray(e) && e.every((t) => typeof t == "number")) && [6, 16].some((t) => e.length === t), Dt = (e) => e instanceof DOMMatrix || e instanceof v || typeof e == "object" && Object.keys(ue).every((t) => e && t in e), G = (e) => {
196
196
  const t = new v(), n = Array.from(e);
197
197
  if (!It(n))
198
198
  throw TypeError(`CSSMatrix: "${n.join(",")}" must be an array with 6/16 numbers.`);
@@ -583,7 +583,7 @@ e.every(([t]) => t === t.toUpperCase()), Q = (e) => {
583
583
  m = [c, ...a];
584
584
  return c === "Z" ? (n = s, r = i) : c === "H" ? [, n] = m : c === "V" ? [, r] = m : ([n, r] = m.slice(-2), c === "M" && (s = n, i = r)), m;
585
585
  });
586
- }, ue = (e, t) => {
586
+ }, fe = (e, t) => {
587
587
  const [n] = e, { x1: r, y1: s, x2: i, y2: o } = t, a = e.slice(1).map(Number);
588
588
  let l = e;
589
589
  if ("TQ".includes(n) || (t.qx = null, t.qy = null), n === "H")
@@ -621,12 +621,12 @@ e.every(([t]) => t === t.toUpperCase()), Q = (e) => {
621
621
  return [...e];
622
622
  const t = Q(e), n = { ...ut }, r = t.length;
623
623
  for (let s = 0; s < r; s += 1) {
624
- t[s], t[s] = ue(t[s], n);
624
+ t[s], t[s] = fe(t[s], n);
625
625
  const i = t[s], o = i.length;
626
626
  n.x1 = +i[o - 2], n.y1 = +i[o - 1], n.x2 = +i[o - 4] || n.x1, n.y2 = +i[o - 3] || n.y1;
627
627
  }
628
628
  return t;
629
- }, j = (e, t, n) => {
629
+ }, E = (e, t, n) => {
630
630
  const [r, s] = e, [i, o] = t;
631
631
  return [r + (i - r) * n, s + (o - s) * n];
632
632
  }, dt = (e, t, n, r, s) => {
@@ -638,7 +638,7 @@ e.every(([t]) => t === t.toUpperCase()), Q = (e) => {
638
638
  else if (s >= i)
639
639
  o = { x: n, y: r };
640
640
  else {
641
- const [a, l] = j([e, t], [n, r], s / i);
641
+ const [a, l] = E([e, t], [n, r], s / i);
642
642
  o = { x: a, y: l };
643
643
  }
644
644
  return {
@@ -656,7 +656,7 @@ e.every(([t]) => t === t.toUpperCase()), Q = (e) => {
656
656
  }, Lt = (e, t) => {
657
657
  const { x: n, y: r } = e, { x: s, y: i } = t, o = n * s + r * i, a = Math.sqrt((n ** 2 + r ** 2) * (s ** 2 + i ** 2));
658
658
  return (n * i - r * s < 0 ? -1 : 1) * Math.acos(o / a);
659
- }, fe = (e, t, n, r, s, i, o, a, l, c) => {
659
+ }, ye = (e, t, n, r, s, i, o, a, l, c) => {
660
660
  const { abs: m, sin: u, cos: y, sqrt: g, PI: f } = Math;
661
661
  let h = m(n), x = m(r);
662
662
  const b = (s % 360 + 360) % 360 * (f / 180);
@@ -669,8 +669,8 @@ e.every(([t]) => t === t.toUpperCase()), Q = (e) => {
669
669
  y: -u(b) * A + y(b) * d
670
670
  }, T = M.x ** 2 / h ** 2 + M.y ** 2 / x ** 2;
671
671
  T > 1 && (h *= g(T), x *= g(T));
672
- const E = h ** 2 * x ** 2 - h ** 2 * M.y ** 2 - x ** 2 * M.x ** 2, H = h ** 2 * M.y ** 2 + x ** 2 * M.x ** 2;
673
- let F = E / H;
672
+ const j = h ** 2 * x ** 2 - h ** 2 * M.y ** 2 - x ** 2 * M.x ** 2, H = h ** 2 * M.y ** 2 + x ** 2 * M.x ** 2;
673
+ let F = j / H;
674
674
  F = F < 0 ? 0 : F;
675
675
  const tt = (i !== o ? 1 : -1) * g(F), S = {
676
676
  x: tt * (h * M.y / x),
@@ -692,13 +692,13 @@ e.every(([t]) => t === t.toUpperCase()), Q = (e) => {
692
692
  x: y(b) * B - u(b) * J + et.x,
693
693
  y: u(b) * B + y(b) * J + et.y
694
694
  };
695
- }, ye = (e, t, n, r, s, i, o, a, l, c) => {
695
+ }, ge = (e, t, n, r, s, i, o, a, l, c) => {
696
696
  const m = typeof c == "number";
697
697
  let u = e, y = t, g = 0, f = [u, y, g], h = [u, y], x = 0, p = { x: 0, y: 0 }, b = [{ x: u, y }];
698
698
  m && c <= 0 && (p = { x: u, y });
699
699
  const A = 300;
700
700
  for (let d = 0; d <= A; d += 1) {
701
- if (x = d / A, { x: u, y } = fe(e, t, n, r, s, i, o, a, l, x), b = [...b, { x: u, y }], g += W(h, [u, y]), h = [u, y], m && g > c && c > f[2]) {
701
+ if (x = d / A, { x: u, y } = ye(e, t, n, r, s, i, o, a, l, x), b = [...b, { x: u, y }], g += W(h, [u, y]), h = [u, y], m && g > c && c > f[2]) {
702
702
  const M = (g - c) / (g - f[2]);
703
703
  p = {
704
704
  x: h[0] * (1 - M) + f[0] * M,
@@ -719,19 +719,19 @@ e.every(([t]) => t === t.toUpperCase()), Q = (e) => {
719
719
  y: Math.max(...b.map((d) => d.y))
720
720
  }
721
721
  };
722
- }, ge = (e, t, n, r, s, i, o, a, l) => {
722
+ }, xe = (e, t, n, r, s, i, o, a, l) => {
723
723
  const c = 1 - l;
724
724
  return {
725
725
  x: c ** 3 * e + 3 * c ** 2 * l * n + 3 * c * l ** 2 * s + l ** 3 * o,
726
726
  y: c ** 3 * t + 3 * c ** 2 * l * r + 3 * c * l ** 2 * i + l ** 3 * a
727
727
  };
728
- }, xe = (e, t, n, r, s, i, o, a, l) => {
728
+ }, pe = (e, t, n, r, s, i, o, a, l) => {
729
729
  const c = typeof l == "number";
730
730
  let m = e, u = t, y = 0, g = [m, u, y], f = [m, u], h = 0, x = { x: 0, y: 0 }, p = [{ x: m, y: u }];
731
731
  c && l <= 0 && (x = { x: m, y: u });
732
732
  const b = 300;
733
733
  for (let A = 0; A <= b; A += 1) {
734
- if (h = A / b, { x: m, y: u } = ge(e, t, n, r, s, i, o, a, h), p = [...p, { x: m, y: u }], y += W(f, [m, u]), f = [m, u], c && y > l && l > g[2]) {
734
+ if (h = A / b, { x: m, y: u } = xe(e, t, n, r, s, i, o, a, h), p = [...p, { x: m, y: u }], y += W(f, [m, u]), f = [m, u], c && y > l && l > g[2]) {
735
735
  const d = (y - l) / (y - g[2]);
736
736
  x = {
737
737
  x: f[0] * (1 - d) + g[0] * d,
@@ -752,19 +752,19 @@ e.every(([t]) => t === t.toUpperCase()), Q = (e) => {
752
752
  y: Math.max(...p.map((A) => A.y))
753
753
  }
754
754
  };
755
- }, pe = (e, t, n, r, s, i, o) => {
755
+ }, be = (e, t, n, r, s, i, o) => {
756
756
  const a = 1 - o;
757
757
  return {
758
758
  x: a ** 2 * e + 2 * a * o * n + o ** 2 * s,
759
759
  y: a ** 2 * t + 2 * a * o * r + o ** 2 * i
760
760
  };
761
- }, be = (e, t, n, r, s, i, o) => {
761
+ }, de = (e, t, n, r, s, i, o) => {
762
762
  const a = typeof o == "number";
763
763
  let l = e, c = t, m = 0, u = [l, c, m], y = [l, c], g = 0, f = { x: 0, y: 0 }, h = [{ x: l, y: c }];
764
764
  a && o <= 0 && (f = { x: l, y: c });
765
765
  const x = 300;
766
766
  for (let p = 0; p <= x; p += 1) {
767
- if (g = p / x, { x: l, y: c } = pe(e, t, n, r, s, i, g), h = [...h, { x: l, y: c }], m += W(y, [l, c]), y = [l, c], a && m > o && o > u[2]) {
767
+ if (g = p / x, { x: l, y: c } = be(e, t, n, r, s, i, g), h = [...h, { x: l, y: c }], m += W(y, [l, c]), y = [l, c], a && m > o && o > u[2]) {
768
768
  const b = (m - o) / (m - u[2]);
769
769
  f = {
770
770
  x: y[0] * (1 - b) + u[0] * b,
@@ -792,13 +792,13 @@ e.every(([t]) => t === t.toUpperCase()), Q = (e) => {
792
792
  u = n[d], [o] = u, s = o === "M", i = s ? i : [a, l, ...u.slice(1)], s ? ([, c, m] = u, h = { x: c, y: m }, x = h, f = 0, r && t < 1e-3 && (b = h)) : o === "L" ? { length: f, min: h, max: x, point: p } = dt(
793
793
  ...i,
794
794
  (t || 0) - A
795
- ) : o === "A" ? { length: f, min: h, max: x, point: p } = ye(
795
+ ) : o === "A" ? { length: f, min: h, max: x, point: p } = ge(
796
796
  ...i,
797
797
  (t || 0) - A
798
- ) : o === "C" ? { length: f, min: h, max: x, point: p } = xe(
798
+ ) : o === "C" ? { length: f, min: h, max: x, point: p } = pe(
799
799
  ...i,
800
800
  (t || 0) - A
801
- ) : o === "Q" ? { length: f, min: h, max: x, point: p } = be(
801
+ ) : o === "Q" ? { length: f, min: h, max: x, point: p } = de(
802
802
  ...i,
803
803
  (t || 0) - A
804
804
  ) : o === "Z" && (i = [a, l, c, m], { length: f, min: h, max: x, point: p } = dt(
@@ -861,21 +861,21 @@ e.every(([t]) => t === t.toUpperCase()), Q = (e) => {
861
861
  }, Ut = (e, t, n, r, s, i, o, a, l, c) => {
862
862
  let m = e, u = t, y = n, g = r, f = a, h = l;
863
863
  const x = Math.PI * 120 / 180, p = Math.PI / 180 * (+s || 0);
864
- let b = [], A, d, M, T, E;
864
+ let b = [], A, d, M, T, j;
865
865
  if (c)
866
- [d, M, T, E] = c;
866
+ [d, M, T, j] = c;
867
867
  else {
868
868
  A = rt(m, u, -p), m = A.x, u = A.y, A = rt(f, h, -p), f = A.x, h = A.y;
869
869
  const P = (m - f) / 2, L = (u - h) / 2;
870
870
  let I = P * P / (y * y) + L * L / (g * g);
871
871
  I > 1 && (I = Math.sqrt(I), y *= I, g *= I);
872
872
  const xt = y * y, pt = g * g, Ct = (i === o ? -1 : 1) * Math.sqrt(Math.abs((xt * pt - xt * L * L - pt * P * P) / (xt * L * L + pt * P * P)));
873
- T = Ct * y * L / g + (m + f) / 2, E = Ct * -g * P / y + (u + h) / 2, d = Math.asin(((u - E) / g * 10 ** 9 >> 0) / 10 ** 9), M = Math.asin(((h - E) / g * 10 ** 9 >> 0) / 10 ** 9), d = m < T ? Math.PI - d : d, M = f < T ? Math.PI - M : M, d < 0 && (d = Math.PI * 2 + d), M < 0 && (M = Math.PI * 2 + M), o && d > M && (d -= Math.PI * 2), !o && M > d && (M -= Math.PI * 2);
873
+ T = Ct * y * L / g + (m + f) / 2, j = Ct * -g * P / y + (u + h) / 2, d = Math.asin(((u - j) / g * 10 ** 9 >> 0) / 10 ** 9), M = Math.asin(((h - j) / g * 10 ** 9 >> 0) / 10 ** 9), d = m < T ? Math.PI - d : d, M = f < T ? Math.PI - M : M, d < 0 && (d = Math.PI * 2 + d), M < 0 && (M = Math.PI * 2 + M), o && d > M && (d -= Math.PI * 2), !o && M > d && (M -= Math.PI * 2);
874
874
  }
875
875
  let H = M - d;
876
876
  if (Math.abs(H) > x) {
877
877
  const P = M, L = f, I = h;
878
- M = d + x * (o && M > d ? 1 : -1), f = T + y * Math.cos(M), h = E + g * Math.sin(M), b = Ut(f, h, y, g, s, 0, o, L, I, [M, P, T, E]);
878
+ M = d + x * (o && M > d ? 1 : -1), f = T + y * Math.cos(M), h = j + g * Math.sin(M), b = Ut(f, h, y, g, s, 0, o, L, I, [M, P, T, j]);
879
879
  }
880
880
  H = M - d;
881
881
  const F = Math.cos(d), tt = Math.sin(d), S = Math.cos(M), et = Math.sin(M), Y = Math.tan(H / 4), nt = 4 / 3 * y * Y, st = 4 / 3 * g * Y, $ = [m, u], q = [m + nt * tt, u - st * F], B = [f + nt * et, h - st * S], J = [f, h];
@@ -886,7 +886,7 @@ e.every(([t]) => t === t.toUpperCase()), Q = (e) => {
886
886
  for (let P = 0, L = b.length; P < L; P += 1)
887
887
  gt[P] = P % 2 ? rt(b[P - 1], b[P], p).y : rt(b[P], b[P + 1], p).x;
888
888
  return gt;
889
- }, de = (e, t, n, r, s, i) => {
889
+ }, Me = (e, t, n, r, s, i) => {
890
890
  const o = 0.3333333333333333, a = 2 / 3;
891
891
  return [
892
892
  o * e + a * n,
@@ -901,11 +901,14 @@ e.every(([t]) => t === t.toUpperCase()), Q = (e) => {
901
901
  i
902
902
  // x,y
903
903
  ];
904
- }, St = (e, t, n, r) => [...j([e, t], [n, r], 0.5), n, r, n, r], ot = (e, t) => {
904
+ }, St = (e, t, n, r) => {
905
+ const s = E([e, t], [n, r], 0.3333333333333333), i = E([e, t], [n, r], 2 / 3);
906
+ return [...s, ...i, n, r];
907
+ }, ot = (e, t) => {
905
908
  const [n] = e, r = e.slice(1).map(Number), [s, i] = r;
906
909
  let o;
907
910
  const { x1: a, y1: l, x: c, y: m } = t;
908
- return "TQ".includes(n) || (t.qx = null, t.qy = null), n === "M" ? (t.x = s, t.y = i, e) : n === "A" ? (o = [a, l, ...r], ["C", ...Ut(...o)]) : n === "Q" ? (t.qx = s, t.qy = i, o = [a, l, ...r], ["C", ...de(...o)]) : n === "L" ? ["C", ...St(a, l, s, i)] : n === "Z" ? ["C", ...St(a, l, c, m)] : e;
911
+ return "TQ".includes(n) || (t.qx = null, t.qy = null), n === "M" ? (t.x = s, t.y = i, e) : n === "A" ? (o = [a, l, ...r], ["C", ...Ut(...o)]) : n === "Q" ? (t.qx = s, t.qy = i, o = [a, l, ...r], ["C", ...Me(...o)]) : n === "L" ? ["C", ...St(a, l, s, i)] : n === "Z" ? ["C", ...St(a, l, c, m)] : e;
909
912
  }, ct = (e) => {
910
913
  if (Jt(e))
911
914
  return [...e];
@@ -917,17 +920,17 @@ e.every(([t]) => t === t.toUpperCase()), Q = (e) => {
917
920
  n.x1 = +a[l - 2], n.y1 = +a[l - 1], n.x2 = +a[l - 4] || n.x1, n.y2 = +a[l - 3] || n.y1;
918
921
  }
919
922
  return t;
920
- }, Me = (e, t, n, r, s, i, o, a) => 3 * ((a - t) * (n + s) - (o - e) * (r + i) + r * (e - s) - n * (t - i) + a * (s + e / 3) - o * (i + t / 3)) / 20, Vt = (e) => {
923
+ }, Ae = (e, t, n, r, s, i, o, a) => 3 * ((a - t) * (n + s) - (o - e) * (r + i) + r * (e - s) - n * (t - i) + a * (s + e / 3) - o * (i + t / 3)) / 20, Vt = (e) => {
921
924
  let t = 0, n = 0, r = 0;
922
925
  return ct(e).map((s) => {
923
926
  switch (s[0]) {
924
927
  case "M":
925
928
  return [, t, n] = s, 0;
926
929
  default:
927
- return r = Me(t, n, ...s.slice(1)), [t, n] = s.slice(-2), r;
930
+ return r = Ae(t, n, ...s.slice(1)), [t, n] = s.slice(-2), r;
928
931
  }
929
932
  }).reduce((s, i) => s + i, 0);
930
- }, X = (e) => ft(e).length, Ae = (e) => Vt(ct(e)) >= 0, K = (e, t) => ft(e, t).point, Pt = (e, t) => {
933
+ }, X = (e) => ft(e).length, Ne = (e) => Vt(ct(e)) >= 0, K = (e, t) => ft(e, t).point, Pt = (e, t) => {
931
934
  const n = Z(e);
932
935
  let r = [...n], s = X(r), i = r.length - 1, o = 0, a = 0, l = n[0];
933
936
  const [c, m] = l.slice(-2), u = { x: c, y: m };
@@ -969,7 +972,7 @@ e.every(([t]) => t === t.toUpperCase()), Q = (e) => {
969
972
  f = m - o, y = K(r, f), x = i(y), h = m + o, g = K(r, h), p = i(g), f >= 0 && x < u ? (l = y, m = f, u = x) : h <= s && p < u ? (l = g, m = h, u = p) : o /= 2;
970
973
  const b = Pt(n, m), A = Math.sqrt(u);
971
974
  return { closest: l, distance: A, segment: b };
972
- }, Ne = (e, t) => yt(e, t).closest, we = (e, t) => yt(e, t).segment, ve = (e, t) => Pt(e, t).segment, Pe = (e, t) => {
975
+ }, we = (e, t) => yt(e, t).closest, ve = (e, t) => yt(e, t).segment, Pe = (e, t) => Pt(e, t).segment, Ce = (e, t) => {
973
976
  const { distance: n } = yt(e, t);
974
977
  return Math.abs(n) < 1e-3;
975
978
  }, Kt = (e) => {
@@ -988,33 +991,33 @@ e.slice(1).every(([t]) => t === t.toLowerCase()), lt = {
988
991
  polygon: ["points"],
989
992
  polyline: ["points"],
990
993
  glyph: ["d"]
991
- }, Ce = (e) => {
994
+ }, Te = (e) => {
992
995
  let { x1: t, y1: n, x2: r, y2: s } = e;
993
996
  return [t, n, r, s] = [t, n, r, s].map((i) => +i), [
994
997
  ["M", t, n],
995
998
  ["L", r, s]
996
999
  ];
997
- }, Te = (e) => {
1000
+ }, Le = (e) => {
998
1001
  const t = [], n = (e.points || "").trim().split(/[\s|,]/).map((s) => +s);
999
1002
  let r = 0;
1000
1003
  for (; r < n.length; )
1001
1004
  t.push([r ? "L" : "M", n[r], n[r + 1]]), r += 2;
1002
1005
  return e.type === "polygon" ? [...t, ["z"]] : t;
1003
- }, Le = (e) => {
1006
+ }, ke = (e) => {
1004
1007
  let { cx: t, cy: n, r } = e;
1005
1008
  return [t, n, r] = [t, n, r].map((s) => +s), [
1006
1009
  ["M", t - r, n],
1007
1010
  ["a", r, r, 0, 1, 0, 2 * r, 0],
1008
1011
  ["a", r, r, 0, 1, 0, -2 * r, 0]
1009
1012
  ];
1010
- }, ke = (e) => {
1013
+ }, Se = (e) => {
1011
1014
  let { cx: t, cy: n } = e, r = e.rx || 0, s = e.ry || r;
1012
1015
  return [t, n, r, s] = [t, n, r, s].map((i) => +i), [
1013
1016
  ["M", t - r, n],
1014
1017
  ["a", r, s, 0, 1, 0, 2 * r, 0],
1015
1018
  ["a", r, s, 0, 1, 0, -2 * r, 0]
1016
1019
  ];
1017
- }, Se = (e) => {
1020
+ }, $e = (e) => {
1018
1021
  const t = +e.x || 0, n = +e.y || 0, r = +e.width, s = +e.height;
1019
1022
  let i = +(e.rx || 0), o = +(e.ry || i);
1020
1023
  return i || o ? (i * 2 > r && (i -= (i * 2 - r) / 2), o * 2 > s && (o -= (o * 2 - s) / 2), [
@@ -1038,7 +1041,7 @@ e.slice(1).every(([t]) => t === t.toLowerCase()), lt = {
1038
1041
  c[u] = e.getAttribute(u);
1039
1042
  }) : Object.assign(c, e);
1040
1043
  let m = [];
1041
- return a === "circle" ? m = Le(c) : a === "ellipse" ? m = ke(c) : ["polyline", "polygon"].includes(a) ? m = Te(c) : a === "rect" ? m = Se(c) : a === "line" ? m = Ce(c) : ["glyph", "path"].includes(a) && (m = Z(i ? e.getAttribute("d") || "" : e.d || "")), _(m) && m.length ? m : !1;
1044
+ return a === "circle" ? m = ke(c) : a === "ellipse" ? m = Se(c) : ["polyline", "polygon"].includes(a) ? m = Le(c) : a === "rect" ? m = $e(c) : a === "line" ? m = Te(c) : ["glyph", "path"].includes(a) && (m = Z(i ? e.getAttribute("d") || "" : e.d || "")), _(m) && m.length ? m : !1;
1042
1045
  }, at = (e, t) => {
1043
1046
  let { round: n } = mt;
1044
1047
  if (t === "off" || n === "off")
@@ -1049,7 +1052,7 @@ e.slice(1).every(([t]) => t === t.toLowerCase()), lt = {
1049
1052
  const i = s.slice(1).map(Number).map((o) => n ? Math.round(o * r) / r : Math.round(o));
1050
1053
  return [s[0], ...i];
1051
1054
  });
1052
- }, At = (e, t) => at(e, t).map((n) => n[0] + n.slice(1).join(" ")).join(""), $e = (e, t, n) => {
1055
+ }, At = (e, t) => at(e, t).map((n) => n[0] + n.slice(1).join(" ")).join(""), qe = (e, t, n) => {
1053
1056
  const r = n || document, s = r.defaultView || /* istanbul ignore next */
1054
1057
  window, i = Object.keys(lt), o = e instanceof s.SVGElement, a = o ? e.tagName : null;
1055
1058
  if (a === "path")
@@ -1073,6 +1076,10 @@ e.slice(1).every(([t]) => t === t.toLowerCase()), lt = {
1073
1076
  return e.forEach((s) => {
1074
1077
  s[0] === "M" ? (n = [s], r += 1) : n = [...n, s], t[r] = n;
1075
1078
  }), t;
1079
+ }, Gt = (e) => {
1080
+ let t = new v();
1081
+ const { origin: n } = e, [r, s] = n, { translate: i } = e, { rotate: o } = e, { skew: a } = e, { scale: l } = e;
1082
+ return Array.isArray(i) && i.length >= 2 && i.every((c) => !Number.isNaN(+c)) && i.some((c) => c !== 0) ? t = t.translate(...i) : typeof i == "number" && !Number.isNaN(i) && (t = t.translate(i)), (o || a || l) && (t = t.translate(r, s), Array.isArray(o) && o.length >= 2 && o.every((c) => !Number.isNaN(+c)) && o.some((c) => c !== 0) ? t = t.rotate(...o) : typeof o == "number" && !Number.isNaN(o) && (t = t.rotate(o)), Array.isArray(a) && a.length === 2 && a.every((c) => !Number.isNaN(+c)) && a.some((c) => c !== 0) ? (t = a[0] ? t.skewX(a[0]) : t, t = a[1] ? t.skewY(a[1]) : t) : typeof a == "number" && !Number.isNaN(a) && (t = t.skewX(a)), Array.isArray(l) && l.length >= 2 && l.every((c) => !Number.isNaN(+c)) && l.some((c) => c !== 1) ? t = t.scale(...l) : typeof l == "number" && !Number.isNaN(l) && (t = t.scale(l)), t = t.translate(-r, -s)), t;
1076
1083
  }, Nt = (e) => {
1077
1084
  if (_t(e))
1078
1085
  return [...e];
@@ -1108,7 +1115,7 @@ e.slice(1).every(([t]) => t === t.toLowerCase()), lt = {
1108
1115
  const u = m.length;
1109
1116
  return c === "z" ? (n = s, r = i) : c === "h" ? n += m[1] : c === "v" ? r += m[1] : (n += m[u - 2], r += m[u - 1]), m;
1110
1117
  });
1111
- }, qe = (e, t, n, r) => {
1118
+ }, Oe = (e, t, n, r) => {
1112
1119
  const [s] = e, i = (p) => Math.round(p * 10 ** 4) / 10 ** 4, o = e.slice(1).map((p) => +p), a = t.slice(1).map((p) => +p), { x1: l, y1: c, x2: m, y2: u, x: y, y: g } = n;
1113
1120
  let f = e;
1114
1121
  const [h, x] = a.slice(-2);
@@ -1128,7 +1135,7 @@ e.slice(1).every(([t]) => t === t.toLowerCase()), lt = {
1128
1135
  const n = Q(e), r = z(n), s = { ...ut }, i = [], o = n.length;
1129
1136
  let a = "", l = "", c = 0, m = 0, u = 0, y = 0;
1130
1137
  for (let h = 0; h < o; h += 1) {
1131
- [a] = n[h], i[h] = a, h && (l = i[h - 1]), n[h] = qe(n[h], r[h], s, l);
1138
+ [a] = n[h], i[h] = a, h && (l = i[h - 1]), n[h] = Oe(n[h], r[h], s, l);
1132
1139
  const x = n[h], p = x.length;
1133
1140
  switch (s.x1 = +x[p - 2], s.y1 = +x[p - 1], s.x2 = +x[p - 4] || s.x1, s.y2 = +x[p - 3] || s.y1, a) {
1134
1141
  case "Z":
@@ -1147,7 +1154,7 @@ e.slice(1).every(([t]) => t === t.toLowerCase()), lt = {
1147
1154
  }
1148
1155
  const g = at(n, t), f = at(Nt(n), t);
1149
1156
  return g.map((h, x) => x ? h.join("").length < f[x].join("").length ? h : f[x] : h);
1150
- }, Oe = (e) => {
1157
+ }, Ee = (e) => {
1151
1158
  const t = e.slice(1).map(
1152
1159
  (n, r, s) => r ? [...s[r - 1].slice(-2), ...n.slice(1)] : [...e[0].slice(1), ...n.slice(1)]
1153
1160
  ).map((n) => n.map((r, s) => n[n.length - s - 2 * (1 - s % 2)])).reverse();
@@ -1204,10 +1211,6 @@ e.slice(1).every(([t]) => t === t.toLowerCase()), lt = {
1204
1211
  return h;
1205
1212
  });
1206
1213
  return n ? r.reverse() : [r[0], ...r.slice(1).reverse()];
1207
- }, Ee = (e) => {
1208
- let t = new v();
1209
- const { origin: n } = e, [r, s] = n, { translate: i } = e, { rotate: o } = e, { skew: a } = e, { scale: l } = e;
1210
- return Array.isArray(i) && i.length >= 2 && i.every((c) => !Number.isNaN(+c)) && i.some((c) => c !== 0) ? t = t.translate(...i) : typeof i == "number" && !Number.isNaN(i) && (t = t.translate(i)), (o || a || l) && (t = t.translate(r, s), Array.isArray(o) && o.length >= 2 && o.every((c) => !Number.isNaN(+c)) && o.some((c) => c !== 0) ? t = t.rotate(...o) : typeof o == "number" && !Number.isNaN(o) && (t = t.rotate(o)), Array.isArray(a) && a.length === 2 && a.every((c) => !Number.isNaN(+c)) && a.some((c) => c !== 0) ? (t = a[0] ? t.skewX(a[0]) : t, t = a[1] ? t.skewY(a[1]) : t) : typeof a == "number" && !Number.isNaN(a) && (t = t.skewX(a)), Array.isArray(l) && l.length >= 2 && l.every((c) => !Number.isNaN(+c)) && l.some((c) => c !== 1) ? t = t.scale(...l) : typeof l == "number" && !Number.isNaN(l) && (t = t.scale(l)), t = t.translate(-r, -s)), t;
1211
1214
  }, je = (e, t) => {
1212
1215
  let n = v.Translate(...t.slice(0, -1));
1213
1216
  return [, , , n.m44] = t, n = e.multiply(n), [n.m41, n.m42, n.m43, n.m44];
@@ -1228,7 +1231,7 @@ e.slice(1).every(([t]) => t === t.toLowerCase()), lt = {
1228
1231
  const { origin: M } = mt;
1229
1232
  Object.assign(t, { origin: M });
1230
1233
  }
1231
- const g = Ee(t), { origin: f } = t, h = { ...ut };
1234
+ const g = Gt(t), { origin: f } = t, h = { ...ut };
1232
1235
  let x = [], p = 0, b = "", A = [];
1233
1236
  const d = [];
1234
1237
  if (!g.isIdentity) {
@@ -1252,7 +1255,7 @@ e.slice(1).every(([t]) => t === t.toLowerCase()), lt = {
1252
1255
  }
1253
1256
  return [...m];
1254
1257
  }, ze = (e) => {
1255
- const n = e.slice(0, 2), r = e.slice(2, 4), s = e.slice(4, 6), i = e.slice(6, 8), o = j(n, r, 0.5), a = j(r, s, 0.5), l = j(s, i, 0.5), c = j(o, a, 0.5), m = j(a, l, 0.5), u = j(c, m, 0.5);
1258
+ const n = e.slice(0, 2), r = e.slice(2, 4), s = e.slice(4, 6), i = e.slice(6, 8), o = E(n, r, 0.5), a = E(r, s, 0.5), l = E(s, i, 0.5), c = E(o, a, 0.5), m = E(a, l, 0.5), u = E(c, m, 0.5);
1256
1259
  return [
1257
1260
  ["C", ...o, ...c, ...u],
1258
1261
  ["C", ...m, ...l, ...i]
@@ -1434,7 +1437,7 @@ class w {
1434
1437
  }
1435
1438
  }
1436
1439
  // bring main utilities to front
1437
- N(w, "CSSMatrix", v), N(w, "getPathBBox", kt), N(w, "getPathArea", Vt), N(w, "getTotalLength", X), N(w, "getDrawDirection", Ae), N(w, "getPointAtLength", K), N(w, "pathLengthFactory", ft), N(w, "getPropertiesAtLength", Pt), N(w, "getPropertiesAtPoint", yt), N(w, "polygonLength", le), N(w, "polygonArea", ce), N(w, "getClosestPoint", Ne), N(w, "getSegmentOfPoint", we), N(w, "getSegmentAtLength", ve), N(w, "isPointInStroke", Pe), N(w, "isValidPath", Kt), N(w, "isPathArray", _), N(w, "isAbsoluteArray", wt), N(w, "isRelativeArray", _t), N(w, "isCurveArray", Jt), N(w, "isNormalizedArray", vt), N(w, "shapeToPath", $e), N(w, "shapeToPathArray", Wt), N(w, "parsePathString", Z), N(w, "roundPath", at), N(w, "splitPath", $t), N(w, "splitCubic", ze), N(w, "optimizePath", qt), N(w, "reverseCurve", Oe), N(w, "reversePath", it), N(w, "normalizePath", z), N(w, "transformPath", Et), N(w, "pathToAbsolute", Q), N(w, "pathToRelative", Nt), N(w, "pathToCurve", ct), N(w, "pathToString", At);
1440
+ N(w, "CSSMatrix", v), N(w, "getSVGMatrix", Gt), N(w, "getPathBBox", kt), N(w, "getPathArea", Vt), N(w, "getTotalLength", X), N(w, "getDrawDirection", Ne), N(w, "getPointAtLength", K), N(w, "pathLengthFactory", ft), N(w, "getPropertiesAtLength", Pt), N(w, "getPropertiesAtPoint", yt), N(w, "polygonLength", ae), N(w, "polygonArea", le), N(w, "getClosestPoint", we), N(w, "getSegmentOfPoint", ve), N(w, "getSegmentAtLength", Pe), N(w, "isPointInStroke", Ce), N(w, "isValidPath", Kt), N(w, "isPathArray", _), N(w, "isAbsoluteArray", wt), N(w, "isRelativeArray", _t), N(w, "isCurveArray", Jt), N(w, "isNormalizedArray", vt), N(w, "shapeToPath", qe), N(w, "shapeToPathArray", Wt), N(w, "parsePathString", Z), N(w, "roundPath", at), N(w, "splitPath", $t), N(w, "splitCubic", ze), N(w, "optimizePath", qt), N(w, "reverseCurve", Ee), N(w, "reversePath", it), N(w, "normalizePath", z), N(w, "transformPath", Et), N(w, "pathToAbsolute", Q), N(w, "pathToRelative", Nt), N(w, "pathToCurve", ct), N(w, "pathToString", At);
1438
1441
  export {
1439
1442
  w as default
1440
1443
  };