fabric 6.4.1 → 6.4.2
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.
- package/CHANGELOG.md +4 -0
- package/dist/index.js +123 -95
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/index.min.mjs +1 -1
- package/dist/index.min.mjs.map +1 -1
- package/dist/index.mjs +123 -95
- package/dist/index.mjs.map +1 -1
- package/dist/index.node.cjs +123 -95
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +123 -95
- package/dist/index.node.mjs.map +1 -1
- package/dist/package.json.min.mjs +1 -1
- package/dist/package.json.mjs +1 -1
- package/dist/src/canvas/DOMManagers/CanvasDOMManager.min.mjs +1 -1
- package/dist/src/canvas/DOMManagers/CanvasDOMManager.min.mjs.map +1 -1
- package/dist/src/canvas/DOMManagers/CanvasDOMManager.mjs +0 -1
- package/dist/src/canvas/DOMManagers/CanvasDOMManager.mjs.map +1 -1
- package/dist/src/canvas/SelectableCanvas.min.mjs +1 -1
- package/dist/src/canvas/SelectableCanvas.min.mjs.map +1 -1
- package/dist/src/canvas/SelectableCanvas.mjs +0 -1
- package/dist/src/canvas/SelectableCanvas.mjs.map +1 -1
- package/dist/src/config.d.ts +5 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.min.mjs +1 -1
- package/dist/src/config.min.mjs.map +1 -1
- package/dist/src/config.mjs +6 -2
- package/dist/src/config.mjs.map +1 -1
- package/dist/src/parser/constants.d.ts +0 -1
- package/dist/src/parser/constants.d.ts.map +1 -1
- package/dist/src/parser/constants.min.mjs +1 -1
- package/dist/src/parser/constants.min.mjs.map +1 -1
- package/dist/src/parser/constants.mjs +1 -2
- package/dist/src/parser/constants.mjs.map +1 -1
- package/dist/src/shapes/Line.min.mjs +1 -1
- package/dist/src/shapes/Line.min.mjs.map +1 -1
- package/dist/src/shapes/Line.mjs +0 -1
- package/dist/src/shapes/Line.mjs.map +1 -1
- package/dist/src/shapes/Path.min.mjs +1 -1
- package/dist/src/shapes/Path.min.mjs.map +1 -1
- package/dist/src/shapes/Path.mjs +7 -1
- package/dist/src/shapes/Path.mjs.map +1 -1
- package/dist/src/shapes/Text/StyledText.min.mjs +1 -1
- package/dist/src/shapes/Text/StyledText.min.mjs.map +1 -1
- package/dist/src/shapes/Text/StyledText.mjs +0 -1
- package/dist/src/shapes/Text/StyledText.mjs.map +1 -1
- package/dist/src/util/misc/boundingBoxFromPoints.d.ts.map +1 -1
- package/dist/src/util/misc/boundingBoxFromPoints.min.mjs +1 -1
- package/dist/src/util/misc/boundingBoxFromPoints.min.mjs.map +1 -1
- package/dist/src/util/misc/boundingBoxFromPoints.mjs +17 -30
- package/dist/src/util/misc/boundingBoxFromPoints.mjs.map +1 -1
- package/dist/src/util/path/index.d.ts.map +1 -1
- package/dist/src/util/path/index.min.mjs +1 -1
- package/dist/src/util/path/index.min.mjs.map +1 -1
- package/dist/src/util/path/index.mjs +51 -47
- package/dist/src/util/path/index.mjs.map +1 -1
- package/dist/src/util/path/regex.d.ts +2 -1
- package/dist/src/util/path/regex.d.ts.map +1 -1
- package/dist/src/util/path/regex.min.mjs +1 -1
- package/dist/src/util/path/regex.min.mjs.map +1 -1
- package/dist/src/util/path/regex.mjs +41 -16
- package/dist/src/util/path/regex.mjs.map +1 -1
- package/dist/src/util/path/typedefs.d.ts +1 -0
- package/dist/src/util/path/typedefs.d.ts.map +1 -1
- package/dist-extensions/src/config.d.ts +5 -1
- package/dist-extensions/src/config.d.ts.map +1 -1
- package/dist-extensions/src/parser/constants.d.ts +0 -1
- package/dist-extensions/src/parser/constants.d.ts.map +1 -1
- package/dist-extensions/src/util/misc/boundingBoxFromPoints.d.ts.map +1 -1
- package/dist-extensions/src/util/path/index.d.ts.map +1 -1
- package/dist-extensions/src/util/path/regex.d.ts +2 -1
- package/dist-extensions/src/util/path/regex.d.ts.map +1 -1
- package/dist-extensions/src/util/path/typedefs.d.ts +1 -0
- package/dist-extensions/src/util/path/typedefs.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/config.ts +6 -2
- package/src/parser/constants.ts +0 -2
- package/src/shapes/Path.ts +1 -1
- package/src/util/misc/boundingBoxFromPoints.ts +15 -24
- package/src/util/path/__snapshots__/index.spec.ts.snap +462 -0
- package/src/util/path/index.spec.ts +107 -1
- package/src/util/path/index.ts +56 -51
- package/src/util/path/regex.ts +29 -22
- package/src/util/path/typedefs.ts +22 -0
|
@@ -7,8 +7,8 @@ import { multiplyTransformMatrices, transformPoint } from '../misc/matrix.mjs';
|
|
|
7
7
|
import { sin } from '../misc/sin.mjs';
|
|
8
8
|
import { toFixed } from '../misc/toFixed.mjs';
|
|
9
9
|
import { Point } from '../../Point.mjs';
|
|
10
|
-
import { rePathCommand } from './regex.mjs';
|
|
11
|
-
import {
|
|
10
|
+
import { rePathCommand, reArcCommandPoints } from './regex.mjs';
|
|
11
|
+
import { reNum } from '../../parser/constants.mjs';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Commands that may be repeated
|
|
@@ -638,8 +638,19 @@ const getPointOnPath = function (path, distance) {
|
|
|
638
638
|
}
|
|
639
639
|
};
|
|
640
640
|
const rePathCmdAll = new RegExp(rePathCommand, 'gi');
|
|
641
|
-
const
|
|
642
|
-
|
|
641
|
+
const regExpArcCommandPoints = new RegExp(reArcCommandPoints, 'g');
|
|
642
|
+
const reMyNum = new RegExp(reNum, 'gi');
|
|
643
|
+
const commandLengths = {
|
|
644
|
+
m: 2,
|
|
645
|
+
l: 2,
|
|
646
|
+
h: 1,
|
|
647
|
+
v: 1,
|
|
648
|
+
c: 6,
|
|
649
|
+
s: 4,
|
|
650
|
+
q: 4,
|
|
651
|
+
t: 2,
|
|
652
|
+
a: 7
|
|
653
|
+
};
|
|
643
654
|
/**
|
|
644
655
|
*
|
|
645
656
|
* @param {string} pathString
|
|
@@ -652,52 +663,45 @@ const rePathCmd = new RegExp(rePathCommand, 'i');
|
|
|
652
663
|
* ];
|
|
653
664
|
*/
|
|
654
665
|
const parsePath = pathString => {
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
const
|
|
659
|
-
|
|
660
|
-
const
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
//
|
|
670
|
-
|
|
671
|
-
//
|
|
672
|
-
//
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
return g;
|
|
677
|
-
} else {
|
|
678
|
-
return numParse;
|
|
679
|
-
}
|
|
680
|
-
});
|
|
681
|
-
chain.push(command);
|
|
682
|
-
// stop now if it's a z command
|
|
683
|
-
if (filteredGroups.length <= 1) {
|
|
684
|
-
break;
|
|
666
|
+
var _pathString$match;
|
|
667
|
+
const chain = [];
|
|
668
|
+
const all = (_pathString$match = pathString.match(rePathCmdAll)) !== null && _pathString$match !== void 0 ? _pathString$match : [];
|
|
669
|
+
for (const matchStr of all) {
|
|
670
|
+
// take match string and save the first letter as the command
|
|
671
|
+
const commandLetter = matchStr[0];
|
|
672
|
+
// in case of Z we have very little to do
|
|
673
|
+
if (commandLetter === 'z' || commandLetter === 'Z') {
|
|
674
|
+
chain.push([commandLetter]);
|
|
675
|
+
continue;
|
|
676
|
+
}
|
|
677
|
+
const commandLength = commandLengths[commandLetter.toLowerCase()];
|
|
678
|
+
let paramArr = [];
|
|
679
|
+
if (commandLetter === 'a' || commandLetter === 'A') {
|
|
680
|
+
// the arc command ha some peculariaties that requires a special regex other than numbers
|
|
681
|
+
// it is possible to avoid using a space between the sweep and large arc flags, making them either
|
|
682
|
+
// 00, 01, 10 or 11, making them identical to a plain number for the regex reMyNum
|
|
683
|
+
// reset the regexp
|
|
684
|
+
regExpArcCommandPoints.lastIndex = 0;
|
|
685
|
+
for (let out = null; out = regExpArcCommandPoints.exec(matchStr);) {
|
|
686
|
+
paramArr.push(...out.slice(1));
|
|
685
687
|
}
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
//
|
|
692
|
-
|
|
693
|
-
const
|
|
694
|
-
|
|
695
|
-
|
|
688
|
+
} else {
|
|
689
|
+
paramArr = matchStr.match(reMyNum) || [];
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
// inspect the length of paramArr, if is longer than commandLength
|
|
693
|
+
// we are dealing with repeated commands
|
|
694
|
+
for (let i = 0; i < paramArr.length; i += commandLength) {
|
|
695
|
+
const newCommand = new Array(commandLength);
|
|
696
|
+
const transformedCommand = repeatedCommands[commandLetter];
|
|
697
|
+
newCommand[0] = i > 0 && transformedCommand ? transformedCommand : commandLetter;
|
|
698
|
+
for (let j = 0; j < commandLength; j++) {
|
|
699
|
+
newCommand[j + 1] = parseFloat(paramArr[i + j]);
|
|
696
700
|
}
|
|
697
|
-
|
|
698
|
-
}
|
|
701
|
+
chain.push(newCommand);
|
|
702
|
+
}
|
|
699
703
|
}
|
|
700
|
-
return
|
|
704
|
+
return chain;
|
|
701
705
|
};
|
|
702
706
|
|
|
703
707
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../src/util/path/index.ts"],"sourcesContent":["import { cache } from '../../cache';\nimport { config } from '../../config';\nimport { halfPI, PiBy180 } from '../../constants';\nimport type { TMat2D, TRadian, TRectBounds } from '../../typedefs';\nimport { cos } from '../misc/cos';\nimport { multiplyTransformMatrices, transformPoint } from '../misc/matrix';\nimport { sin } from '../misc/sin';\nimport { toFixed } from '../misc/toFixed';\nimport type {\n TCurveInfo,\n TComplexPathData,\n TParsedAbsoluteCubicCurveCommand,\n TPathSegmentInfo,\n TPointAngle,\n TSimpleParsedCommand,\n TSimplePathData,\n TPathSegmentCommandInfo,\n TComplexParsedCommand,\n TPathSegmentInfoCommon,\n TEndPathInfo,\n TParsedArcCommand,\n} from './typedefs';\nimport type { XY } from '../../Point';\nimport { Point } from '../../Point';\nimport { rePathCommand } from './regex';\nimport { cleanupSvgAttribute } from '../internals/cleanupSvgAttribute';\n\n/**\n * Commands that may be repeated\n */\nconst repeatedCommands: Record<string, string | undefined> = {\n m: 'l',\n M: 'L',\n};\n\n/**\n * Convert an arc of a rotated ellipse to a Bezier Curve\n * @param {TRadian} theta1 start of the arc\n * @param {TRadian} theta2 end of the arc\n * @param cosTh cosine of the angle of rotation\n * @param sinTh sine of the angle of rotation\n * @param rx x-axis radius (before rotation)\n * @param ry y-axis radius (before rotation)\n * @param cx1 center x of the ellipse\n * @param cy1 center y of the ellipse\n * @param mT\n * @param fromX starting point of arc x\n * @param fromY starting point of arc y\n */\nconst segmentToBezier = (\n theta1: TRadian,\n theta2: TRadian,\n cosTh: number,\n sinTh: number,\n rx: number,\n ry: number,\n cx1: number,\n cy1: number,\n mT: number,\n fromX: number,\n fromY: number,\n): TParsedAbsoluteCubicCurveCommand => {\n const costh1 = cos(theta1),\n sinth1 = sin(theta1),\n costh2 = cos(theta2),\n sinth2 = sin(theta2),\n toX = cosTh * rx * costh2 - sinTh * ry * sinth2 + cx1,\n toY = sinTh * rx * costh2 + cosTh * ry * sinth2 + cy1,\n cp1X = fromX + mT * (-cosTh * rx * sinth1 - sinTh * ry * costh1),\n cp1Y = fromY + mT * (-sinTh * rx * sinth1 + cosTh * ry * costh1),\n cp2X = toX + mT * (cosTh * rx * sinth2 + sinTh * ry * costh2),\n cp2Y = toY + mT * (sinTh * rx * sinth2 - cosTh * ry * costh2);\n\n return ['C', cp1X, cp1Y, cp2X, cp2Y, toX, toY];\n};\n\n/**\n * Adapted from {@link http://dxr.mozilla.org/mozilla-central/source/dom/svg/SVGPathDataParser.cpp}\n * by Andrea Bogazzi code is under MPL. if you don't have a copy of the license you can take it here\n * http://mozilla.org/MPL/2.0/\n * @param toX\n * @param toY\n * @param rx\n * @param ry\n * @param {number} large 0 or 1 flag\n * @param {number} sweep 0 or 1 flag\n * @param rotateX\n */\nconst arcToSegments = (\n toX: number,\n toY: number,\n rx: number,\n ry: number,\n large: number,\n sweep: number,\n rotateX: TRadian,\n): TParsedAbsoluteCubicCurveCommand[] => {\n if (rx === 0 || ry === 0) {\n return [];\n }\n let fromX = 0,\n fromY = 0,\n root = 0;\n const PI = Math.PI,\n theta = rotateX * PiBy180,\n sinTheta = sin(theta),\n cosTh = cos(theta),\n px = 0.5 * (-cosTh * toX - sinTheta * toY),\n py = 0.5 * (-cosTh * toY + sinTheta * toX),\n rx2 = rx ** 2,\n ry2 = ry ** 2,\n py2 = py ** 2,\n px2 = px ** 2,\n pl = rx2 * ry2 - rx2 * py2 - ry2 * px2;\n let _rx = Math.abs(rx);\n let _ry = Math.abs(ry);\n\n if (pl < 0) {\n const s = Math.sqrt(1 - pl / (rx2 * ry2));\n _rx *= s;\n _ry *= s;\n } else {\n root =\n (large === sweep ? -1.0 : 1.0) * Math.sqrt(pl / (rx2 * py2 + ry2 * px2));\n }\n\n const cx = (root * _rx * py) / _ry,\n cy = (-root * _ry * px) / _rx,\n cx1 = cosTh * cx - sinTheta * cy + toX * 0.5,\n cy1 = sinTheta * cx + cosTh * cy + toY * 0.5;\n let mTheta = calcVectorAngle(1, 0, (px - cx) / _rx, (py - cy) / _ry);\n let dtheta = calcVectorAngle(\n (px - cx) / _rx,\n (py - cy) / _ry,\n (-px - cx) / _rx,\n (-py - cy) / _ry,\n );\n\n if (sweep === 0 && dtheta > 0) {\n dtheta -= 2 * PI;\n } else if (sweep === 1 && dtheta < 0) {\n dtheta += 2 * PI;\n }\n\n // Convert into cubic bezier segments <= 90deg\n const segments = Math.ceil(Math.abs((dtheta / PI) * 2)),\n result = [],\n mDelta = dtheta / segments,\n mT =\n ((8 / 3) * Math.sin(mDelta / 4) * Math.sin(mDelta / 4)) /\n Math.sin(mDelta / 2);\n let th3 = mTheta + mDelta;\n\n for (let i = 0; i < segments; i++) {\n result[i] = segmentToBezier(\n mTheta,\n th3,\n cosTh,\n sinTheta,\n _rx,\n _ry,\n cx1,\n cy1,\n mT,\n fromX,\n fromY,\n );\n fromX = result[i][5];\n fromY = result[i][6];\n mTheta = th3;\n th3 += mDelta;\n }\n return result;\n};\n\n/**\n * @private\n * Calculate the angle between two vectors\n * @param ux u endpoint x\n * @param uy u endpoint y\n * @param vx v endpoint x\n * @param vy v endpoint y\n */\nconst calcVectorAngle = (\n ux: number,\n uy: number,\n vx: number,\n vy: number,\n): TRadian => {\n const ta = Math.atan2(uy, ux),\n tb = Math.atan2(vy, vx);\n if (tb >= ta) {\n return tb - ta;\n } else {\n return 2 * Math.PI - (ta - tb);\n }\n};\n\n// functions for the Cubic beizer\n// taken from: https://github.com/konvajs/konva/blob/7.0.5/src/shapes/Path.ts#L350\nconst CB1 = (t: number) => t ** 3;\nconst CB2 = (t: number) => 3 * t ** 2 * (1 - t);\nconst CB3 = (t: number) => 3 * t * (1 - t) ** 2;\nconst CB4 = (t: number) => (1 - t) ** 3;\n\n/**\n * Calculate bounding box of a cubic Bezier curve\n * Taken from http://jsbin.com/ivomiq/56/edit (no credits available)\n * TODO: can we normalize this with the starting points set at 0 and then translated the bbox?\n * @param {number} begx starting point\n * @param {number} begy\n * @param {number} cp1x first control point\n * @param {number} cp1y\n * @param {number} cp2x second control point\n * @param {number} cp2y\n * @param {number} endx end of bezier\n * @param {number} endy\n * @return {TRectBounds} the rectangular bounds\n */\nexport function getBoundsOfCurve(\n begx: number,\n begy: number,\n cp1x: number,\n cp1y: number,\n cp2x: number,\n cp2y: number,\n endx: number,\n endy: number,\n): TRectBounds {\n let argsString: string;\n if (config.cachesBoundsOfCurve) {\n // eslint-disable-next-line\n argsString = [...arguments].join();\n if (cache.boundsOfCurveCache[argsString]) {\n return cache.boundsOfCurveCache[argsString];\n }\n }\n\n const sqrt = Math.sqrt,\n abs = Math.abs,\n tvalues = [],\n bounds: [[x: number, y: number], [x: number, y: number]] = [\n [0, 0],\n [0, 0],\n ];\n\n let b = 6 * begx - 12 * cp1x + 6 * cp2x;\n let a = -3 * begx + 9 * cp1x - 9 * cp2x + 3 * endx;\n let c = 3 * cp1x - 3 * begx;\n\n for (let i = 0; i < 2; ++i) {\n if (i > 0) {\n b = 6 * begy - 12 * cp1y + 6 * cp2y;\n a = -3 * begy + 9 * cp1y - 9 * cp2y + 3 * endy;\n c = 3 * cp1y - 3 * begy;\n }\n\n if (abs(a) < 1e-12) {\n if (abs(b) < 1e-12) {\n continue;\n }\n const t = -c / b;\n if (0 < t && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n const b2ac = b * b - 4 * c * a;\n if (b2ac < 0) {\n continue;\n }\n const sqrtb2ac = sqrt(b2ac);\n const t1 = (-b + sqrtb2ac) / (2 * a);\n if (0 < t1 && t1 < 1) {\n tvalues.push(t1);\n }\n const t2 = (-b - sqrtb2ac) / (2 * a);\n if (0 < t2 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n let j = tvalues.length;\n const jlen = j;\n const iterator = getPointOnCubicBezierIterator(\n begx,\n begy,\n cp1x,\n cp1y,\n cp2x,\n cp2y,\n endx,\n endy,\n );\n while (j--) {\n const { x, y } = iterator(tvalues[j]);\n bounds[0][j] = x;\n bounds[1][j] = y;\n }\n\n bounds[0][jlen] = begx;\n bounds[1][jlen] = begy;\n bounds[0][jlen + 1] = endx;\n bounds[1][jlen + 1] = endy;\n const result: TRectBounds = [\n new Point(Math.min(...bounds[0]), Math.min(...bounds[1])),\n new Point(Math.max(...bounds[0]), Math.max(...bounds[1])),\n ];\n if (config.cachesBoundsOfCurve) {\n cache.boundsOfCurveCache[argsString!] = result;\n }\n return result;\n}\n\n/**\n * Converts arc to a bunch of cubic Bezier curves\n * @param {number} fx starting point x\n * @param {number} fy starting point y\n * @param {TParsedArcCommand} coords Arc command\n */\nexport const fromArcToBeziers = (\n fx: number,\n fy: number,\n [_, rx, ry, rot, large, sweep, tx, ty]: TParsedArcCommand,\n): TParsedAbsoluteCubicCurveCommand[] => {\n const segsNorm = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot);\n\n for (let i = 0, len = segsNorm.length; i < len; i++) {\n segsNorm[i][1] += fx;\n segsNorm[i][2] += fy;\n segsNorm[i][3] += fx;\n segsNorm[i][4] += fy;\n segsNorm[i][5] += fx;\n segsNorm[i][6] += fy;\n }\n return segsNorm;\n};\n\n/**\n * This function takes a parsed SVG path and makes it simpler for fabricJS logic.\n * Simplification consist of:\n * - All commands converted to absolute (lowercase to uppercase)\n * - S converted to C\n * - T converted to Q\n * - A converted to C\n * @param {TComplexPathData} path the array of commands of a parsed SVG path for `Path`\n * @return {TSimplePathData} the simplified array of commands of a parsed SVG path for `Path`\n * TODO: figure out how to remove the type assertions in a nice way\n */\nexport const makePathSimpler = (path: TComplexPathData): TSimplePathData => {\n // x and y represent the last point of the path, AKA the previous command point.\n // we add them to each relative command to make it an absolute comment.\n // we also swap the v V h H with L, because are easier to transform.\n let x = 0,\n y = 0;\n // x1 and y1 represent the last point of the subpath. the subpath is started with\n // m or M command. When a z or Z command is drawn, x and y need to be resetted to\n // the last x1 and y1.\n let x1 = 0,\n y1 = 0;\n // previous will host the letter of the previous command, to handle S and T.\n // controlX and controlY will host the previous reflected control point\n const destinationPath: TSimplePathData = [];\n let previous,\n // placeholders\n controlX = 0,\n controlY = 0;\n for (const parsedCommand of path) {\n const current: TComplexParsedCommand = [...parsedCommand];\n let converted: TSimpleParsedCommand | undefined;\n switch (\n current[0] // first letter\n ) {\n case 'l': // lineto, relative\n current[1] += x;\n current[2] += y;\n // falls through\n case 'L':\n x = current[1];\n y = current[2];\n converted = ['L', x, y];\n break;\n case 'h': // horizontal lineto, relative\n current[1] += x;\n // falls through\n case 'H':\n x = current[1];\n converted = ['L', x, y];\n break;\n case 'v': // vertical lineto, relative\n current[1] += y;\n // falls through\n case 'V':\n y = current[1];\n converted = ['L', x, y];\n break;\n case 'm': // moveTo, relative\n current[1] += x;\n current[2] += y;\n // falls through\n case 'M':\n x = current[1];\n y = current[2];\n x1 = current[1];\n y1 = current[2];\n converted = ['M', x, y];\n break;\n case 'c': // bezierCurveTo, relative\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n current[5] += x;\n current[6] += y;\n // falls through\n case 'C':\n controlX = current[3];\n controlY = current[4];\n x = current[5];\n y = current[6];\n converted = ['C', current[1], current[2], controlX, controlY, x, y];\n break;\n case 's': // shorthand cubic bezierCurveTo, relative\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n // falls through\n case 'S':\n // would be sScC but since we are swapping sSc for C, we check just that.\n if (previous === 'C') {\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n } else {\n // If there is no previous command or if the previous command was not a C, c, S, or s,\n // the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n x = current[3];\n y = current[4];\n converted = ['C', controlX, controlY, current[1], current[2], x, y];\n // converted[3] and converted[4] are NOW the second control point.\n // we keep it for the next reflection.\n controlX = converted[3];\n controlY = converted[4];\n break;\n case 'q': // quadraticCurveTo, relative\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n // falls through\n case 'Q':\n controlX = current[1];\n controlY = current[2];\n x = current[3];\n y = current[4];\n converted = ['Q', controlX, controlY, x, y];\n break;\n case 't': // shorthand quadraticCurveTo, relative\n current[1] += x;\n current[2] += y;\n // falls through\n case 'T':\n if (previous === 'Q') {\n // calculate reflection of previous control point\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n } else {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n x = current[1];\n y = current[2];\n converted = ['Q', controlX, controlY, x, y];\n break;\n case 'a':\n current[6] += x;\n current[7] += y;\n // falls through\n case 'A':\n fromArcToBeziers(x, y, current).forEach((b) => destinationPath.push(b));\n x = current[6];\n y = current[7];\n break;\n case 'z':\n case 'Z':\n x = x1;\n y = y1;\n converted = ['Z'];\n break;\n default:\n }\n if (converted) {\n destinationPath.push(converted);\n previous = converted[0];\n } else {\n previous = '';\n }\n }\n return destinationPath;\n};\n\n// todo verify if we can just use the point class here\n/**\n * Calc length from point x1,y1 to x2,y2\n * @param {number} x1 starting point x\n * @param {number} y1 starting point y\n * @param {number} x2 starting point x\n * @param {number} y2 starting point y\n * @return {number} length of segment\n */\nconst calcLineLength = (\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n): number => Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n\n/**\n * Get an iterator that takes a percentage and returns a point\n * @param {number} begx\n * @param {number} begy\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} endx\n * @param {number} endy\n */\nconst getPointOnCubicBezierIterator =\n (\n begx: number,\n begy: number,\n cp1x: number,\n cp1y: number,\n cp2x: number,\n cp2y: number,\n endx: number,\n endy: number,\n ) =>\n (pct: number) => {\n const c1 = CB1(pct),\n c2 = CB2(pct),\n c3 = CB3(pct),\n c4 = CB4(pct);\n return new Point(\n endx * c1 + cp2x * c2 + cp1x * c3 + begx * c4,\n endy * c1 + cp2y * c2 + cp1y * c3 + begy * c4,\n );\n };\n\nconst QB1 = (t: number) => t ** 2;\nconst QB2 = (t: number) => 2 * t * (1 - t);\nconst QB3 = (t: number) => (1 - t) ** 2;\n\nconst getTangentCubicIterator =\n (\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n p4x: number,\n p4y: number,\n ) =>\n (pct: number) => {\n const qb1 = QB1(pct),\n qb2 = QB2(pct),\n qb3 = QB3(pct),\n tangentX =\n 3 * (qb3 * (p2x - p1x) + qb2 * (p3x - p2x) + qb1 * (p4x - p3x)),\n tangentY =\n 3 * (qb3 * (p2y - p1y) + qb2 * (p3y - p2y) + qb1 * (p4y - p3y));\n return Math.atan2(tangentY, tangentX);\n };\n\nconst getPointOnQuadraticBezierIterator =\n (\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n ) =>\n (pct: number) => {\n const c1 = QB1(pct),\n c2 = QB2(pct),\n c3 = QB3(pct);\n return new Point(\n p3x * c1 + p2x * c2 + p1x * c3,\n p3y * c1 + p2y * c2 + p1y * c3,\n );\n };\n\nconst getTangentQuadraticIterator =\n (\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n ) =>\n (pct: number) => {\n const invT = 1 - pct,\n tangentX = 2 * (invT * (p2x - p1x) + pct * (p3x - p2x)),\n tangentY = 2 * (invT * (p2y - p1y) + pct * (p3y - p2y));\n return Math.atan2(tangentY, tangentX);\n };\n\n// this will run over a path segment (a cubic or quadratic segment) and approximate it\n// with 100 segments. This will good enough to calculate the length of the curve\nconst pathIterator = (\n iterator: (pct: number) => Point,\n x1: number,\n y1: number,\n) => {\n let tempP = new Point(x1, y1),\n tmpLen = 0;\n for (let perc = 1; perc <= 100; perc += 1) {\n const p = iterator(perc / 100);\n tmpLen += calcLineLength(tempP.x, tempP.y, p.x, p.y);\n tempP = p;\n }\n return tmpLen;\n};\n\n/**\n * Given a pathInfo, and a distance in pixels, find the percentage from 0 to 1\n * that correspond to that pixels run over the path.\n * The percentage will be then used to find the correct point on the canvas for the path.\n * @param {Array} segInfo fabricJS collection of information on a parsed path\n * @param {number} distance from starting point, in pixels.\n * @return {TPointAngle} info object with x and y ( the point on canvas ) and angle, the tangent on that point;\n */\nconst findPercentageForDistance = (\n segInfo: TCurveInfo<'Q' | 'C'>,\n distance: number,\n): TPointAngle => {\n let perc = 0,\n tmpLen = 0,\n tempP: XY = { x: segInfo.x, y: segInfo.y },\n p: XY = { ...tempP },\n nextLen: number,\n nextStep = 0.01,\n lastPerc = 0;\n // nextStep > 0.0001 covers 0.00015625 that 1/64th of 1/100\n // the path\n const iterator = segInfo.iterator,\n angleFinder = segInfo.angleFinder;\n while (tmpLen < distance && nextStep > 0.0001) {\n p = iterator(perc);\n lastPerc = perc;\n nextLen = calcLineLength(tempP.x, tempP.y, p.x, p.y);\n // compare tmpLen each cycle with distance, decide next perc to test.\n if (nextLen + tmpLen > distance) {\n // we discard this step and we make smaller steps.\n perc -= nextStep;\n nextStep /= 2;\n } else {\n tempP = p;\n perc += nextStep;\n tmpLen += nextLen;\n }\n }\n return { ...p, angle: angleFinder(lastPerc) };\n};\n\n/**\n * Run over a parsed and simplified path and extract some information (length of each command and starting point)\n * @param {TSimplePathData} path parsed path commands\n * @return {TPathSegmentInfo[]} path commands information\n */\nexport const getPathSegmentsInfo = (\n path: TSimplePathData,\n): TPathSegmentInfo[] => {\n let totalLength = 0,\n //x2 and y2 are the coords of segment start\n //x1 and y1 are the coords of the current point\n x1 = 0,\n y1 = 0,\n x2 = 0,\n y2 = 0,\n iterator,\n tempInfo: TPathSegmentInfo;\n const info: TPathSegmentInfo[] = [];\n for (const current of path) {\n const basicInfo: TPathSegmentInfoCommon<keyof TPathSegmentCommandInfo> = {\n x: x1,\n y: y1,\n command: current[0],\n length: 0,\n };\n switch (\n current[0] //first letter\n ) {\n case 'M':\n tempInfo = <TPathSegmentInfoCommon<'M'>>basicInfo;\n tempInfo.x = x2 = x1 = current[1];\n tempInfo.y = y2 = y1 = current[2];\n break;\n case 'L':\n tempInfo = <TPathSegmentInfoCommon<'L'>>basicInfo;\n tempInfo.length = calcLineLength(x1, y1, current[1], current[2]);\n x1 = current[1];\n y1 = current[2];\n break;\n case 'C':\n iterator = getPointOnCubicBezierIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6],\n );\n tempInfo = <TCurveInfo<'C'>>basicInfo;\n tempInfo.iterator = iterator;\n tempInfo.angleFinder = getTangentCubicIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6],\n );\n tempInfo.length = pathIterator(iterator, x1, y1);\n\n x1 = current[5];\n y1 = current[6];\n break;\n case 'Q':\n iterator = getPointOnQuadraticBezierIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n );\n tempInfo = <TCurveInfo<'Q'>>basicInfo;\n tempInfo.iterator = iterator;\n tempInfo.angleFinder = getTangentQuadraticIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n );\n tempInfo.length = pathIterator(iterator, x1, y1);\n x1 = current[3];\n y1 = current[4];\n break;\n case 'Z':\n // we add those in order to ease calculations later\n tempInfo = <TEndPathInfo>basicInfo;\n tempInfo.destX = x2;\n tempInfo.destY = y2;\n tempInfo.length = calcLineLength(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n break;\n }\n totalLength += tempInfo.length;\n info.push(tempInfo);\n }\n info.push({ length: totalLength, x: x1, y: y1 });\n return info;\n};\n\n/**\n * Get the point on the path that is distance along the path\n * @param path\n * @param distance\n * @param infos\n */\nexport const getPointOnPath = (\n path: TSimplePathData,\n distance: number,\n infos: TPathSegmentInfo[] = getPathSegmentsInfo(path),\n): TPointAngle | undefined => {\n let i = 0;\n while (distance - infos[i].length > 0 && i < infos.length - 2) {\n distance -= infos[i].length;\n i++;\n }\n const segInfo = infos[i],\n segPercent = distance / segInfo.length,\n segment = path[i];\n\n switch (segInfo.command) {\n case 'M':\n return { x: segInfo.x, y: segInfo.y, angle: 0 };\n case 'Z':\n return {\n ...new Point(segInfo.x, segInfo.y).lerp(\n new Point(segInfo.destX, segInfo.destY),\n segPercent,\n ),\n angle: Math.atan2(segInfo.destY - segInfo.y, segInfo.destX - segInfo.x),\n };\n case 'L':\n return {\n ...new Point(segInfo.x, segInfo.y).lerp(\n new Point(segment[1]!, segment[2]!),\n segPercent,\n ),\n angle: Math.atan2(segment[2]! - segInfo.y, segment[1]! - segInfo.x),\n };\n case 'C':\n return findPercentageForDistance(segInfo, distance);\n case 'Q':\n return findPercentageForDistance(segInfo, distance);\n default:\n // throw Error('Invalid command');\n }\n};\n\nconst rePathCmdAll = new RegExp(rePathCommand, 'gi');\nconst rePathCmd = new RegExp(rePathCommand, 'i');\n\n/**\n *\n * @param {string} pathString\n * @return {TComplexPathData} An array of SVG path commands\n * @example <caption>Usage</caption>\n * parsePath('M 3 4 Q 3 5 2 1 4 0 Q 9 12 2 1 4 0') === [\n * ['M', 3, 4],\n * ['Q', 3, 5, 2, 1, 4, 0],\n * ['Q', 9, 12, 2, 1, 4, 0],\n * ];\n */\nexport const parsePath = (pathString: string): TComplexPathData => {\n // clean the string\n // add spaces around the numbers\n pathString = cleanupSvgAttribute(pathString);\n\n const res: TComplexPathData = [];\n for (let [matchStr] of pathString.matchAll(rePathCmdAll)) {\n const chain: TComplexPathData = [];\n let paramArr: RegExpExecArray | null;\n do {\n paramArr = rePathCmd.exec(matchStr);\n if (!paramArr) {\n break;\n }\n // ignore undefined match groups\n const filteredGroups = paramArr.filter((g) => g);\n // remove the first element from the match array since it's just the whole command\n filteredGroups.shift();\n // if we can't parse the number, just interpret it as a string\n // (since it's probably the path command)\n const command = filteredGroups.map((g) => {\n const numParse = Number.parseFloat(g);\n if (Number.isNaN(numParse)) {\n return g;\n } else {\n return numParse;\n }\n });\n chain.push(command as any);\n // stop now if it's a z command\n if (filteredGroups.length <= 1) {\n break;\n }\n // remove the last part of the chained command\n filteredGroups.shift();\n // ` ?` is to support commands with optional spaces between flags\n matchStr = matchStr.replace(\n new RegExp(`${filteredGroups.join(' ?')} ?$`),\n '',\n );\n } while (paramArr);\n // add the chain, convert multiple m's to l's in the process\n chain.reverse().forEach((c, idx) => {\n const transformed = repeatedCommands[c[0]];\n if (idx > 0 && (transformed == 'l' || transformed == 'L')) {\n c[0] = transformed;\n }\n res.push(c);\n });\n }\n return res;\n};\n\n/**\n *\n * Converts points to a smooth SVG path\n * @param {XY[]} points Array of points\n * @param {number} [correction] Apply a correction to the path (usually we use `width / 1000`). If value is undefined 0 is used as the correction value.\n * @return {(string|number)[][]} An array of SVG path commands\n */\nexport const getSmoothPathFromPoints = (\n points: Point[],\n correction = 0,\n): TSimplePathData => {\n let p1 = new Point(points[0]),\n p2 = new Point(points[1]),\n multSignX = 1,\n multSignY = 0;\n const path: TSimplePathData = [],\n len = points.length,\n manyPoints = len > 2;\n\n if (manyPoints) {\n multSignX = points[2].x < p2.x ? -1 : points[2].x === p2.x ? 0 : 1;\n multSignY = points[2].y < p2.y ? -1 : points[2].y === p2.y ? 0 : 1;\n }\n path.push([\n 'M',\n p1.x - multSignX * correction,\n p1.y - multSignY * correction,\n ]);\n let i;\n for (i = 1; i < len; i++) {\n if (!p1.eq(p2)) {\n const midPoint = p1.midPointFrom(p2);\n // p1 is our bezier control point\n // midpoint is our endpoint\n // start point is p(i-1) value.\n path.push(['Q', p1.x, p1.y, midPoint.x, midPoint.y]);\n }\n p1 = points[i];\n if (i + 1 < points.length) {\n p2 = points[i + 1];\n }\n }\n if (manyPoints) {\n multSignX = p1.x > points[i - 2].x ? 1 : p1.x === points[i - 2].x ? 0 : -1;\n multSignY = p1.y > points[i - 2].y ? 1 : p1.y === points[i - 2].y ? 0 : -1;\n }\n path.push([\n 'L',\n p1.x + multSignX * correction,\n p1.y + multSignY * correction,\n ]);\n return path;\n};\n\n/**\n * Transform a path by transforming each segment.\n * it has to be a simplified path or it won't work.\n * WARNING: this depends from pathOffset for correct operation\n * @param {TSimplePathData} path fabricJS parsed and simplified path commands\n * @param {TMat2D} transform matrix that represent the transformation\n * @param {Point} [pathOffset] `Path.pathOffset`\n * @returns {TSimplePathData} the transformed path\n */\nexport const transformPath = (\n path: TSimplePathData,\n transform: TMat2D,\n pathOffset: Point,\n): TSimplePathData => {\n if (pathOffset) {\n transform = multiplyTransformMatrices(transform, [\n 1,\n 0,\n 0,\n 1,\n -pathOffset.x,\n -pathOffset.y,\n ]);\n }\n return path.map((pathSegment) => {\n const newSegment: TSimpleParsedCommand = [...pathSegment];\n for (let i = 1; i < pathSegment.length - 1; i += 2) {\n // TODO: is there a way to get around casting to any?\n const { x, y } = transformPoint(\n {\n x: pathSegment[i] as number,\n y: pathSegment[i + 1] as number,\n },\n transform,\n );\n newSegment[i] = x;\n newSegment[i + 1] = y;\n }\n return newSegment;\n });\n};\n\n/**\n * Returns an array of path commands to create a regular polygon\n * @param {number} numVertexes\n * @param {number} radius\n * @returns {TSimplePathData} An array of SVG path commands\n */\nexport const getRegularPolygonPath = (\n numVertexes: number,\n radius: number,\n): TSimplePathData => {\n const interiorAngle = (Math.PI * 2) / numVertexes;\n // rotationAdjustment rotates the path by 1/2 the interior angle so that the polygon always has a flat side on the bottom\n // This isn't strictly necessary, but it's how we tend to think of and expect polygons to be drawn\n let rotationAdjustment = -halfPI;\n if (numVertexes % 2 === 0) {\n rotationAdjustment += interiorAngle / 2;\n }\n const d = new Array(numVertexes + 1);\n for (let i = 0; i < numVertexes; i++) {\n const rad = i * interiorAngle + rotationAdjustment;\n const { x, y } = new Point(cos(rad), sin(rad)).scalarMultiply(radius);\n d[i] = [i === 0 ? 'M' : 'L', x, y];\n }\n d[numVertexes] = ['Z'];\n return d;\n};\n\n/**\n * Join path commands to go back to svg format\n * @param {TSimplePathData} pathData fabricJS parsed path commands\n * @param {number} fractionDigits number of fraction digits to \"leave\"\n * @return {String} joined path 'M 0 0 L 20 30'\n */\nexport const joinPath = (pathData: TSimplePathData, fractionDigits?: number) =>\n pathData\n .map((segment) => {\n return segment\n .map((arg, i) => {\n if (i === 0) return arg;\n return fractionDigits === undefined\n ? arg\n : toFixed(arg, fractionDigits);\n })\n .join(' ');\n })\n .join(' ');\n"],"names":["repeatedCommands","m","M","segmentToBezier","theta1","theta2","cosTh","sinTh","rx","ry","cx1","cy1","mT","fromX","fromY","costh1","cos","sinth1","sin","costh2","sinth2","toX","toY","cp1X","cp1Y","cp2X","cp2Y","arcToSegments","large","sweep","rotateX","root","PI","Math","theta","PiBy180","sinTheta","px","py","rx2","ry2","py2","px2","pl","_rx","abs","_ry","s","sqrt","cx","cy","mTheta","calcVectorAngle","dtheta","segments","ceil","result","mDelta","th3","i","ux","uy","vx","vy","ta","atan2","tb","CB1","t","CB2","CB3","CB4","getBoundsOfCurve","begx","begy","cp1x","cp1y","cp2x","cp2y","endx","endy","argsString","config","cachesBoundsOfCurve","arguments","join","cache","boundsOfCurveCache","tvalues","bounds","b","a","c","push","b2ac","sqrtb2ac","t1","t2","j","length","jlen","iterator","getPointOnCubicBezierIterator","x","y","Point","min","max","fromArcToBeziers","fx","fy","_ref","_","rot","tx","ty","segsNorm","len","makePathSimpler","path","x1","y1","destinationPath","previous","controlX","controlY","parsedCommand","current","converted","forEach","calcLineLength","x2","y2","pct","c1","c2","c3","c4","QB1","QB2","QB3","getTangentCubicIterator","p1x","p1y","p2x","p2y","p3x","p3y","p4x","p4y","qb1","qb2","qb3","tangentX","tangentY","getPointOnQuadraticBezierIterator","getTangentQuadraticIterator","invT","pathIterator","tempP","tmpLen","perc","p","findPercentageForDistance","segInfo","distance","_objectSpread","nextLen","nextStep","lastPerc","angleFinder","angle","getPathSegmentsInfo","totalLength","tempInfo","info","basicInfo","command","destX","destY","getPointOnPath","infos","undefined","segPercent","segment","lerp","rePathCmdAll","RegExp","rePathCommand","rePathCmd","parsePath","pathString","cleanupSvgAttribute","res","matchStr","matchAll","chain","paramArr","exec","filteredGroups","filter","g","shift","map","numParse","Number","parseFloat","isNaN","replace","concat","reverse","idx","transformed","getSmoothPathFromPoints","points","correction","p1","p2","multSignX","multSignY","manyPoints","eq","midPoint","midPointFrom","transformPath","transform","pathOffset","multiplyTransformMatrices","pathSegment","newSegment","transformPoint","getRegularPolygonPath","numVertexes","radius","interiorAngle","rotationAdjustment","halfPI","d","Array","rad","scalarMultiply","joinPath","pathData","fractionDigits","arg","toFixed"],"mappings":";;;;;;;;;;;;AA2BA;AACA;AACA;AACA,MAAMA,gBAAoD,GAAG;AAC3DC,EAAAA,CAAC,EAAE,GAAG;AACNC,EAAAA,CAAC,EAAE,GAAA;AACL,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,eAAe,GAAGA,CACtBC,MAAe,EACfC,MAAe,EACfC,KAAa,EACbC,KAAa,EACbC,EAAU,EACVC,EAAU,EACVC,GAAW,EACXC,GAAW,EACXC,EAAU,EACVC,KAAa,EACbC,KAAa,KACwB;AACrC,EAAA,MAAMC,MAAM,GAAGC,GAAG,CAACZ,MAAM,CAAC;AACxBa,IAAAA,MAAM,GAAGC,GAAG,CAACd,MAAM,CAAC;AACpBe,IAAAA,MAAM,GAAGH,GAAG,CAACX,MAAM,CAAC;AACpBe,IAAAA,MAAM,GAAGF,GAAG,CAACb,MAAM,CAAC;AACpBgB,IAAAA,GAAG,GAAGf,KAAK,GAAGE,EAAE,GAAGW,MAAM,GAAGZ,KAAK,GAAGE,EAAE,GAAGW,MAAM,GAAGV,GAAG;AACrDY,IAAAA,GAAG,GAAGf,KAAK,GAAGC,EAAE,GAAGW,MAAM,GAAGb,KAAK,GAAGG,EAAE,GAAGW,MAAM,GAAGT,GAAG;AACrDY,IAAAA,IAAI,GAAGV,KAAK,GAAGD,EAAE,IAAI,CAACN,KAAK,GAAGE,EAAE,GAAGS,MAAM,GAAGV,KAAK,GAAGE,EAAE,GAAGM,MAAM,CAAC;AAChES,IAAAA,IAAI,GAAGV,KAAK,GAAGF,EAAE,IAAI,CAACL,KAAK,GAAGC,EAAE,GAAGS,MAAM,GAAGX,KAAK,GAAGG,EAAE,GAAGM,MAAM,CAAC;AAChEU,IAAAA,IAAI,GAAGJ,GAAG,GAAGT,EAAE,IAAIN,KAAK,GAAGE,EAAE,GAAGY,MAAM,GAAGb,KAAK,GAAGE,EAAE,GAAGU,MAAM,CAAC;AAC7DO,IAAAA,IAAI,GAAGJ,GAAG,GAAGV,EAAE,IAAIL,KAAK,GAAGC,EAAE,GAAGY,MAAM,GAAGd,KAAK,GAAGG,EAAE,GAAGU,MAAM,CAAC,CAAA;AAE/D,EAAA,OAAO,CAAC,GAAG,EAAEI,IAAI,EAAEC,IAAI,EAAEC,IAAI,EAAEC,IAAI,EAAEL,GAAG,EAAEC,GAAG,CAAC,CAAA;AAChD,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMK,aAAa,GAAGA,CACpBN,GAAW,EACXC,GAAW,EACXd,EAAU,EACVC,EAAU,EACVmB,KAAa,EACbC,KAAa,EACbC,OAAgB,KACuB;AACvC,EAAA,IAAItB,EAAE,KAAK,CAAC,IAAIC,EAAE,KAAK,CAAC,EAAE;AACxB,IAAA,OAAO,EAAE,CAAA;AACX,GAAA;EACA,IAAII,KAAK,GAAG,CAAC;AACXC,IAAAA,KAAK,GAAG,CAAC;AACTiB,IAAAA,IAAI,GAAG,CAAC,CAAA;AACV,EAAA,MAAMC,EAAE,GAAGC,IAAI,CAACD,EAAE;IAChBE,KAAK,GAAGJ,OAAO,GAAGK,OAAO;AACzBC,IAAAA,QAAQ,GAAGlB,GAAG,CAACgB,KAAK,CAAC;AACrB5B,IAAAA,KAAK,GAAGU,GAAG,CAACkB,KAAK,CAAC;IAClBG,EAAE,GAAG,GAAG,IAAI,CAAC/B,KAAK,GAAGe,GAAG,GAAGe,QAAQ,GAAGd,GAAG,CAAC;IAC1CgB,EAAE,GAAG,GAAG,IAAI,CAAChC,KAAK,GAAGgB,GAAG,GAAGc,QAAQ,GAAGf,GAAG,CAAC;IAC1CkB,GAAG,GAAG/B,EAAE,IAAI,CAAC;IACbgC,GAAG,GAAG/B,EAAE,IAAI,CAAC;IACbgC,GAAG,GAAGH,EAAE,IAAI,CAAC;IACbI,GAAG,GAAGL,EAAE,IAAI,CAAC;IACbM,EAAE,GAAGJ,GAAG,GAAGC,GAAG,GAAGD,GAAG,GAAGE,GAAG,GAAGD,GAAG,GAAGE,GAAG,CAAA;AACxC,EAAA,IAAIE,GAAG,GAAGX,IAAI,CAACY,GAAG,CAACrC,EAAE,CAAC,CAAA;AACtB,EAAA,IAAIsC,GAAG,GAAGb,IAAI,CAACY,GAAG,CAACpC,EAAE,CAAC,CAAA;EAEtB,IAAIkC,EAAE,GAAG,CAAC,EAAE;AACV,IAAA,MAAMI,CAAC,GAAGd,IAAI,CAACe,IAAI,CAAC,CAAC,GAAGL,EAAE,IAAIJ,GAAG,GAAGC,GAAG,CAAC,CAAC,CAAA;AACzCI,IAAAA,GAAG,IAAIG,CAAC,CAAA;AACRD,IAAAA,GAAG,IAAIC,CAAC,CAAA;AACV,GAAC,MAAM;IACLhB,IAAI,GACF,CAACH,KAAK,KAAKC,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,IAAII,IAAI,CAACe,IAAI,CAACL,EAAE,IAAIJ,GAAG,GAAGE,GAAG,GAAGD,GAAG,GAAGE,GAAG,CAAC,CAAC,CAAA;AAC5E,GAAA;EAEA,MAAMO,EAAE,GAAIlB,IAAI,GAAGa,GAAG,GAAGN,EAAE,GAAIQ,GAAG;IAChCI,EAAE,GAAI,CAACnB,IAAI,GAAGe,GAAG,GAAGT,EAAE,GAAIO,GAAG;IAC7BlC,GAAG,GAAGJ,KAAK,GAAG2C,EAAE,GAAGb,QAAQ,GAAGc,EAAE,GAAG7B,GAAG,GAAG,GAAG;IAC5CV,GAAG,GAAGyB,QAAQ,GAAGa,EAAE,GAAG3C,KAAK,GAAG4C,EAAE,GAAG5B,GAAG,GAAG,GAAG,CAAA;EAC9C,IAAI6B,MAAM,GAAGC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAACf,EAAE,GAAGY,EAAE,IAAIL,GAAG,EAAE,CAACN,EAAE,GAAGY,EAAE,IAAIJ,GAAG,CAAC,CAAA;AACpE,EAAA,IAAIO,MAAM,GAAGD,eAAe,CAC1B,CAACf,EAAE,GAAGY,EAAE,IAAIL,GAAG,EACf,CAACN,EAAE,GAAGY,EAAE,IAAIJ,GAAG,EACf,CAAC,CAACT,EAAE,GAAGY,EAAE,IAAIL,GAAG,EAChB,CAAC,CAACN,EAAE,GAAGY,EAAE,IAAIJ,GACf,CAAC,CAAA;AAED,EAAA,IAAIjB,KAAK,KAAK,CAAC,IAAIwB,MAAM,GAAG,CAAC,EAAE;IAC7BA,MAAM,IAAI,CAAC,GAAGrB,EAAE,CAAA;GACjB,MAAM,IAAIH,KAAK,KAAK,CAAC,IAAIwB,MAAM,GAAG,CAAC,EAAE;IACpCA,MAAM,IAAI,CAAC,GAAGrB,EAAE,CAAA;AAClB,GAAA;;AAEA;AACA,EAAA,MAAMsB,QAAQ,GAAGrB,IAAI,CAACsB,IAAI,CAACtB,IAAI,CAACY,GAAG,CAAEQ,MAAM,GAAGrB,EAAE,GAAI,CAAC,CAAC,CAAC;AACrDwB,IAAAA,MAAM,GAAG,EAAE;IACXC,MAAM,GAAGJ,MAAM,GAAGC,QAAQ;AAC1B1C,IAAAA,EAAE,GACE,CAAC,GAAG,CAAC,GAAIqB,IAAI,CAACf,GAAG,CAACuC,MAAM,GAAG,CAAC,CAAC,GAAGxB,IAAI,CAACf,GAAG,CAACuC,MAAM,GAAG,CAAC,CAAC,GACtDxB,IAAI,CAACf,GAAG,CAACuC,MAAM,GAAG,CAAC,CAAC,CAAA;AACxB,EAAA,IAAIC,GAAG,GAAGP,MAAM,GAAGM,MAAM,CAAA;EAEzB,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,QAAQ,EAAEK,CAAC,EAAE,EAAE;IACjCH,MAAM,CAACG,CAAC,CAAC,GAAGxD,eAAe,CACzBgD,MAAM,EACNO,GAAG,EACHpD,KAAK,EACL8B,QAAQ,EACRQ,GAAG,EACHE,GAAG,EACHpC,GAAG,EACHC,GAAG,EACHC,EAAE,EACFC,KAAK,EACLC,KACF,CAAC,CAAA;AACDD,IAAAA,KAAK,GAAG2C,MAAM,CAACG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACpB7C,IAAAA,KAAK,GAAG0C,MAAM,CAACG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACpBR,IAAAA,MAAM,GAAGO,GAAG,CAAA;AACZA,IAAAA,GAAG,IAAID,MAAM,CAAA;AACf,GAAA;AACA,EAAA,OAAOD,MAAM,CAAA;AACf,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMJ,eAAe,GAAGA,CACtBQ,EAAU,EACVC,EAAU,EACVC,EAAU,EACVC,EAAU,KACE;EACZ,MAAMC,EAAE,GAAG/B,IAAI,CAACgC,KAAK,CAACJ,EAAE,EAAED,EAAE,CAAC;IAC3BM,EAAE,GAAGjC,IAAI,CAACgC,KAAK,CAACF,EAAE,EAAED,EAAE,CAAC,CAAA;EACzB,IAAII,EAAE,IAAIF,EAAE,EAAE;IACZ,OAAOE,EAAE,GAAGF,EAAE,CAAA;AAChB,GAAC,MAAM;IACL,OAAO,CAAC,GAAG/B,IAAI,CAACD,EAAE,IAAIgC,EAAE,GAAGE,EAAE,CAAC,CAAA;AAChC,GAAA;AACF,CAAC,CAAA;;AAED;AACA;AACA,MAAMC,GAAG,GAAIC,CAAS,IAAKA,CAAC,IAAI,CAAC,CAAA;AACjC,MAAMC,GAAG,GAAID,CAAS,IAAK,CAAC,GAAGA,CAAC,IAAI,CAAC,IAAI,CAAC,GAAGA,CAAC,CAAC,CAAA;AAC/C,MAAME,GAAG,GAAIF,CAAS,IAAK,CAAC,GAAGA,CAAC,GAAG,CAAC,CAAC,GAAGA,CAAC,KAAK,CAAC,CAAA;AAC/C,MAAMG,GAAG,GAAIH,CAAS,IAAK,CAAC,CAAC,GAAGA,CAAC,KAAK,CAAC,CAAA;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,gBAAgBA,CAC9BC,IAAY,EACZC,IAAY,EACZC,IAAY,EACZC,IAAY,EACZC,IAAY,EACZC,IAAY,EACZC,IAAY,EACZC,IAAY,EACC;AACb,EAAA,IAAIC,UAAkB,CAAA;EACtB,IAAIC,MAAM,CAACC,mBAAmB,EAAE;AAC9B;IACAF,UAAU,GAAG,CAAC,GAAGG,SAAS,CAAC,CAACC,IAAI,EAAE,CAAA;AAClC,IAAA,IAAIC,KAAK,CAACC,kBAAkB,CAACN,UAAU,CAAC,EAAE;AACxC,MAAA,OAAOK,KAAK,CAACC,kBAAkB,CAACN,UAAU,CAAC,CAAA;AAC7C,KAAA;AACF,GAAA;AAEA,EAAA,MAAMjC,IAAI,GAAGf,IAAI,CAACe,IAAI;IACpBH,GAAG,GAAGZ,IAAI,CAACY,GAAG;AACd2C,IAAAA,OAAO,GAAG,EAAE;AACZC,IAAAA,MAAwD,GAAG,CACzD,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAAC,CAAC,EAAE,CAAC,CAAC,CACP,CAAA;AAEH,EAAA,IAAIC,CAAC,GAAG,CAAC,GAAGjB,IAAI,GAAG,EAAE,GAAGE,IAAI,GAAG,CAAC,GAAGE,IAAI,CAAA;AACvC,EAAA,IAAIc,CAAC,GAAG,CAAC,CAAC,GAAGlB,IAAI,GAAG,CAAC,GAAGE,IAAI,GAAG,CAAC,GAAGE,IAAI,GAAG,CAAC,GAAGE,IAAI,CAAA;EAClD,IAAIa,CAAC,GAAG,CAAC,GAAGjB,IAAI,GAAG,CAAC,GAAGF,IAAI,CAAA;EAE3B,KAAK,IAAId,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAE,EAAEA,CAAC,EAAE;IAC1B,IAAIA,CAAC,GAAG,CAAC,EAAE;MACT+B,CAAC,GAAG,CAAC,GAAGhB,IAAI,GAAG,EAAE,GAAGE,IAAI,GAAG,CAAC,GAAGE,IAAI,CAAA;AACnCa,MAAAA,CAAC,GAAG,CAAC,CAAC,GAAGjB,IAAI,GAAG,CAAC,GAAGE,IAAI,GAAG,CAAC,GAAGE,IAAI,GAAG,CAAC,GAAGE,IAAI,CAAA;AAC9CY,MAAAA,CAAC,GAAG,CAAC,GAAGhB,IAAI,GAAG,CAAC,GAAGF,IAAI,CAAA;AACzB,KAAA;AAEA,IAAA,IAAI7B,GAAG,CAAC8C,CAAC,CAAC,GAAG,KAAK,EAAE;AAClB,MAAA,IAAI9C,GAAG,CAAC6C,CAAC,CAAC,GAAG,KAAK,EAAE;AAClB,QAAA,SAAA;AACF,OAAA;AACA,MAAA,MAAMtB,CAAC,GAAG,CAACwB,CAAC,GAAGF,CAAC,CAAA;AAChB,MAAA,IAAI,CAAC,GAAGtB,CAAC,IAAIA,CAAC,GAAG,CAAC,EAAE;AAClBoB,QAAAA,OAAO,CAACK,IAAI,CAACzB,CAAC,CAAC,CAAA;AACjB,OAAA;AACA,MAAA,SAAA;AACF,KAAA;IACA,MAAM0B,IAAI,GAAGJ,CAAC,GAAGA,CAAC,GAAG,CAAC,GAAGE,CAAC,GAAGD,CAAC,CAAA;IAC9B,IAAIG,IAAI,GAAG,CAAC,EAAE;AACZ,MAAA,SAAA;AACF,KAAA;AACA,IAAA,MAAMC,QAAQ,GAAG/C,IAAI,CAAC8C,IAAI,CAAC,CAAA;IAC3B,MAAME,EAAE,GAAG,CAAC,CAACN,CAAC,GAAGK,QAAQ,KAAK,CAAC,GAAGJ,CAAC,CAAC,CAAA;AACpC,IAAA,IAAI,CAAC,GAAGK,EAAE,IAAIA,EAAE,GAAG,CAAC,EAAE;AACpBR,MAAAA,OAAO,CAACK,IAAI,CAACG,EAAE,CAAC,CAAA;AAClB,KAAA;IACA,MAAMC,EAAE,GAAG,CAAC,CAACP,CAAC,GAAGK,QAAQ,KAAK,CAAC,GAAGJ,CAAC,CAAC,CAAA;AACpC,IAAA,IAAI,CAAC,GAAGM,EAAE,IAAIA,EAAE,GAAG,CAAC,EAAE;AACpBT,MAAAA,OAAO,CAACK,IAAI,CAACI,EAAE,CAAC,CAAA;AAClB,KAAA;AACF,GAAA;AAEA,EAAA,IAAIC,CAAC,GAAGV,OAAO,CAACW,MAAM,CAAA;EACtB,MAAMC,IAAI,GAAGF,CAAC,CAAA;AACd,EAAA,MAAMG,QAAQ,GAAGC,6BAA6B,CAC5C7B,IAAI,EACJC,IAAI,EACJC,IAAI,EACJC,IAAI,EACJC,IAAI,EACJC,IAAI,EACJC,IAAI,EACJC,IACF,CAAC,CAAA;EACD,OAAOkB,CAAC,EAAE,EAAE;IACV,MAAM;MAAEK,CAAC;AAAEC,MAAAA,CAAAA;AAAE,KAAC,GAAGH,QAAQ,CAACb,OAAO,CAACU,CAAC,CAAC,CAAC,CAAA;AACrCT,IAAAA,MAAM,CAAC,CAAC,CAAC,CAACS,CAAC,CAAC,GAAGK,CAAC,CAAA;AAChBd,IAAAA,MAAM,CAAC,CAAC,CAAC,CAACS,CAAC,CAAC,GAAGM,CAAC,CAAA;AAClB,GAAA;AAEAf,EAAAA,MAAM,CAAC,CAAC,CAAC,CAACW,IAAI,CAAC,GAAG3B,IAAI,CAAA;AACtBgB,EAAAA,MAAM,CAAC,CAAC,CAAC,CAACW,IAAI,CAAC,GAAG1B,IAAI,CAAA;EACtBe,MAAM,CAAC,CAAC,CAAC,CAACW,IAAI,GAAG,CAAC,CAAC,GAAGrB,IAAI,CAAA;EAC1BU,MAAM,CAAC,CAAC,CAAC,CAACW,IAAI,GAAG,CAAC,CAAC,GAAGpB,IAAI,CAAA;EAC1B,MAAMxB,MAAmB,GAAG,CAC1B,IAAIiD,KAAK,CAACxE,IAAI,CAACyE,GAAG,CAAC,GAAGjB,MAAM,CAAC,CAAC,CAAC,CAAC,EAAExD,IAAI,CAACyE,GAAG,CAAC,GAAGjB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EACzD,IAAIgB,KAAK,CAACxE,IAAI,CAAC0E,GAAG,CAAC,GAAGlB,MAAM,CAAC,CAAC,CAAC,CAAC,EAAExD,IAAI,CAAC0E,GAAG,CAAC,GAAGlB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1D,CAAA;EACD,IAAIP,MAAM,CAACC,mBAAmB,EAAE;AAC9BG,IAAAA,KAAK,CAACC,kBAAkB,CAACN,UAAU,CAAE,GAAGzB,MAAM,CAAA;AAChD,GAAA;AACA,EAAA,OAAOA,MAAM,CAAA;AACf,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMoD,gBAAgB,GAAGA,CAC9BC,EAAU,EACVC,EAAU,EAAAC,IAAA,KAE6B;AAAA,EAAA,IADvC,CAACC,CAAC,EAAExG,EAAE,EAAEC,EAAE,EAAEwG,GAAG,EAAErF,KAAK,EAAEC,KAAK,EAAEqF,EAAE,EAAEC,EAAE,CAAoB,GAAAJ,IAAA,CAAA;EAEzD,MAAMK,QAAQ,GAAGzF,aAAa,CAACuF,EAAE,GAAGL,EAAE,EAAEM,EAAE,GAAGL,EAAE,EAAEtG,EAAE,EAAEC,EAAE,EAAEmB,KAAK,EAAEC,KAAK,EAAEoF,GAAG,CAAC,CAAA;AAE3E,EAAA,KAAK,IAAItD,CAAC,GAAG,CAAC,EAAE0D,GAAG,GAAGD,QAAQ,CAACjB,MAAM,EAAExC,CAAC,GAAG0D,GAAG,EAAE1D,CAAC,EAAE,EAAE;AACnDyD,IAAAA,QAAQ,CAACzD,CAAC,CAAC,CAAC,CAAC,CAAC,IAAIkD,EAAE,CAAA;AACpBO,IAAAA,QAAQ,CAACzD,CAAC,CAAC,CAAC,CAAC,CAAC,IAAImD,EAAE,CAAA;AACpBM,IAAAA,QAAQ,CAACzD,CAAC,CAAC,CAAC,CAAC,CAAC,IAAIkD,EAAE,CAAA;AACpBO,IAAAA,QAAQ,CAACzD,CAAC,CAAC,CAAC,CAAC,CAAC,IAAImD,EAAE,CAAA;AACpBM,IAAAA,QAAQ,CAACzD,CAAC,CAAC,CAAC,CAAC,CAAC,IAAIkD,EAAE,CAAA;AACpBO,IAAAA,QAAQ,CAACzD,CAAC,CAAC,CAAC,CAAC,CAAC,IAAImD,EAAE,CAAA;AACtB,GAAA;AACA,EAAA,OAAOM,QAAQ,CAAA;AACjB,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACaE,MAAAA,eAAe,GAAIC,IAAsB,IAAsB;AAC1E;AACA;AACA;EACA,IAAIhB,CAAC,GAAG,CAAC;AACPC,IAAAA,CAAC,GAAG,CAAC,CAAA;AACP;AACA;AACA;EACA,IAAIgB,EAAE,GAAG,CAAC;AACRC,IAAAA,EAAE,GAAG,CAAC,CAAA;AACR;AACA;EACA,MAAMC,eAAgC,GAAG,EAAE,CAAA;AAC3C,EAAA,IAAIC,QAAQ;AACV;AACAC,IAAAA,QAAQ,GAAG,CAAC;AACZC,IAAAA,QAAQ,GAAG,CAAC,CAAA;AACd,EAAA,KAAK,MAAMC,aAAa,IAAIP,IAAI,EAAE;AAChC,IAAA,MAAMQ,OAA8B,GAAG,CAAC,GAAGD,aAAa,CAAC,CAAA;AACzD,IAAA,IAAIE,SAA2C,CAAA;AAC/C,IAAA,QACED,OAAO,CAAC,CAAC,CAAC;AAAC;AAEX,MAAA,KAAK,GAAG;AAAE;AACRA,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIxB,CAAC,CAAA;AACfwB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIvB,CAAC,CAAA;AACjB;AACA,MAAA,KAAK,GAAG;AACND,QAAAA,CAAC,GAAGwB,OAAO,CAAC,CAAC,CAAC,CAAA;AACdvB,QAAAA,CAAC,GAAGuB,OAAO,CAAC,CAAC,CAAC,CAAA;AACdC,QAAAA,SAAS,GAAG,CAAC,GAAG,EAAEzB,CAAC,EAAEC,CAAC,CAAC,CAAA;AACvB,QAAA,MAAA;AACF,MAAA,KAAK,GAAG;AAAE;AACRuB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIxB,CAAC,CAAA;AACjB;AACA,MAAA,KAAK,GAAG;AACNA,QAAAA,CAAC,GAAGwB,OAAO,CAAC,CAAC,CAAC,CAAA;AACdC,QAAAA,SAAS,GAAG,CAAC,GAAG,EAAEzB,CAAC,EAAEC,CAAC,CAAC,CAAA;AACvB,QAAA,MAAA;AACF,MAAA,KAAK,GAAG;AAAE;AACRuB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIvB,CAAC,CAAA;AACjB;AACA,MAAA,KAAK,GAAG;AACNA,QAAAA,CAAC,GAAGuB,OAAO,CAAC,CAAC,CAAC,CAAA;AACdC,QAAAA,SAAS,GAAG,CAAC,GAAG,EAAEzB,CAAC,EAAEC,CAAC,CAAC,CAAA;AACvB,QAAA,MAAA;AACF,MAAA,KAAK,GAAG;AAAE;AACRuB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIxB,CAAC,CAAA;AACfwB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIvB,CAAC,CAAA;AACjB;AACA,MAAA,KAAK,GAAG;AACND,QAAAA,CAAC,GAAGwB,OAAO,CAAC,CAAC,CAAC,CAAA;AACdvB,QAAAA,CAAC,GAAGuB,OAAO,CAAC,CAAC,CAAC,CAAA;AACdP,QAAAA,EAAE,GAAGO,OAAO,CAAC,CAAC,CAAC,CAAA;AACfN,QAAAA,EAAE,GAAGM,OAAO,CAAC,CAAC,CAAC,CAAA;AACfC,QAAAA,SAAS,GAAG,CAAC,GAAG,EAAEzB,CAAC,EAAEC,CAAC,CAAC,CAAA;AACvB,QAAA,MAAA;AACF,MAAA,KAAK,GAAG;AAAE;AACRuB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIxB,CAAC,CAAA;AACfwB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIvB,CAAC,CAAA;AACfuB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIxB,CAAC,CAAA;AACfwB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIvB,CAAC,CAAA;AACfuB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIxB,CAAC,CAAA;AACfwB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIvB,CAAC,CAAA;AACjB;AACA,MAAA,KAAK,GAAG;AACNoB,QAAAA,QAAQ,GAAGG,OAAO,CAAC,CAAC,CAAC,CAAA;AACrBF,QAAAA,QAAQ,GAAGE,OAAO,CAAC,CAAC,CAAC,CAAA;AACrBxB,QAAAA,CAAC,GAAGwB,OAAO,CAAC,CAAC,CAAC,CAAA;AACdvB,QAAAA,CAAC,GAAGuB,OAAO,CAAC,CAAC,CAAC,CAAA;QACdC,SAAS,GAAG,CAAC,GAAG,EAAED,OAAO,CAAC,CAAC,CAAC,EAAEA,OAAO,CAAC,CAAC,CAAC,EAAEH,QAAQ,EAAEC,QAAQ,EAAEtB,CAAC,EAAEC,CAAC,CAAC,CAAA;AACnE,QAAA,MAAA;AACF,MAAA,KAAK,GAAG;AAAE;AACRuB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIxB,CAAC,CAAA;AACfwB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIvB,CAAC,CAAA;AACfuB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIxB,CAAC,CAAA;AACfwB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIvB,CAAC,CAAA;AACjB;AACA,MAAA,KAAK,GAAG;AACN;QACA,IAAImB,QAAQ,KAAK,GAAG,EAAE;AACpB;AACAC,UAAAA,QAAQ,GAAG,CAAC,GAAGrB,CAAC,GAAGqB,QAAQ,CAAA;AAC3BC,UAAAA,QAAQ,GAAG,CAAC,GAAGrB,CAAC,GAAGqB,QAAQ,CAAA;AAC7B,SAAC,MAAM;AACL;AACA;AACAD,UAAAA,QAAQ,GAAGrB,CAAC,CAAA;AACZsB,UAAAA,QAAQ,GAAGrB,CAAC,CAAA;AACd,SAAA;AACAD,QAAAA,CAAC,GAAGwB,OAAO,CAAC,CAAC,CAAC,CAAA;AACdvB,QAAAA,CAAC,GAAGuB,OAAO,CAAC,CAAC,CAAC,CAAA;QACdC,SAAS,GAAG,CAAC,GAAG,EAAEJ,QAAQ,EAAEC,QAAQ,EAAEE,OAAO,CAAC,CAAC,CAAC,EAAEA,OAAO,CAAC,CAAC,CAAC,EAAExB,CAAC,EAAEC,CAAC,CAAC,CAAA;AACnE;AACA;AACAoB,QAAAA,QAAQ,GAAGI,SAAS,CAAC,CAAC,CAAC,CAAA;AACvBH,QAAAA,QAAQ,GAAGG,SAAS,CAAC,CAAC,CAAC,CAAA;AACvB,QAAA,MAAA;AACF,MAAA,KAAK,GAAG;AAAE;AACRD,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIxB,CAAC,CAAA;AACfwB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIvB,CAAC,CAAA;AACfuB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIxB,CAAC,CAAA;AACfwB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIvB,CAAC,CAAA;AACjB;AACA,MAAA,KAAK,GAAG;AACNoB,QAAAA,QAAQ,GAAGG,OAAO,CAAC,CAAC,CAAC,CAAA;AACrBF,QAAAA,QAAQ,GAAGE,OAAO,CAAC,CAAC,CAAC,CAAA;AACrBxB,QAAAA,CAAC,GAAGwB,OAAO,CAAC,CAAC,CAAC,CAAA;AACdvB,QAAAA,CAAC,GAAGuB,OAAO,CAAC,CAAC,CAAC,CAAA;QACdC,SAAS,GAAG,CAAC,GAAG,EAAEJ,QAAQ,EAAEC,QAAQ,EAAEtB,CAAC,EAAEC,CAAC,CAAC,CAAA;AAC3C,QAAA,MAAA;AACF,MAAA,KAAK,GAAG;AAAE;AACRuB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIxB,CAAC,CAAA;AACfwB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIvB,CAAC,CAAA;AACjB;AACA,MAAA,KAAK,GAAG;QACN,IAAImB,QAAQ,KAAK,GAAG,EAAE;AACpB;AACAC,UAAAA,QAAQ,GAAG,CAAC,GAAGrB,CAAC,GAAGqB,QAAQ,CAAA;AAC3BC,UAAAA,QAAQ,GAAG,CAAC,GAAGrB,CAAC,GAAGqB,QAAQ,CAAA;AAC7B,SAAC,MAAM;AACL;AACA;AACAD,UAAAA,QAAQ,GAAGrB,CAAC,CAAA;AACZsB,UAAAA,QAAQ,GAAGrB,CAAC,CAAA;AACd,SAAA;AACAD,QAAAA,CAAC,GAAGwB,OAAO,CAAC,CAAC,CAAC,CAAA;AACdvB,QAAAA,CAAC,GAAGuB,OAAO,CAAC,CAAC,CAAC,CAAA;QACdC,SAAS,GAAG,CAAC,GAAG,EAAEJ,QAAQ,EAAEC,QAAQ,EAAEtB,CAAC,EAAEC,CAAC,CAAC,CAAA;AAC3C,QAAA,MAAA;AACF,MAAA,KAAK,GAAG;AACNuB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIxB,CAAC,CAAA;AACfwB,QAAAA,OAAO,CAAC,CAAC,CAAC,IAAIvB,CAAC,CAAA;AACjB;AACA,MAAA,KAAK,GAAG;AACNI,QAAAA,gBAAgB,CAACL,CAAC,EAAEC,CAAC,EAAEuB,OAAO,CAAC,CAACE,OAAO,CAAEvC,CAAC,IAAKgC,eAAe,CAAC7B,IAAI,CAACH,CAAC,CAAC,CAAC,CAAA;AACvEa,QAAAA,CAAC,GAAGwB,OAAO,CAAC,CAAC,CAAC,CAAA;AACdvB,QAAAA,CAAC,GAAGuB,OAAO,CAAC,CAAC,CAAC,CAAA;AACd,QAAA,MAAA;AACF,MAAA,KAAK,GAAG,CAAA;AACR,MAAA,KAAK,GAAG;AACNxB,QAAAA,CAAC,GAAGiB,EAAE,CAAA;AACNhB,QAAAA,CAAC,GAAGiB,EAAE,CAAA;QACNO,SAAS,GAAG,CAAC,GAAG,CAAC,CAAA;AACjB,QAAA,MAAA;AAEJ,KAAA;AACA,IAAA,IAAIA,SAAS,EAAE;AACbN,MAAAA,eAAe,CAAC7B,IAAI,CAACmC,SAAS,CAAC,CAAA;AAC/BL,MAAAA,QAAQ,GAAGK,SAAS,CAAC,CAAC,CAAC,CAAA;AACzB,KAAC,MAAM;AACLL,MAAAA,QAAQ,GAAG,EAAE,CAAA;AACf,KAAA;AACF,GAAA;AACA,EAAA,OAAOD,eAAe,CAAA;AACxB,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMQ,cAAc,GAAGA,CACrBV,EAAU,EACVC,EAAU,EACVU,EAAU,EACVC,EAAU,KACCnG,IAAI,CAACe,IAAI,CAAC,CAACmF,EAAE,GAAGX,EAAE,KAAK,CAAC,GAAG,CAACY,EAAE,GAAGX,EAAE,KAAK,CAAC,CAAC,CAAA;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMnB,6BAA6B,GACjCA,CACE7B,IAAY,EACZC,IAAY,EACZC,IAAY,EACZC,IAAY,EACZC,IAAY,EACZC,IAAY,EACZC,IAAY,EACZC,IAAY,KAEbqD,GAAW,IAAK;AACf,EAAA,MAAMC,EAAE,GAAGnE,GAAG,CAACkE,GAAG,CAAC;AACjBE,IAAAA,EAAE,GAAGlE,GAAG,CAACgE,GAAG,CAAC;AACbG,IAAAA,EAAE,GAAGlE,GAAG,CAAC+D,GAAG,CAAC;AACbI,IAAAA,EAAE,GAAGlE,GAAG,CAAC8D,GAAG,CAAC,CAAA;AACf,EAAA,OAAO,IAAI5B,KAAK,CACd1B,IAAI,GAAGuD,EAAE,GAAGzD,IAAI,GAAG0D,EAAE,GAAG5D,IAAI,GAAG6D,EAAE,GAAG/D,IAAI,GAAGgE,EAAE,EAC7CzD,IAAI,GAAGsD,EAAE,GAAGxD,IAAI,GAAGyD,EAAE,GAAG3D,IAAI,GAAG4D,EAAE,GAAG9D,IAAI,GAAG+D,EAC7C,CAAC,CAAA;AACH,CAAC,CAAA;AAEH,MAAMC,GAAG,GAAItE,CAAS,IAAKA,CAAC,IAAI,CAAC,CAAA;AACjC,MAAMuE,GAAG,GAAIvE,CAAS,IAAK,CAAC,GAAGA,CAAC,IAAI,CAAC,GAAGA,CAAC,CAAC,CAAA;AAC1C,MAAMwE,GAAG,GAAIxE,CAAS,IAAK,CAAC,CAAC,GAAGA,CAAC,KAAK,CAAC,CAAA;AAEvC,MAAMyE,uBAAuB,GAC3BA,CACEC,GAAW,EACXC,GAAW,EACXC,GAAW,EACXC,GAAW,EACXC,GAAW,EACXC,GAAW,EACXC,GAAW,EACXC,GAAW,KAEZhB,GAAW,IAAK;AACf,EAAA,MAAMiB,GAAG,GAAGZ,GAAG,CAACL,GAAG,CAAC;AAClBkB,IAAAA,GAAG,GAAGZ,GAAG,CAACN,GAAG,CAAC;AACdmB,IAAAA,GAAG,GAAGZ,GAAG,CAACP,GAAG,CAAC;IACdoB,QAAQ,GACN,CAAC,IAAID,GAAG,IAAIR,GAAG,GAAGF,GAAG,CAAC,GAAGS,GAAG,IAAIL,GAAG,GAAGF,GAAG,CAAC,GAAGM,GAAG,IAAIF,GAAG,GAAGF,GAAG,CAAC,CAAC;IACjEQ,QAAQ,GACN,CAAC,IAAIF,GAAG,IAAIP,GAAG,GAAGF,GAAG,CAAC,GAAGQ,GAAG,IAAIJ,GAAG,GAAGF,GAAG,CAAC,GAAGK,GAAG,IAAID,GAAG,GAAGF,GAAG,CAAC,CAAC,CAAA;AACnE,EAAA,OAAOlH,IAAI,CAACgC,KAAK,CAACyF,QAAQ,EAAED,QAAQ,CAAC,CAAA;AACvC,CAAC,CAAA;AAEH,MAAME,iCAAiC,GACrCA,CACEb,GAAW,EACXC,GAAW,EACXC,GAAW,EACXC,GAAW,EACXC,GAAW,EACXC,GAAW,KAEZd,GAAW,IAAK;AACf,EAAA,MAAMC,EAAE,GAAGI,GAAG,CAACL,GAAG,CAAC;AACjBE,IAAAA,EAAE,GAAGI,GAAG,CAACN,GAAG,CAAC;AACbG,IAAAA,EAAE,GAAGI,GAAG,CAACP,GAAG,CAAC,CAAA;EACf,OAAO,IAAI5B,KAAK,CACdyC,GAAG,GAAGZ,EAAE,GAAGU,GAAG,GAAGT,EAAE,GAAGO,GAAG,GAAGN,EAAE,EAC9BW,GAAG,GAAGb,EAAE,GAAGW,GAAG,GAAGV,EAAE,GAAGQ,GAAG,GAAGP,EAC9B,CAAC,CAAA;AACH,CAAC,CAAA;AAEH,MAAMoB,2BAA2B,GAC/BA,CACEd,GAAW,EACXC,GAAW,EACXC,GAAW,EACXC,GAAW,EACXC,GAAW,EACXC,GAAW,KAEZd,GAAW,IAAK;AACf,EAAA,MAAMwB,IAAI,GAAG,CAAC,GAAGxB,GAAG;AAClBoB,IAAAA,QAAQ,GAAG,CAAC,IAAII,IAAI,IAAIb,GAAG,GAAGF,GAAG,CAAC,GAAGT,GAAG,IAAIa,GAAG,GAAGF,GAAG,CAAC,CAAC;AACvDU,IAAAA,QAAQ,GAAG,CAAC,IAAIG,IAAI,IAAIZ,GAAG,GAAGF,GAAG,CAAC,GAAGV,GAAG,IAAIc,GAAG,GAAGF,GAAG,CAAC,CAAC,CAAA;AACzD,EAAA,OAAOhH,IAAI,CAACgC,KAAK,CAACyF,QAAQ,EAAED,QAAQ,CAAC,CAAA;AACvC,CAAC,CAAA;;AAEH;AACA;AACA,MAAMK,YAAY,GAAGA,CACnBzD,QAAgC,EAChCmB,EAAU,EACVC,EAAU,KACP;EACH,IAAIsC,KAAK,GAAG,IAAItD,KAAK,CAACe,EAAE,EAAEC,EAAE,CAAC;AAC3BuC,IAAAA,MAAM,GAAG,CAAC,CAAA;AACZ,EAAA,KAAK,IAAIC,IAAI,GAAG,CAAC,EAAEA,IAAI,IAAI,GAAG,EAAEA,IAAI,IAAI,CAAC,EAAE;AACzC,IAAA,MAAMC,CAAC,GAAG7D,QAAQ,CAAC4D,IAAI,GAAG,GAAG,CAAC,CAAA;AAC9BD,IAAAA,MAAM,IAAI9B,cAAc,CAAC6B,KAAK,CAACxD,CAAC,EAAEwD,KAAK,CAACvD,CAAC,EAAE0D,CAAC,CAAC3D,CAAC,EAAE2D,CAAC,CAAC1D,CAAC,CAAC,CAAA;AACpDuD,IAAAA,KAAK,GAAGG,CAAC,CAAA;AACX,GAAA;AACA,EAAA,OAAOF,MAAM,CAAA;AACf,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMG,yBAAyB,GAAGA,CAChCC,OAA8B,EAC9BC,QAAgB,KACA;EAChB,IAAIJ,IAAI,GAAG,CAAC;AACVD,IAAAA,MAAM,GAAG,CAAC;AACVD,IAAAA,KAAS,GAAG;MAAExD,CAAC,EAAE6D,OAAO,CAAC7D,CAAC;MAAEC,CAAC,EAAE4D,OAAO,CAAC5D,CAAAA;KAAG;AAC1C0D,IAAAA,CAAK,GAAAI,cAAA,CAAQP,EAAAA,EAAAA,KAAK,CAAE;IACpBQ,OAAe;AACfC,IAAAA,QAAQ,GAAG,IAAI;AACfC,IAAAA,QAAQ,GAAG,CAAC,CAAA;AACd;AACA;AACA,EAAA,MAAMpE,QAAQ,GAAG+D,OAAO,CAAC/D,QAAQ;IAC/BqE,WAAW,GAAGN,OAAO,CAACM,WAAW,CAAA;AACnC,EAAA,OAAOV,MAAM,GAAGK,QAAQ,IAAIG,QAAQ,GAAG,MAAM,EAAE;AAC7CN,IAAAA,CAAC,GAAG7D,QAAQ,CAAC4D,IAAI,CAAC,CAAA;AAClBQ,IAAAA,QAAQ,GAAGR,IAAI,CAAA;AACfM,IAAAA,OAAO,GAAGrC,cAAc,CAAC6B,KAAK,CAACxD,CAAC,EAAEwD,KAAK,CAACvD,CAAC,EAAE0D,CAAC,CAAC3D,CAAC,EAAE2D,CAAC,CAAC1D,CAAC,CAAC,CAAA;AACpD;AACA,IAAA,IAAI+D,OAAO,GAAGP,MAAM,GAAGK,QAAQ,EAAE;AAC/B;AACAJ,MAAAA,IAAI,IAAIO,QAAQ,CAAA;AAChBA,MAAAA,QAAQ,IAAI,CAAC,CAAA;AACf,KAAC,MAAM;AACLT,MAAAA,KAAK,GAAGG,CAAC,CAAA;AACTD,MAAAA,IAAI,IAAIO,QAAQ,CAAA;AAChBR,MAAAA,MAAM,IAAIO,OAAO,CAAA;AACnB,KAAA;AACF,GAAA;AACA,EAAA,OAAAD,cAAA,CAAAA,cAAA,CAAA,EAAA,EAAYJ,CAAC,CAAA,EAAA,EAAA,EAAA;IAAES,KAAK,EAAED,WAAW,CAACD,QAAQ,CAAA;AAAC,GAAA,CAAA,CAAA;AAC7C,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACaG,MAAAA,mBAAmB,GAC9BrD,IAAqB,IACE;EACvB,IAAIsD,WAAW,GAAG,CAAC;AACjB;AACA;AACArD,IAAAA,EAAE,GAAG,CAAC;AACNC,IAAAA,EAAE,GAAG,CAAC;AACNU,IAAAA,EAAE,GAAG,CAAC;AACNC,IAAAA,EAAE,GAAG,CAAC;IACN/B,QAAQ;IACRyE,QAA0B,CAAA;EAC5B,MAAMC,IAAwB,GAAG,EAAE,CAAA;AACnC,EAAA,KAAK,MAAMhD,OAAO,IAAIR,IAAI,EAAE;AAC1B,IAAA,MAAMyD,SAAgE,GAAG;AACvEzE,MAAAA,CAAC,EAAEiB,EAAE;AACLhB,MAAAA,CAAC,EAAEiB,EAAE;AACLwD,MAAAA,OAAO,EAAElD,OAAO,CAAC,CAAC,CAAC;AACnB5B,MAAAA,MAAM,EAAE,CAAA;KACT,CAAA;AACD,IAAA,QACE4B,OAAO,CAAC,CAAC,CAAC;AAAC;AAEX,MAAA,KAAK,GAAG;AACN+C,QAAAA,QAAQ,GAAgCE,SAAS,CAAA;QACjDF,QAAQ,CAACvE,CAAC,GAAG4B,EAAE,GAAGX,EAAE,GAAGO,OAAO,CAAC,CAAC,CAAC,CAAA;QACjC+C,QAAQ,CAACtE,CAAC,GAAG4B,EAAE,GAAGX,EAAE,GAAGM,OAAO,CAAC,CAAC,CAAC,CAAA;AACjC,QAAA,MAAA;AACF,MAAA,KAAK,GAAG;AACN+C,QAAAA,QAAQ,GAAgCE,SAAS,CAAA;AACjDF,QAAAA,QAAQ,CAAC3E,MAAM,GAAG+B,cAAc,CAACV,EAAE,EAAEC,EAAE,EAAEM,OAAO,CAAC,CAAC,CAAC,EAAEA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AAChEP,QAAAA,EAAE,GAAGO,OAAO,CAAC,CAAC,CAAC,CAAA;AACfN,QAAAA,EAAE,GAAGM,OAAO,CAAC,CAAC,CAAC,CAAA;AACf,QAAA,MAAA;AACF,MAAA,KAAK,GAAG;AACN1B,QAAAA,QAAQ,GAAGC,6BAA6B,CACtCkB,EAAE,EACFC,EAAE,EACFM,OAAO,CAAC,CAAC,CAAC,EACVA,OAAO,CAAC,CAAC,CAAC,EACVA,OAAO,CAAC,CAAC,CAAC,EACVA,OAAO,CAAC,CAAC,CAAC,EACVA,OAAO,CAAC,CAAC,CAAC,EACVA,OAAO,CAAC,CAAC,CACX,CAAC,CAAA;AACD+C,QAAAA,QAAQ,GAAoBE,SAAS,CAAA;QACrCF,QAAQ,CAACzE,QAAQ,GAAGA,QAAQ,CAAA;AAC5ByE,QAAAA,QAAQ,CAACJ,WAAW,GAAG7B,uBAAuB,CAC5CrB,EAAE,EACFC,EAAE,EACFM,OAAO,CAAC,CAAC,CAAC,EACVA,OAAO,CAAC,CAAC,CAAC,EACVA,OAAO,CAAC,CAAC,CAAC,EACVA,OAAO,CAAC,CAAC,CAAC,EACVA,OAAO,CAAC,CAAC,CAAC,EACVA,OAAO,CAAC,CAAC,CACX,CAAC,CAAA;QACD+C,QAAQ,CAAC3E,MAAM,GAAG2D,YAAY,CAACzD,QAAQ,EAAEmB,EAAE,EAAEC,EAAE,CAAC,CAAA;AAEhDD,QAAAA,EAAE,GAAGO,OAAO,CAAC,CAAC,CAAC,CAAA;AACfN,QAAAA,EAAE,GAAGM,OAAO,CAAC,CAAC,CAAC,CAAA;AACf,QAAA,MAAA;AACF,MAAA,KAAK,GAAG;QACN1B,QAAQ,GAAGsD,iCAAiC,CAC1CnC,EAAE,EACFC,EAAE,EACFM,OAAO,CAAC,CAAC,CAAC,EACVA,OAAO,CAAC,CAAC,CAAC,EACVA,OAAO,CAAC,CAAC,CAAC,EACVA,OAAO,CAAC,CAAC,CACX,CAAC,CAAA;AACD+C,QAAAA,QAAQ,GAAoBE,SAAS,CAAA;QACrCF,QAAQ,CAACzE,QAAQ,GAAGA,QAAQ,CAAA;AAC5ByE,QAAAA,QAAQ,CAACJ,WAAW,GAAGd,2BAA2B,CAChDpC,EAAE,EACFC,EAAE,EACFM,OAAO,CAAC,CAAC,CAAC,EACVA,OAAO,CAAC,CAAC,CAAC,EACVA,OAAO,CAAC,CAAC,CAAC,EACVA,OAAO,CAAC,CAAC,CACX,CAAC,CAAA;QACD+C,QAAQ,CAAC3E,MAAM,GAAG2D,YAAY,CAACzD,QAAQ,EAAEmB,EAAE,EAAEC,EAAE,CAAC,CAAA;AAChDD,QAAAA,EAAE,GAAGO,OAAO,CAAC,CAAC,CAAC,CAAA;AACfN,QAAAA,EAAE,GAAGM,OAAO,CAAC,CAAC,CAAC,CAAA;AACf,QAAA,MAAA;AACF,MAAA,KAAK,GAAG;AACN;AACA+C,QAAAA,QAAQ,GAAiBE,SAAS,CAAA;QAClCF,QAAQ,CAACI,KAAK,GAAG/C,EAAE,CAAA;QACnB2C,QAAQ,CAACK,KAAK,GAAG/C,EAAE,CAAA;AACnB0C,QAAAA,QAAQ,CAAC3E,MAAM,GAAG+B,cAAc,CAACV,EAAE,EAAEC,EAAE,EAAEU,EAAE,EAAEC,EAAE,CAAC,CAAA;AAChDZ,QAAAA,EAAE,GAAGW,EAAE,CAAA;AACPV,QAAAA,EAAE,GAAGW,EAAE,CAAA;AACP,QAAA,MAAA;AACJ,KAAA;IACAyC,WAAW,IAAIC,QAAQ,CAAC3E,MAAM,CAAA;AAC9B4E,IAAAA,IAAI,CAAClF,IAAI,CAACiF,QAAQ,CAAC,CAAA;AACrB,GAAA;EACAC,IAAI,CAAClF,IAAI,CAAC;AAAEM,IAAAA,MAAM,EAAE0E,WAAW;AAAEtE,IAAAA,CAAC,EAAEiB,EAAE;AAAEhB,IAAAA,CAAC,EAAEiB,EAAAA;AAAG,GAAC,CAAC,CAAA;AAChD,EAAA,OAAOsD,IAAI,CAAA;AACb,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACO,MAAMK,cAAc,GAAG,UAC5B7D,IAAqB,EACrB8C,QAAgB,EAEY;AAAA,EAAA,IAD5BgB,KAAyB,GAAAjG,SAAA,CAAAe,MAAA,GAAAf,CAAAA,IAAAA,SAAA,CAAAkG,CAAAA,CAAAA,KAAAA,SAAA,GAAAlG,SAAA,CAAA,CAAA,CAAA,GAAGwF,mBAAmB,CAACrD,IAAI,CAAC,CAAA;EAErD,IAAI5D,CAAC,GAAG,CAAC,CAAA;AACT,EAAA,OAAO0G,QAAQ,GAAGgB,KAAK,CAAC1H,CAAC,CAAC,CAACwC,MAAM,GAAG,CAAC,IAAIxC,CAAC,GAAG0H,KAAK,CAAClF,MAAM,GAAG,CAAC,EAAE;AAC7DkE,IAAAA,QAAQ,IAAIgB,KAAK,CAAC1H,CAAC,CAAC,CAACwC,MAAM,CAAA;AAC3BxC,IAAAA,CAAC,EAAE,CAAA;AACL,GAAA;AACA,EAAA,MAAMyG,OAAO,GAAGiB,KAAK,CAAC1H,CAAC,CAAC;AACtB4H,IAAAA,UAAU,GAAGlB,QAAQ,GAAGD,OAAO,CAACjE,MAAM;AACtCqF,IAAAA,OAAO,GAAGjE,IAAI,CAAC5D,CAAC,CAAC,CAAA;EAEnB,QAAQyG,OAAO,CAACa,OAAO;AACrB,IAAA,KAAK,GAAG;MACN,OAAO;QAAE1E,CAAC,EAAE6D,OAAO,CAAC7D,CAAC;QAAEC,CAAC,EAAE4D,OAAO,CAAC5D,CAAC;AAAEmE,QAAAA,KAAK,EAAE,CAAA;OAAG,CAAA;AACjD,IAAA,KAAK,GAAG;AACN,MAAA,OAAAL,cAAA,CAAAA,cAAA,CAAA,EAAA,EACK,IAAI7D,KAAK,CAAC2D,OAAO,CAAC7D,CAAC,EAAE6D,OAAO,CAAC5D,CAAC,CAAC,CAACiF,IAAI,CACrC,IAAIhF,KAAK,CAAC2D,OAAO,CAACc,KAAK,EAAEd,OAAO,CAACe,KAAK,CAAC,EACvCI,UACF,CAAC,CAAA,EAAA,EAAA,EAAA;AACDZ,QAAAA,KAAK,EAAE1I,IAAI,CAACgC,KAAK,CAACmG,OAAO,CAACe,KAAK,GAAGf,OAAO,CAAC5D,CAAC,EAAE4D,OAAO,CAACc,KAAK,GAAGd,OAAO,CAAC7D,CAAC,CAAA;AAAC,OAAA,CAAA,CAAA;AAE3E,IAAA,KAAK,GAAG;AACN,MAAA,OAAA+D,cAAA,CAAAA,cAAA,CAAA,EAAA,EACK,IAAI7D,KAAK,CAAC2D,OAAO,CAAC7D,CAAC,EAAE6D,OAAO,CAAC5D,CAAC,CAAC,CAACiF,IAAI,CACrC,IAAIhF,KAAK,CAAC+E,OAAO,CAAC,CAAC,CAAC,EAAGA,OAAO,CAAC,CAAC,CAAE,CAAC,EACnCD,UACF,CAAC,CAAA,EAAA,EAAA,EAAA;QACDZ,KAAK,EAAE1I,IAAI,CAACgC,KAAK,CAACuH,OAAO,CAAC,CAAC,CAAC,GAAIpB,OAAO,CAAC5D,CAAC,EAAEgF,OAAO,CAAC,CAAC,CAAC,GAAIpB,OAAO,CAAC7D,CAAC,CAAA;AAAC,OAAA,CAAA,CAAA;AAEvE,IAAA,KAAK,GAAG;AACN,MAAA,OAAO4D,yBAAyB,CAACC,OAAO,EAAEC,QAAQ,CAAC,CAAA;AACrD,IAAA,KAAK,GAAG;AACN,MAAA,OAAOF,yBAAyB,CAACC,OAAO,EAAEC,QAAQ,CAAC,CAAA;AAErD;AACF,GAAA;AACF,EAAC;AAED,MAAMqB,YAAY,GAAG,IAAIC,MAAM,CAACC,aAAa,EAAE,IAAI,CAAC,CAAA;AACpD,MAAMC,SAAS,GAAG,IAAIF,MAAM,CAACC,aAAa,EAAE,GAAG,CAAC,CAAA;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACaE,MAAAA,SAAS,GAAIC,UAAkB,IAAuB;AACjE;AACA;AACAA,EAAAA,UAAU,GAAGC,mBAAmB,CAACD,UAAU,CAAC,CAAA;EAE5C,MAAME,GAAqB,GAAG,EAAE,CAAA;EAChC,KAAK,IAAI,CAACC,QAAQ,CAAC,IAAIH,UAAU,CAACI,QAAQ,CAACT,YAAY,CAAC,EAAE;IACxD,MAAMU,KAAuB,GAAG,EAAE,CAAA;AAClC,IAAA,IAAIC,QAAgC,CAAA;IACpC,GAAG;AACDA,MAAAA,QAAQ,GAAGR,SAAS,CAACS,IAAI,CAACJ,QAAQ,CAAC,CAAA;MACnC,IAAI,CAACG,QAAQ,EAAE;AACb,QAAA,MAAA;AACF,OAAA;AACA;MACA,MAAME,cAAc,GAAGF,QAAQ,CAACG,MAAM,CAAEC,CAAC,IAAKA,CAAC,CAAC,CAAA;AAChD;MACAF,cAAc,CAACG,KAAK,EAAE,CAAA;AACtB;AACA;AACA,MAAA,MAAMzB,OAAO,GAAGsB,cAAc,CAACI,GAAG,CAAEF,CAAC,IAAK;AACxC,QAAA,MAAMG,QAAQ,GAAGC,MAAM,CAACC,UAAU,CAACL,CAAC,CAAC,CAAA;AACrC,QAAA,IAAII,MAAM,CAACE,KAAK,CAACH,QAAQ,CAAC,EAAE;AAC1B,UAAA,OAAOH,CAAC,CAAA;AACV,SAAC,MAAM;AACL,UAAA,OAAOG,QAAQ,CAAA;AACjB,SAAA;AACF,OAAC,CAAC,CAAA;AACFR,MAAAA,KAAK,CAACvG,IAAI,CAACoF,OAAc,CAAC,CAAA;AAC1B;AACA,MAAA,IAAIsB,cAAc,CAACpG,MAAM,IAAI,CAAC,EAAE;AAC9B,QAAA,MAAA;AACF,OAAA;AACA;MACAoG,cAAc,CAACG,KAAK,EAAE,CAAA;AACtB;MACAR,QAAQ,GAAGA,QAAQ,CAACc,OAAO,CACzB,IAAIrB,MAAM,IAAAsB,MAAA,CAAIV,cAAc,CAAClH,IAAI,CAAC,IAAI,CAAC,QAAK,CAAC,EAC7C,EACF,CAAC,CAAA;AACH,KAAC,QAAQgH,QAAQ,EAAA;AACjB;IACAD,KAAK,CAACc,OAAO,EAAE,CAACjF,OAAO,CAAC,CAACrC,CAAC,EAAEuH,GAAG,KAAK;MAClC,MAAMC,WAAW,GAAGpN,gBAAgB,CAAC4F,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC1C,MAAA,IAAIuH,GAAG,GAAG,CAAC,KAAKC,WAAW,IAAI,GAAG,IAAIA,WAAW,IAAI,GAAG,CAAC,EAAE;AACzDxH,QAAAA,CAAC,CAAC,CAAC,CAAC,GAAGwH,WAAW,CAAA;AACpB,OAAA;AACAnB,MAAAA,GAAG,CAACpG,IAAI,CAACD,CAAC,CAAC,CAAA;AACb,KAAC,CAAC,CAAA;AACJ,GAAA;AACA,EAAA,OAAOqG,GAAG,CAAA;AACZ,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;MACaoB,uBAAuB,GAAG,UACrCC,MAAe,EAEK;AAAA,EAAA,IADpBC,UAAU,GAAAnI,SAAA,CAAAe,MAAA,GAAA,CAAA,IAAAf,SAAA,CAAA,CAAA,CAAA,KAAAkG,SAAA,GAAAlG,SAAA,CAAA,CAAA,CAAA,GAAG,CAAC,CAAA;EAEd,IAAIoI,EAAE,GAAG,IAAI/G,KAAK,CAAC6G,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3BG,EAAE,GAAG,IAAIhH,KAAK,CAAC6G,MAAM,CAAC,CAAC,CAAC,CAAC;AACzBI,IAAAA,SAAS,GAAG,CAAC;AACbC,IAAAA,SAAS,GAAG,CAAC,CAAA;EACf,MAAMpG,IAAqB,GAAG,EAAE;IAC9BF,GAAG,GAAGiG,MAAM,CAACnH,MAAM;IACnByH,UAAU,GAAGvG,GAAG,GAAG,CAAC,CAAA;AAEtB,EAAA,IAAIuG,UAAU,EAAE;AACdF,IAAAA,SAAS,GAAGJ,MAAM,CAAC,CAAC,CAAC,CAAC/G,CAAC,GAAGkH,EAAE,CAAClH,CAAC,GAAG,CAAC,CAAC,GAAG+G,MAAM,CAAC,CAAC,CAAC,CAAC/G,CAAC,KAAKkH,EAAE,CAAClH,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAClEoH,IAAAA,SAAS,GAAGL,MAAM,CAAC,CAAC,CAAC,CAAC9G,CAAC,GAAGiH,EAAE,CAACjH,CAAC,GAAG,CAAC,CAAC,GAAG8G,MAAM,CAAC,CAAC,CAAC,CAAC9G,CAAC,KAAKiH,EAAE,CAACjH,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AACpE,GAAA;EACAe,IAAI,CAAC1B,IAAI,CAAC,CACR,GAAG,EACH2H,EAAE,CAACjH,CAAC,GAAGmH,SAAS,GAAGH,UAAU,EAC7BC,EAAE,CAAChH,CAAC,GAAGmH,SAAS,GAAGJ,UAAU,CAC9B,CAAC,CAAA;AACF,EAAA,IAAI5J,CAAC,CAAA;EACL,KAAKA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG0D,GAAG,EAAE1D,CAAC,EAAE,EAAE;AACxB,IAAA,IAAI,CAAC6J,EAAE,CAACK,EAAE,CAACJ,EAAE,CAAC,EAAE;AACd,MAAA,MAAMK,QAAQ,GAAGN,EAAE,CAACO,YAAY,CAACN,EAAE,CAAC,CAAA;AACpC;AACA;AACA;MACAlG,IAAI,CAAC1B,IAAI,CAAC,CAAC,GAAG,EAAE2H,EAAE,CAACjH,CAAC,EAAEiH,EAAE,CAAChH,CAAC,EAAEsH,QAAQ,CAACvH,CAAC,EAAEuH,QAAQ,CAACtH,CAAC,CAAC,CAAC,CAAA;AACtD,KAAA;AACAgH,IAAAA,EAAE,GAAGF,MAAM,CAAC3J,CAAC,CAAC,CAAA;AACd,IAAA,IAAIA,CAAC,GAAG,CAAC,GAAG2J,MAAM,CAACnH,MAAM,EAAE;AACzBsH,MAAAA,EAAE,GAAGH,MAAM,CAAC3J,CAAC,GAAG,CAAC,CAAC,CAAA;AACpB,KAAA;AACF,GAAA;AACA,EAAA,IAAIiK,UAAU,EAAE;AACdF,IAAAA,SAAS,GAAGF,EAAE,CAACjH,CAAC,GAAG+G,MAAM,CAAC3J,CAAC,GAAG,CAAC,CAAC,CAAC4C,CAAC,GAAG,CAAC,GAAGiH,EAAE,CAACjH,CAAC,KAAK+G,MAAM,CAAC3J,CAAC,GAAG,CAAC,CAAC,CAAC4C,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;AAC1EoH,IAAAA,SAAS,GAAGH,EAAE,CAAChH,CAAC,GAAG8G,MAAM,CAAC3J,CAAC,GAAG,CAAC,CAAC,CAAC6C,CAAC,GAAG,CAAC,GAAGgH,EAAE,CAAChH,CAAC,KAAK8G,MAAM,CAAC3J,CAAC,GAAG,CAAC,CAAC,CAAC6C,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;AAC5E,GAAA;EACAe,IAAI,CAAC1B,IAAI,CAAC,CACR,GAAG,EACH2H,EAAE,CAACjH,CAAC,GAAGmH,SAAS,GAAGH,UAAU,EAC7BC,EAAE,CAAChH,CAAC,GAAGmH,SAAS,GAAGJ,UAAU,CAC9B,CAAC,CAAA;AACF,EAAA,OAAOhG,IAAI,CAAA;AACb,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMyG,aAAa,GAAGA,CAC3BzG,IAAqB,EACrB0G,SAAiB,EACjBC,UAAiB,KACG;AACpB,EAAA,IAAIA,UAAU,EAAE;IACdD,SAAS,GAAGE,yBAAyB,CAACF,SAAS,EAAE,CAC/C,CAAC,EACD,CAAC,EACD,CAAC,EACD,CAAC,EACD,CAACC,UAAU,CAAC3H,CAAC,EACb,CAAC2H,UAAU,CAAC1H,CAAC,CACd,CAAC,CAAA;AACJ,GAAA;AACA,EAAA,OAAOe,IAAI,CAACoF,GAAG,CAAEyB,WAAW,IAAK;AAC/B,IAAA,MAAMC,UAAgC,GAAG,CAAC,GAAGD,WAAW,CAAC,CAAA;AACzD,IAAA,KAAK,IAAIzK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyK,WAAW,CAACjI,MAAM,GAAG,CAAC,EAAExC,CAAC,IAAI,CAAC,EAAE;AAClD;MACA,MAAM;QAAE4C,CAAC;AAAEC,QAAAA,CAAAA;OAAG,GAAG8H,cAAc,CAC7B;AACE/H,QAAAA,CAAC,EAAE6H,WAAW,CAACzK,CAAC,CAAW;AAC3B6C,QAAAA,CAAC,EAAE4H,WAAW,CAACzK,CAAC,GAAG,CAAC,CAAA;OACrB,EACDsK,SACF,CAAC,CAAA;AACDI,MAAAA,UAAU,CAAC1K,CAAC,CAAC,GAAG4C,CAAC,CAAA;AACjB8H,MAAAA,UAAU,CAAC1K,CAAC,GAAG,CAAC,CAAC,GAAG6C,CAAC,CAAA;AACvB,KAAA;AACA,IAAA,OAAO6H,UAAU,CAAA;AACnB,GAAC,CAAC,CAAA;AACJ,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;MACaE,qBAAqB,GAAGA,CACnCC,WAAmB,EACnBC,MAAc,KACM;EACpB,MAAMC,aAAa,GAAIzM,IAAI,CAACD,EAAE,GAAG,CAAC,GAAIwM,WAAW,CAAA;AACjD;AACA;EACA,IAAIG,kBAAkB,GAAG,CAACC,MAAM,CAAA;AAChC,EAAA,IAAIJ,WAAW,GAAG,CAAC,KAAK,CAAC,EAAE;IACzBG,kBAAkB,IAAID,aAAa,GAAG,CAAC,CAAA;AACzC,GAAA;EACA,MAAMG,CAAC,GAAG,IAAIC,KAAK,CAACN,WAAW,GAAG,CAAC,CAAC,CAAA;EACpC,KAAK,IAAI7K,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6K,WAAW,EAAE7K,CAAC,EAAE,EAAE;AACpC,IAAA,MAAMoL,GAAG,GAAGpL,CAAC,GAAG+K,aAAa,GAAGC,kBAAkB,CAAA;IAClD,MAAM;MAAEpI,CAAC;AAAEC,MAAAA,CAAAA;AAAE,KAAC,GAAG,IAAIC,KAAK,CAACzF,GAAG,CAAC+N,GAAG,CAAC,EAAE7N,GAAG,CAAC6N,GAAG,CAAC,CAAC,CAACC,cAAc,CAACP,MAAM,CAAC,CAAA;AACrEI,IAAAA,CAAC,CAAClL,CAAC,CAAC,GAAG,CAACA,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE4C,CAAC,EAAEC,CAAC,CAAC,CAAA;AACpC,GAAA;AACAqI,EAAAA,CAAC,CAACL,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AACtB,EAAA,OAAOK,CAAC,CAAA;AACV,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACaI,MAAAA,QAAQ,GAAGA,CAACC,QAAyB,EAAEC,cAAuB,KACzED,QAAQ,CACLvC,GAAG,CAAEnB,OAAO,IAAK;EAChB,OAAOA,OAAO,CACXmB,GAAG,CAAC,CAACyC,GAAG,EAAEzL,CAAC,KAAK;AACf,IAAA,IAAIA,CAAC,KAAK,CAAC,EAAE,OAAOyL,GAAG,CAAA;IACvB,OAAOD,cAAc,KAAK7D,SAAS,GAC/B8D,GAAG,GACHC,OAAO,CAACD,GAAG,EAAED,cAAc,CAAC,CAAA;AAClC,GAAC,CAAC,CACD9J,IAAI,CAAC,GAAG,CAAC,CAAA;AACd,CAAC,CAAC,CACDA,IAAI,CAAC,GAAG;;;;"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../src/util/path/index.ts"],"sourcesContent":["import { cache } from '../../cache';\nimport { config } from '../../config';\nimport { halfPI, PiBy180 } from '../../constants';\nimport type { TMat2D, TRadian, TRectBounds } from '../../typedefs';\nimport { cos } from '../misc/cos';\nimport { multiplyTransformMatrices, transformPoint } from '../misc/matrix';\nimport { sin } from '../misc/sin';\nimport { toFixed } from '../misc/toFixed';\nimport type {\n TCurveInfo,\n TComplexPathData,\n TParsedAbsoluteCubicCurveCommand,\n TPathSegmentInfo,\n TPointAngle,\n TSimpleParsedCommand,\n TSimplePathData,\n TPathSegmentCommandInfo,\n TComplexParsedCommand,\n TPathSegmentInfoCommon,\n TEndPathInfo,\n TParsedArcCommand,\n TComplexParsedCommandType,\n} from './typedefs';\nimport type { XY } from '../../Point';\nimport { Point } from '../../Point';\nimport { reArcCommandPoints, rePathCommand } from './regex';\nimport { reNum } from '../../parser/constants';\n\n/**\n * Commands that may be repeated\n */\nconst repeatedCommands: Record<string, 'l' | 'L'> = {\n m: 'l',\n M: 'L',\n};\n\n/**\n * Convert an arc of a rotated ellipse to a Bezier Curve\n * @param {TRadian} theta1 start of the arc\n * @param {TRadian} theta2 end of the arc\n * @param cosTh cosine of the angle of rotation\n * @param sinTh sine of the angle of rotation\n * @param rx x-axis radius (before rotation)\n * @param ry y-axis radius (before rotation)\n * @param cx1 center x of the ellipse\n * @param cy1 center y of the ellipse\n * @param mT\n * @param fromX starting point of arc x\n * @param fromY starting point of arc y\n */\nconst segmentToBezier = (\n theta1: TRadian,\n theta2: TRadian,\n cosTh: number,\n sinTh: number,\n rx: number,\n ry: number,\n cx1: number,\n cy1: number,\n mT: number,\n fromX: number,\n fromY: number,\n): TParsedAbsoluteCubicCurveCommand => {\n const costh1 = cos(theta1),\n sinth1 = sin(theta1),\n costh2 = cos(theta2),\n sinth2 = sin(theta2),\n toX = cosTh * rx * costh2 - sinTh * ry * sinth2 + cx1,\n toY = sinTh * rx * costh2 + cosTh * ry * sinth2 + cy1,\n cp1X = fromX + mT * (-cosTh * rx * sinth1 - sinTh * ry * costh1),\n cp1Y = fromY + mT * (-sinTh * rx * sinth1 + cosTh * ry * costh1),\n cp2X = toX + mT * (cosTh * rx * sinth2 + sinTh * ry * costh2),\n cp2Y = toY + mT * (sinTh * rx * sinth2 - cosTh * ry * costh2);\n\n return ['C', cp1X, cp1Y, cp2X, cp2Y, toX, toY];\n};\n\n/**\n * Adapted from {@link http://dxr.mozilla.org/mozilla-central/source/dom/svg/SVGPathDataParser.cpp}\n * by Andrea Bogazzi code is under MPL. if you don't have a copy of the license you can take it here\n * http://mozilla.org/MPL/2.0/\n * @param toX\n * @param toY\n * @param rx\n * @param ry\n * @param {number} large 0 or 1 flag\n * @param {number} sweep 0 or 1 flag\n * @param rotateX\n */\nconst arcToSegments = (\n toX: number,\n toY: number,\n rx: number,\n ry: number,\n large: number,\n sweep: number,\n rotateX: TRadian,\n): TParsedAbsoluteCubicCurveCommand[] => {\n if (rx === 0 || ry === 0) {\n return [];\n }\n let fromX = 0,\n fromY = 0,\n root = 0;\n const PI = Math.PI,\n theta = rotateX * PiBy180,\n sinTheta = sin(theta),\n cosTh = cos(theta),\n px = 0.5 * (-cosTh * toX - sinTheta * toY),\n py = 0.5 * (-cosTh * toY + sinTheta * toX),\n rx2 = rx ** 2,\n ry2 = ry ** 2,\n py2 = py ** 2,\n px2 = px ** 2,\n pl = rx2 * ry2 - rx2 * py2 - ry2 * px2;\n let _rx = Math.abs(rx);\n let _ry = Math.abs(ry);\n\n if (pl < 0) {\n const s = Math.sqrt(1 - pl / (rx2 * ry2));\n _rx *= s;\n _ry *= s;\n } else {\n root =\n (large === sweep ? -1.0 : 1.0) * Math.sqrt(pl / (rx2 * py2 + ry2 * px2));\n }\n\n const cx = (root * _rx * py) / _ry,\n cy = (-root * _ry * px) / _rx,\n cx1 = cosTh * cx - sinTheta * cy + toX * 0.5,\n cy1 = sinTheta * cx + cosTh * cy + toY * 0.5;\n let mTheta = calcVectorAngle(1, 0, (px - cx) / _rx, (py - cy) / _ry);\n let dtheta = calcVectorAngle(\n (px - cx) / _rx,\n (py - cy) / _ry,\n (-px - cx) / _rx,\n (-py - cy) / _ry,\n );\n\n if (sweep === 0 && dtheta > 0) {\n dtheta -= 2 * PI;\n } else if (sweep === 1 && dtheta < 0) {\n dtheta += 2 * PI;\n }\n\n // Convert into cubic bezier segments <= 90deg\n const segments = Math.ceil(Math.abs((dtheta / PI) * 2)),\n result = [],\n mDelta = dtheta / segments,\n mT =\n ((8 / 3) * Math.sin(mDelta / 4) * Math.sin(mDelta / 4)) /\n Math.sin(mDelta / 2);\n let th3 = mTheta + mDelta;\n\n for (let i = 0; i < segments; i++) {\n result[i] = segmentToBezier(\n mTheta,\n th3,\n cosTh,\n sinTheta,\n _rx,\n _ry,\n cx1,\n cy1,\n mT,\n fromX,\n fromY,\n );\n fromX = result[i][5];\n fromY = result[i][6];\n mTheta = th3;\n th3 += mDelta;\n }\n return result;\n};\n\n/**\n * @private\n * Calculate the angle between two vectors\n * @param ux u endpoint x\n * @param uy u endpoint y\n * @param vx v endpoint x\n * @param vy v endpoint y\n */\nconst calcVectorAngle = (\n ux: number,\n uy: number,\n vx: number,\n vy: number,\n): TRadian => {\n const ta = Math.atan2(uy, ux),\n tb = Math.atan2(vy, vx);\n if (tb >= ta) {\n return tb - ta;\n } else {\n return 2 * Math.PI - (ta - tb);\n }\n};\n\n// functions for the Cubic beizer\n// taken from: https://github.com/konvajs/konva/blob/7.0.5/src/shapes/Path.ts#L350\nconst CB1 = (t: number) => t ** 3;\nconst CB2 = (t: number) => 3 * t ** 2 * (1 - t);\nconst CB3 = (t: number) => 3 * t * (1 - t) ** 2;\nconst CB4 = (t: number) => (1 - t) ** 3;\n\n/**\n * Calculate bounding box of a cubic Bezier curve\n * Taken from http://jsbin.com/ivomiq/56/edit (no credits available)\n * TODO: can we normalize this with the starting points set at 0 and then translated the bbox?\n * @param {number} begx starting point\n * @param {number} begy\n * @param {number} cp1x first control point\n * @param {number} cp1y\n * @param {number} cp2x second control point\n * @param {number} cp2y\n * @param {number} endx end of bezier\n * @param {number} endy\n * @return {TRectBounds} the rectangular bounds\n */\nexport function getBoundsOfCurve(\n begx: number,\n begy: number,\n cp1x: number,\n cp1y: number,\n cp2x: number,\n cp2y: number,\n endx: number,\n endy: number,\n): TRectBounds {\n let argsString: string;\n if (config.cachesBoundsOfCurve) {\n // eslint-disable-next-line\n argsString = [...arguments].join();\n if (cache.boundsOfCurveCache[argsString]) {\n return cache.boundsOfCurveCache[argsString];\n }\n }\n\n const sqrt = Math.sqrt,\n abs = Math.abs,\n tvalues = [],\n bounds: [[x: number, y: number], [x: number, y: number]] = [\n [0, 0],\n [0, 0],\n ];\n\n let b = 6 * begx - 12 * cp1x + 6 * cp2x;\n let a = -3 * begx + 9 * cp1x - 9 * cp2x + 3 * endx;\n let c = 3 * cp1x - 3 * begx;\n\n for (let i = 0; i < 2; ++i) {\n if (i > 0) {\n b = 6 * begy - 12 * cp1y + 6 * cp2y;\n a = -3 * begy + 9 * cp1y - 9 * cp2y + 3 * endy;\n c = 3 * cp1y - 3 * begy;\n }\n\n if (abs(a) < 1e-12) {\n if (abs(b) < 1e-12) {\n continue;\n }\n const t = -c / b;\n if (0 < t && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n const b2ac = b * b - 4 * c * a;\n if (b2ac < 0) {\n continue;\n }\n const sqrtb2ac = sqrt(b2ac);\n const t1 = (-b + sqrtb2ac) / (2 * a);\n if (0 < t1 && t1 < 1) {\n tvalues.push(t1);\n }\n const t2 = (-b - sqrtb2ac) / (2 * a);\n if (0 < t2 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n let j = tvalues.length;\n const jlen = j;\n const iterator = getPointOnCubicBezierIterator(\n begx,\n begy,\n cp1x,\n cp1y,\n cp2x,\n cp2y,\n endx,\n endy,\n );\n while (j--) {\n const { x, y } = iterator(tvalues[j]);\n bounds[0][j] = x;\n bounds[1][j] = y;\n }\n\n bounds[0][jlen] = begx;\n bounds[1][jlen] = begy;\n bounds[0][jlen + 1] = endx;\n bounds[1][jlen + 1] = endy;\n const result: TRectBounds = [\n new Point(Math.min(...bounds[0]), Math.min(...bounds[1])),\n new Point(Math.max(...bounds[0]), Math.max(...bounds[1])),\n ];\n if (config.cachesBoundsOfCurve) {\n cache.boundsOfCurveCache[argsString!] = result;\n }\n return result;\n}\n\n/**\n * Converts arc to a bunch of cubic Bezier curves\n * @param {number} fx starting point x\n * @param {number} fy starting point y\n * @param {TParsedArcCommand} coords Arc command\n */\nexport const fromArcToBeziers = (\n fx: number,\n fy: number,\n [_, rx, ry, rot, large, sweep, tx, ty]: TParsedArcCommand,\n): TParsedAbsoluteCubicCurveCommand[] => {\n const segsNorm = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot);\n\n for (let i = 0, len = segsNorm.length; i < len; i++) {\n segsNorm[i][1] += fx;\n segsNorm[i][2] += fy;\n segsNorm[i][3] += fx;\n segsNorm[i][4] += fy;\n segsNorm[i][5] += fx;\n segsNorm[i][6] += fy;\n }\n return segsNorm;\n};\n\n/**\n * This function takes a parsed SVG path and makes it simpler for fabricJS logic.\n * Simplification consist of:\n * - All commands converted to absolute (lowercase to uppercase)\n * - S converted to C\n * - T converted to Q\n * - A converted to C\n * @param {TComplexPathData} path the array of commands of a parsed SVG path for `Path`\n * @return {TSimplePathData} the simplified array of commands of a parsed SVG path for `Path`\n * TODO: figure out how to remove the type assertions in a nice way\n */\nexport const makePathSimpler = (path: TComplexPathData): TSimplePathData => {\n // x and y represent the last point of the path, AKA the previous command point.\n // we add them to each relative command to make it an absolute comment.\n // we also swap the v V h H with L, because are easier to transform.\n let x = 0,\n y = 0;\n // x1 and y1 represent the last point of the subpath. the subpath is started with\n // m or M command. When a z or Z command is drawn, x and y need to be resetted to\n // the last x1 and y1.\n let x1 = 0,\n y1 = 0;\n // previous will host the letter of the previous command, to handle S and T.\n // controlX and controlY will host the previous reflected control point\n const destinationPath: TSimplePathData = [];\n let previous,\n // placeholders\n controlX = 0,\n controlY = 0;\n for (const parsedCommand of path) {\n const current: TComplexParsedCommand = [...parsedCommand];\n let converted: TSimpleParsedCommand | undefined;\n switch (\n current[0] // first letter\n ) {\n case 'l': // lineto, relative\n current[1] += x;\n current[2] += y;\n // falls through\n case 'L':\n x = current[1];\n y = current[2];\n converted = ['L', x, y];\n break;\n case 'h': // horizontal lineto, relative\n current[1] += x;\n // falls through\n case 'H':\n x = current[1];\n converted = ['L', x, y];\n break;\n case 'v': // vertical lineto, relative\n current[1] += y;\n // falls through\n case 'V':\n y = current[1];\n converted = ['L', x, y];\n break;\n case 'm': // moveTo, relative\n current[1] += x;\n current[2] += y;\n // falls through\n case 'M':\n x = current[1];\n y = current[2];\n x1 = current[1];\n y1 = current[2];\n converted = ['M', x, y];\n break;\n case 'c': // bezierCurveTo, relative\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n current[5] += x;\n current[6] += y;\n // falls through\n case 'C':\n controlX = current[3];\n controlY = current[4];\n x = current[5];\n y = current[6];\n converted = ['C', current[1], current[2], controlX, controlY, x, y];\n break;\n case 's': // shorthand cubic bezierCurveTo, relative\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n // falls through\n case 'S':\n // would be sScC but since we are swapping sSc for C, we check just that.\n if (previous === 'C') {\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n } else {\n // If there is no previous command or if the previous command was not a C, c, S, or s,\n // the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n x = current[3];\n y = current[4];\n converted = ['C', controlX, controlY, current[1], current[2], x, y];\n // converted[3] and converted[4] are NOW the second control point.\n // we keep it for the next reflection.\n controlX = converted[3];\n controlY = converted[4];\n break;\n case 'q': // quadraticCurveTo, relative\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n // falls through\n case 'Q':\n controlX = current[1];\n controlY = current[2];\n x = current[3];\n y = current[4];\n converted = ['Q', controlX, controlY, x, y];\n break;\n case 't': // shorthand quadraticCurveTo, relative\n current[1] += x;\n current[2] += y;\n // falls through\n case 'T':\n if (previous === 'Q') {\n // calculate reflection of previous control point\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n } else {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n x = current[1];\n y = current[2];\n converted = ['Q', controlX, controlY, x, y];\n break;\n case 'a':\n current[6] += x;\n current[7] += y;\n // falls through\n case 'A':\n fromArcToBeziers(x, y, current).forEach((b) => destinationPath.push(b));\n x = current[6];\n y = current[7];\n break;\n case 'z':\n case 'Z':\n x = x1;\n y = y1;\n converted = ['Z'];\n break;\n default:\n }\n if (converted) {\n destinationPath.push(converted);\n previous = converted[0];\n } else {\n previous = '';\n }\n }\n return destinationPath;\n};\n\n// todo verify if we can just use the point class here\n/**\n * Calc length from point x1,y1 to x2,y2\n * @param {number} x1 starting point x\n * @param {number} y1 starting point y\n * @param {number} x2 starting point x\n * @param {number} y2 starting point y\n * @return {number} length of segment\n */\nconst calcLineLength = (\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n): number => Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n\n/**\n * Get an iterator that takes a percentage and returns a point\n * @param {number} begx\n * @param {number} begy\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} endx\n * @param {number} endy\n */\nconst getPointOnCubicBezierIterator =\n (\n begx: number,\n begy: number,\n cp1x: number,\n cp1y: number,\n cp2x: number,\n cp2y: number,\n endx: number,\n endy: number,\n ) =>\n (pct: number) => {\n const c1 = CB1(pct),\n c2 = CB2(pct),\n c3 = CB3(pct),\n c4 = CB4(pct);\n return new Point(\n endx * c1 + cp2x * c2 + cp1x * c3 + begx * c4,\n endy * c1 + cp2y * c2 + cp1y * c3 + begy * c4,\n );\n };\n\nconst QB1 = (t: number) => t ** 2;\nconst QB2 = (t: number) => 2 * t * (1 - t);\nconst QB3 = (t: number) => (1 - t) ** 2;\n\nconst getTangentCubicIterator =\n (\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n p4x: number,\n p4y: number,\n ) =>\n (pct: number) => {\n const qb1 = QB1(pct),\n qb2 = QB2(pct),\n qb3 = QB3(pct),\n tangentX =\n 3 * (qb3 * (p2x - p1x) + qb2 * (p3x - p2x) + qb1 * (p4x - p3x)),\n tangentY =\n 3 * (qb3 * (p2y - p1y) + qb2 * (p3y - p2y) + qb1 * (p4y - p3y));\n return Math.atan2(tangentY, tangentX);\n };\n\nconst getPointOnQuadraticBezierIterator =\n (\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n ) =>\n (pct: number) => {\n const c1 = QB1(pct),\n c2 = QB2(pct),\n c3 = QB3(pct);\n return new Point(\n p3x * c1 + p2x * c2 + p1x * c3,\n p3y * c1 + p2y * c2 + p1y * c3,\n );\n };\n\nconst getTangentQuadraticIterator =\n (\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n ) =>\n (pct: number) => {\n const invT = 1 - pct,\n tangentX = 2 * (invT * (p2x - p1x) + pct * (p3x - p2x)),\n tangentY = 2 * (invT * (p2y - p1y) + pct * (p3y - p2y));\n return Math.atan2(tangentY, tangentX);\n };\n\n// this will run over a path segment (a cubic or quadratic segment) and approximate it\n// with 100 segments. This will good enough to calculate the length of the curve\nconst pathIterator = (\n iterator: (pct: number) => Point,\n x1: number,\n y1: number,\n) => {\n let tempP = new Point(x1, y1),\n tmpLen = 0;\n for (let perc = 1; perc <= 100; perc += 1) {\n const p = iterator(perc / 100);\n tmpLen += calcLineLength(tempP.x, tempP.y, p.x, p.y);\n tempP = p;\n }\n return tmpLen;\n};\n\n/**\n * Given a pathInfo, and a distance in pixels, find the percentage from 0 to 1\n * that correspond to that pixels run over the path.\n * The percentage will be then used to find the correct point on the canvas for the path.\n * @param {Array} segInfo fabricJS collection of information on a parsed path\n * @param {number} distance from starting point, in pixels.\n * @return {TPointAngle} info object with x and y ( the point on canvas ) and angle, the tangent on that point;\n */\nconst findPercentageForDistance = (\n segInfo: TCurveInfo<'Q' | 'C'>,\n distance: number,\n): TPointAngle => {\n let perc = 0,\n tmpLen = 0,\n tempP: XY = { x: segInfo.x, y: segInfo.y },\n p: XY = { ...tempP },\n nextLen: number,\n nextStep = 0.01,\n lastPerc = 0;\n // nextStep > 0.0001 covers 0.00015625 that 1/64th of 1/100\n // the path\n const iterator = segInfo.iterator,\n angleFinder = segInfo.angleFinder;\n while (tmpLen < distance && nextStep > 0.0001) {\n p = iterator(perc);\n lastPerc = perc;\n nextLen = calcLineLength(tempP.x, tempP.y, p.x, p.y);\n // compare tmpLen each cycle with distance, decide next perc to test.\n if (nextLen + tmpLen > distance) {\n // we discard this step and we make smaller steps.\n perc -= nextStep;\n nextStep /= 2;\n } else {\n tempP = p;\n perc += nextStep;\n tmpLen += nextLen;\n }\n }\n return { ...p, angle: angleFinder(lastPerc) };\n};\n\n/**\n * Run over a parsed and simplified path and extract some information (length of each command and starting point)\n * @param {TSimplePathData} path parsed path commands\n * @return {TPathSegmentInfo[]} path commands information\n */\nexport const getPathSegmentsInfo = (\n path: TSimplePathData,\n): TPathSegmentInfo[] => {\n let totalLength = 0,\n //x2 and y2 are the coords of segment start\n //x1 and y1 are the coords of the current point\n x1 = 0,\n y1 = 0,\n x2 = 0,\n y2 = 0,\n iterator,\n tempInfo: TPathSegmentInfo;\n const info: TPathSegmentInfo[] = [];\n for (const current of path) {\n const basicInfo: TPathSegmentInfoCommon<keyof TPathSegmentCommandInfo> = {\n x: x1,\n y: y1,\n command: current[0],\n length: 0,\n };\n switch (\n current[0] //first letter\n ) {\n case 'M':\n tempInfo = <TPathSegmentInfoCommon<'M'>>basicInfo;\n tempInfo.x = x2 = x1 = current[1];\n tempInfo.y = y2 = y1 = current[2];\n break;\n case 'L':\n tempInfo = <TPathSegmentInfoCommon<'L'>>basicInfo;\n tempInfo.length = calcLineLength(x1, y1, current[1], current[2]);\n x1 = current[1];\n y1 = current[2];\n break;\n case 'C':\n iterator = getPointOnCubicBezierIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6],\n );\n tempInfo = <TCurveInfo<'C'>>basicInfo;\n tempInfo.iterator = iterator;\n tempInfo.angleFinder = getTangentCubicIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6],\n );\n tempInfo.length = pathIterator(iterator, x1, y1);\n\n x1 = current[5];\n y1 = current[6];\n break;\n case 'Q':\n iterator = getPointOnQuadraticBezierIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n );\n tempInfo = <TCurveInfo<'Q'>>basicInfo;\n tempInfo.iterator = iterator;\n tempInfo.angleFinder = getTangentQuadraticIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n );\n tempInfo.length = pathIterator(iterator, x1, y1);\n x1 = current[3];\n y1 = current[4];\n break;\n case 'Z':\n // we add those in order to ease calculations later\n tempInfo = <TEndPathInfo>basicInfo;\n tempInfo.destX = x2;\n tempInfo.destY = y2;\n tempInfo.length = calcLineLength(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n break;\n }\n totalLength += tempInfo.length;\n info.push(tempInfo);\n }\n info.push({ length: totalLength, x: x1, y: y1 });\n return info;\n};\n\n/**\n * Get the point on the path that is distance along the path\n * @param path\n * @param distance\n * @param infos\n */\nexport const getPointOnPath = (\n path: TSimplePathData,\n distance: number,\n infos: TPathSegmentInfo[] = getPathSegmentsInfo(path),\n): TPointAngle | undefined => {\n let i = 0;\n while (distance - infos[i].length > 0 && i < infos.length - 2) {\n distance -= infos[i].length;\n i++;\n }\n const segInfo = infos[i],\n segPercent = distance / segInfo.length,\n segment = path[i];\n\n switch (segInfo.command) {\n case 'M':\n return { x: segInfo.x, y: segInfo.y, angle: 0 };\n case 'Z':\n return {\n ...new Point(segInfo.x, segInfo.y).lerp(\n new Point(segInfo.destX, segInfo.destY),\n segPercent,\n ),\n angle: Math.atan2(segInfo.destY - segInfo.y, segInfo.destX - segInfo.x),\n };\n case 'L':\n return {\n ...new Point(segInfo.x, segInfo.y).lerp(\n new Point(segment[1]!, segment[2]!),\n segPercent,\n ),\n angle: Math.atan2(segment[2]! - segInfo.y, segment[1]! - segInfo.x),\n };\n case 'C':\n return findPercentageForDistance(segInfo, distance);\n case 'Q':\n return findPercentageForDistance(segInfo, distance);\n default:\n // throw Error('Invalid command');\n }\n};\n\nconst rePathCmdAll = new RegExp(rePathCommand, 'gi');\nconst regExpArcCommandPoints = new RegExp(reArcCommandPoints, 'g');\nconst reMyNum = new RegExp(reNum, 'gi');\nconst commandLengths = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7,\n} as const;\n/**\n *\n * @param {string} pathString\n * @return {TComplexPathData} An array of SVG path commands\n * @example <caption>Usage</caption>\n * parsePath('M 3 4 Q 3 5 2 1 4 0 Q 9 12 2 1 4 0') === [\n * ['M', 3, 4],\n * ['Q', 3, 5, 2, 1, 4, 0],\n * ['Q', 9, 12, 2, 1, 4, 0],\n * ];\n */\nexport const parsePath = (pathString: string): TComplexPathData => {\n const chain: TComplexPathData = [];\n const all = pathString.match(rePathCmdAll) ?? [];\n for (const matchStr of all) {\n // take match string and save the first letter as the command\n const commandLetter = matchStr[0] as TComplexParsedCommandType;\n // in case of Z we have very little to do\n if (commandLetter === 'z' || commandLetter === 'Z') {\n chain.push([commandLetter]);\n continue;\n }\n const commandLength =\n commandLengths[\n commandLetter.toLowerCase() as keyof typeof commandLengths\n ];\n\n let paramArr = [];\n if (commandLetter === 'a' || commandLetter === 'A') {\n // the arc command ha some peculariaties that requires a special regex other than numbers\n // it is possible to avoid using a space between the sweep and large arc flags, making them either\n // 00, 01, 10 or 11, making them identical to a plain number for the regex reMyNum\n // reset the regexp\n regExpArcCommandPoints.lastIndex = 0;\n for (let out = null; (out = regExpArcCommandPoints.exec(matchStr)); ) {\n paramArr.push(...out.slice(1));\n }\n } else {\n paramArr = matchStr.match(reMyNum) || [];\n }\n\n // inspect the length of paramArr, if is longer than commandLength\n // we are dealing with repeated commands\n for (let i = 0; i < paramArr.length; i += commandLength) {\n const newCommand = new Array(commandLength) as TComplexParsedCommand;\n const transformedCommand = repeatedCommands[commandLetter];\n newCommand[0] =\n i > 0 && transformedCommand ? transformedCommand : commandLetter;\n for (let j = 0; j < commandLength; j++) {\n newCommand[j + 1] = parseFloat(paramArr[i + j]);\n }\n chain.push(newCommand);\n }\n }\n return chain;\n};\n\n/**\n *\n * Converts points to a smooth SVG path\n * @param {XY[]} points Array of points\n * @param {number} [correction] Apply a correction to the path (usually we use `width / 1000`). If value is undefined 0 is used as the correction value.\n * @return {(string|number)[][]} An array of SVG path commands\n */\nexport const getSmoothPathFromPoints = (\n points: Point[],\n correction = 0,\n): TSimplePathData => {\n let p1 = new Point(points[0]),\n p2 = new Point(points[1]),\n multSignX = 1,\n multSignY = 0;\n const path: TSimplePathData = [],\n len = points.length,\n manyPoints = len > 2;\n\n if (manyPoints) {\n multSignX = points[2].x < p2.x ? -1 : points[2].x === p2.x ? 0 : 1;\n multSignY = points[2].y < p2.y ? -1 : points[2].y === p2.y ? 0 : 1;\n }\n path.push([\n 'M',\n p1.x - multSignX * correction,\n p1.y - multSignY * correction,\n ]);\n let i;\n for (i = 1; i < len; i++) {\n if (!p1.eq(p2)) {\n const midPoint = p1.midPointFrom(p2);\n // p1 is our bezier control point\n // midpoint is our endpoint\n // start point is p(i-1) value.\n path.push(['Q', p1.x, p1.y, midPoint.x, midPoint.y]);\n }\n p1 = points[i];\n if (i + 1 < points.length) {\n p2 = points[i + 1];\n }\n }\n if (manyPoints) {\n multSignX = p1.x > points[i - 2].x ? 1 : p1.x === points[i - 2].x ? 0 : -1;\n multSignY = p1.y > points[i - 2].y ? 1 : p1.y === points[i - 2].y ? 0 : -1;\n }\n path.push([\n 'L',\n p1.x + multSignX * correction,\n p1.y + multSignY * correction,\n ]);\n return path;\n};\n\n/**\n * Transform a path by transforming each segment.\n * it has to be a simplified path or it won't work.\n * WARNING: this depends from pathOffset for correct operation\n * @param {TSimplePathData} path fabricJS parsed and simplified path commands\n * @param {TMat2D} transform matrix that represent the transformation\n * @param {Point} [pathOffset] `Path.pathOffset`\n * @returns {TSimplePathData} the transformed path\n */\nexport const transformPath = (\n path: TSimplePathData,\n transform: TMat2D,\n pathOffset: Point,\n): TSimplePathData => {\n if (pathOffset) {\n transform = multiplyTransformMatrices(transform, [\n 1,\n 0,\n 0,\n 1,\n -pathOffset.x,\n -pathOffset.y,\n ]);\n }\n return path.map((pathSegment) => {\n const newSegment: TSimpleParsedCommand = [...pathSegment];\n for (let i = 1; i < pathSegment.length - 1; i += 2) {\n // TODO: is there a way to get around casting to any?\n const { x, y } = transformPoint(\n {\n x: pathSegment[i] as number,\n y: pathSegment[i + 1] as number,\n },\n transform,\n );\n newSegment[i] = x;\n newSegment[i + 1] = y;\n }\n return newSegment;\n });\n};\n\n/**\n * Returns an array of path commands to create a regular polygon\n * @param {number} numVertexes\n * @param {number} radius\n * @returns {TSimplePathData} An array of SVG path commands\n */\nexport const getRegularPolygonPath = (\n numVertexes: number,\n radius: number,\n): TSimplePathData => {\n const interiorAngle = (Math.PI * 2) / numVertexes;\n // rotationAdjustment rotates the path by 1/2 the interior angle so that the polygon always has a flat side on the bottom\n // This isn't strictly necessary, but it's how we tend to think of and expect polygons to be drawn\n let rotationAdjustment = -halfPI;\n if (numVertexes % 2 === 0) {\n rotationAdjustment += interiorAngle / 2;\n }\n const d = new Array(numVertexes + 1);\n for (let i = 0; i < numVertexes; i++) {\n const rad = i * interiorAngle + rotationAdjustment;\n const { x, y } = new Point(cos(rad), sin(rad)).scalarMultiply(radius);\n d[i] = [i === 0 ? 'M' : 'L', x, y];\n }\n d[numVertexes] = ['Z'];\n return d;\n};\n\n/**\n * Join path commands to go back to svg format\n * @param {TSimplePathData} pathData fabricJS parsed path commands\n * @param {number} fractionDigits number of fraction digits to \"leave\"\n * @return {String} joined path 'M 0 0 L 20 30'\n */\nexport const joinPath = (pathData: TSimplePathData, fractionDigits?: number) =>\n pathData\n .map((segment) => {\n return segment\n .map((arg, i) => {\n if (i === 0) return arg;\n return fractionDigits === undefined\n ? arg\n : toFixed(arg, fractionDigits);\n })\n .join(' ');\n })\n .join(' ');\n"],"names":["repeatedCommands","m","M","segmentToBezier","theta1","theta2","cosTh","sinTh","rx","ry","cx1","cy1","mT","fromX","fromY","costh1","cos","sinth1","sin","costh2","sinth2","toX","toY","cp1X","cp1Y","cp2X","cp2Y","arcToSegments","large","sweep","rotateX","root","PI","Math","theta","PiBy180","sinTheta","px","py","rx2","ry2","py2","px2","pl","_rx","abs","_ry","s","sqrt","cx","cy","mTheta","calcVectorAngle","dtheta","segments","ceil","result","mDelta","th3","i","ux","uy","vx","vy","ta","atan2","tb","CB1","t","CB2","CB3","CB4","getBoundsOfCurve","begx","begy","cp1x","cp1y","cp2x","cp2y","endx","endy","argsString","config","cachesBoundsOfCurve","arguments","join","cache","boundsOfCurveCache","tvalues","bounds","b","a","c","push","b2ac","sqrtb2ac","t1","t2","j","length","jlen","iterator","getPointOnCubicBezierIterator","x","y","Point","min","max","fromArcToBeziers","fx","fy","_ref","_","rot","tx","ty","segsNorm","len","makePathSimpler","path","x1","y1","destinationPath","previous","controlX","controlY","parsedCommand","current","converted","forEach","calcLineLength","x2","y2","pct","c1","c2","c3","c4","QB1","QB2","QB3","getTangentCubicIterator","p1x","p1y","p2x","p2y","p3x","p3y","p4x","p4y","qb1","qb2","qb3","tangentX","tangentY","getPointOnQuadraticBezierIterator","getTangentQuadraticIterator","invT","pathIterator","tempP","tmpLen","perc","p","findPercentageForDistance","segInfo","distance","_objectSpread","nextLen","nextStep","lastPerc","angleFinder","angle","getPathSegmentsInfo","totalLength","tempInfo","info","basicInfo","command","destX","destY","getPointOnPath","infos","undefined","segPercent","segment","lerp","rePathCmdAll","RegExp","rePathCommand","regExpArcCommandPoints","reArcCommandPoints","reMyNum","reNum","commandLengths","l","h","v","q","parsePath","pathString","_pathString$match","chain","all","match","matchStr","commandLetter","commandLength","toLowerCase","paramArr","lastIndex","out","exec","slice","newCommand","Array","transformedCommand","parseFloat","getSmoothPathFromPoints","points","correction","p1","p2","multSignX","multSignY","manyPoints","eq","midPoint","midPointFrom","transformPath","transform","pathOffset","multiplyTransformMatrices","map","pathSegment","newSegment","transformPoint","getRegularPolygonPath","numVertexes","radius","interiorAngle","rotationAdjustment","halfPI","d","rad","scalarMultiply","joinPath","pathData","fractionDigits","arg","toFixed"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regex.d.ts","sourceRoot":"","sources":["../../../../src/util/path/regex.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"regex.d.ts","sourceRoot":"","sources":["../../../../src/util/path/regex.ts"],"names":[],"mappings":"AA8BA,eAAO,MAAM,kBAAkB,QAA2D,CAAC;AAe3F,eAAO,MAAM,aAAa,+BAA+B,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{reNum as c}from"../../parser/constants.min.mjs";const t="\\s*,?\\s*",o="".concat(t,"(").concat(c,")"),a="".concat(o).concat(o).concat(o).concat(t,"([01])").concat(t,"([01])").concat(o).concat(o),n="[mzlhvcsqta][^mzlhvcsqta]*";export{a as reArcCommandPoints,n as rePathCommand};
|
|
2
2
|
//# sourceMappingURL=regex.min.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regex.min.mjs","sources":["../../../../src/util/path/regex.ts"],"sourcesContent":["import { reNum } from '../../parser/constants';\n\n/**\n * p for param\n * using \"bad naming\" here because it makes the regex much easier to read\n */\nconst p =
|
|
1
|
+
{"version":3,"file":"regex.min.mjs","sources":["../../../../src/util/path/regex.ts"],"sourcesContent":["import { reNum } from '../../parser/constants';\n\nconst commaWsp = `\\\\s*,?\\\\s*`;\n\n/**\n * p for param\n * using \"bad naming\" here because it makes the regex much easier to read\n * p is a number that is preceded by an arbitary number of spaces, maybe 0,\n * a comma or not, and then possibly more spaces or not.\n */\nconst p = `${commaWsp}(${reNum})`;\n\n// const reMoveToCommand = `(M) ?(?:${p}${p} ?)+`;\n\n// const reLineCommand = `(L) ?(?:${p}${p} ?)+`;\n\n// const reHorizontalLineCommand = `(H) ?(?:${p} ?)+`;\n\n// const reVerticalLineCommand = `(V) ?(?:${p} ?)+`;\n\n// const reClosePathCommand = String.raw`(Z)\\s*`;\n\n// const reCubicCurveCommand = `(C) ?(?:${p}${p}${p}${p}${p}${p} ?)+`;\n\n// const reCubicCurveShortcutCommand = `(S) ?(?:${p}${p}${p}${p} ?)+`;\n\n// const reQuadraticCurveCommand = `(Q) ?(?:${p}${p}${p}${p} ?)+`;\n\n// const reQuadraticCurveShortcutCommand = `(T) ?(?:${p}${p} ?)+`;\n\nexport const reArcCommandPoints = `${p}${p}${p}${commaWsp}([01])${commaWsp}([01])${p}${p}`;\n// const reArcCommand = `(A) ?(?:${reArcCommandPoints} ?)+`;\n\n// export const rePathCommandGroups =\n// `(?:(?:${reMoveToCommand})` +\n// `|(?:${reLineCommand})` +\n// `|(?:${reHorizontalLineCommand})` +\n// `|(?:${reVerticalLineCommand})` +\n// `|(?:${reClosePathCommand})` +\n// `|(?:${reCubicCurveCommand})` +\n// `|(?:${reCubicCurveShortcutCommand})` +\n// `|(?:${reQuadraticCurveCommand})` +\n// `|(?:${reQuadraticCurveShortcutCommand})` +\n// `|(?:${reArcCommand}))`;\n\nexport const rePathCommand = '[mzlhvcsqta][^mzlhvcsqta]*';\n"],"names":["commaWsp","p","concat","reNum","reArcCommandPoints","rePathCommand"],"mappings":"uDAEA,MAAMA,EAAuB,aAQvBC,KAACC,OAAMF,EAAQE,KAAAA,OAAIC,EAAQ,KAoBpBC,EAAkBF,GAAAA,OAAMD,GAACC,OAAGD,GAACC,OAAGD,GAACC,OAAGF,EAAQ,UAAAE,OAASF,EAAQ,UAAAE,OAASD,GAACC,OAAGD,GAe1EI,EAAgB"}
|
|
@@ -1,24 +1,49 @@
|
|
|
1
|
-
import { taggedTemplateLiteral as _taggedTemplateLiteral } from '../../../_virtual/_rollupPluginBabelHelpers.mjs';
|
|
2
1
|
import { reNum } from '../../parser/constants.mjs';
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
const commaWsp = "\\s*,?\\s*";
|
|
5
4
|
|
|
6
5
|
/**
|
|
7
6
|
* p for param
|
|
8
7
|
* using "bad naming" here because it makes the regex much easier to read
|
|
8
|
+
* p is a number that is preceded by an arbitary number of spaces, maybe 0,
|
|
9
|
+
* a comma or not, and then possibly more spaces or not.
|
|
9
10
|
*/
|
|
10
|
-
const p = "(".concat(reNum, ")");
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
11
|
+
const p = "".concat(commaWsp, "(").concat(reNum, ")");
|
|
12
|
+
|
|
13
|
+
// const reMoveToCommand = `(M) ?(?:${p}${p} ?)+`;
|
|
14
|
+
|
|
15
|
+
// const reLineCommand = `(L) ?(?:${p}${p} ?)+`;
|
|
16
|
+
|
|
17
|
+
// const reHorizontalLineCommand = `(H) ?(?:${p} ?)+`;
|
|
18
|
+
|
|
19
|
+
// const reVerticalLineCommand = `(V) ?(?:${p} ?)+`;
|
|
20
|
+
|
|
21
|
+
// const reClosePathCommand = String.raw`(Z)\s*`;
|
|
22
|
+
|
|
23
|
+
// const reCubicCurveCommand = `(C) ?(?:${p}${p}${p}${p}${p}${p} ?)+`;
|
|
24
|
+
|
|
25
|
+
// const reCubicCurveShortcutCommand = `(S) ?(?:${p}${p}${p}${p} ?)+`;
|
|
26
|
+
|
|
27
|
+
// const reQuadraticCurveCommand = `(Q) ?(?:${p}${p}${p}${p} ?)+`;
|
|
28
|
+
|
|
29
|
+
// const reQuadraticCurveShortcutCommand = `(T) ?(?:${p}${p} ?)+`;
|
|
30
|
+
|
|
31
|
+
const reArcCommandPoints = "".concat(p).concat(p).concat(p).concat(commaWsp, "([01])").concat(commaWsp, "([01])").concat(p).concat(p);
|
|
32
|
+
// const reArcCommand = `(A) ?(?:${reArcCommandPoints} ?)+`;
|
|
33
|
+
|
|
34
|
+
// export const rePathCommandGroups =
|
|
35
|
+
// `(?:(?:${reMoveToCommand})` +
|
|
36
|
+
// `|(?:${reLineCommand})` +
|
|
37
|
+
// `|(?:${reHorizontalLineCommand})` +
|
|
38
|
+
// `|(?:${reVerticalLineCommand})` +
|
|
39
|
+
// `|(?:${reClosePathCommand})` +
|
|
40
|
+
// `|(?:${reCubicCurveCommand})` +
|
|
41
|
+
// `|(?:${reCubicCurveShortcutCommand})` +
|
|
42
|
+
// `|(?:${reQuadraticCurveCommand})` +
|
|
43
|
+
// `|(?:${reQuadraticCurveShortcutCommand})` +
|
|
44
|
+
// `|(?:${reArcCommand}))`;
|
|
45
|
+
|
|
46
|
+
const rePathCommand = '[mzlhvcsqta][^mzlhvcsqta]*';
|
|
47
|
+
|
|
48
|
+
export { reArcCommandPoints, rePathCommand };
|
|
24
49
|
//# sourceMappingURL=regex.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regex.mjs","sources":["../../../../src/util/path/regex.ts"],"sourcesContent":["import { reNum } from '../../parser/constants';\n\n/**\n * p for param\n * using \"bad naming\" here because it makes the regex much easier to read\n */\nconst p =
|
|
1
|
+
{"version":3,"file":"regex.mjs","sources":["../../../../src/util/path/regex.ts"],"sourcesContent":["import { reNum } from '../../parser/constants';\n\nconst commaWsp = `\\\\s*,?\\\\s*`;\n\n/**\n * p for param\n * using \"bad naming\" here because it makes the regex much easier to read\n * p is a number that is preceded by an arbitary number of spaces, maybe 0,\n * a comma or not, and then possibly more spaces or not.\n */\nconst p = `${commaWsp}(${reNum})`;\n\n// const reMoveToCommand = `(M) ?(?:${p}${p} ?)+`;\n\n// const reLineCommand = `(L) ?(?:${p}${p} ?)+`;\n\n// const reHorizontalLineCommand = `(H) ?(?:${p} ?)+`;\n\n// const reVerticalLineCommand = `(V) ?(?:${p} ?)+`;\n\n// const reClosePathCommand = String.raw`(Z)\\s*`;\n\n// const reCubicCurveCommand = `(C) ?(?:${p}${p}${p}${p}${p}${p} ?)+`;\n\n// const reCubicCurveShortcutCommand = `(S) ?(?:${p}${p}${p}${p} ?)+`;\n\n// const reQuadraticCurveCommand = `(Q) ?(?:${p}${p}${p}${p} ?)+`;\n\n// const reQuadraticCurveShortcutCommand = `(T) ?(?:${p}${p} ?)+`;\n\nexport const reArcCommandPoints = `${p}${p}${p}${commaWsp}([01])${commaWsp}([01])${p}${p}`;\n// const reArcCommand = `(A) ?(?:${reArcCommandPoints} ?)+`;\n\n// export const rePathCommandGroups =\n// `(?:(?:${reMoveToCommand})` +\n// `|(?:${reLineCommand})` +\n// `|(?:${reHorizontalLineCommand})` +\n// `|(?:${reVerticalLineCommand})` +\n// `|(?:${reClosePathCommand})` +\n// `|(?:${reCubicCurveCommand})` +\n// `|(?:${reCubicCurveShortcutCommand})` +\n// `|(?:${reQuadraticCurveCommand})` +\n// `|(?:${reQuadraticCurveShortcutCommand})` +\n// `|(?:${reArcCommand}))`;\n\nexport const rePathCommand = '[mzlhvcsqta][^mzlhvcsqta]*';\n"],"names":["commaWsp","p","concat","reNum","reArcCommandPoints","rePathCommand"],"mappings":";;AAEA,MAAMA,QAAQ,GAAe,YAAA,CAAA;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,CAAC,MAAAC,MAAA,CAAMF,QAAQ,EAAAE,GAAAA,CAAAA,CAAAA,MAAA,CAAIC,KAAK,EAAG,GAAA,CAAA,CAAA;;AAEjC;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEaC,MAAAA,kBAAkB,GAAAF,EAAAA,CAAAA,MAAA,CAAMD,CAAC,CAAAC,CAAAA,MAAA,CAAGD,CAAC,CAAAC,CAAAA,MAAA,CAAGD,CAAC,CAAA,CAAAC,MAAA,CAAGF,QAAQ,EAAA,QAAA,CAAA,CAAAE,MAAA,CAASF,QAAQ,EAAA,QAAA,CAAA,CAAAE,MAAA,CAASD,CAAC,CAAA,CAAAC,MAAA,CAAGD,CAAC,EAAE;AAC1F;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,MAAMI,aAAa,GAAG;;;;"}
|
|
@@ -207,6 +207,7 @@ export type TComplexPathData = TComplexParsedCommand[];
|
|
|
207
207
|
*/
|
|
208
208
|
export type TSimpleParsedCommand = TParsedAbsoluteMoveToCommand | TParsedAbsoluteLineCommand | TParsedAbsoluteClosePathCommand | TParsedAbsoluteCubicCurveCommand | TParsedAbsoluteQuadraticCurveCommand;
|
|
209
209
|
export type TSimpleParseCommandType = 'L' | 'M' | 'C' | 'Q' | 'Z';
|
|
210
|
+
export type TComplexParsedCommandType = 'M' | 'L' | 'C' | 'Q' | 'Z' | 'z' | 'm' | 'l' | 'h' | 'v' | 'c' | 's' | 'q' | 't' | 'a' | 'H' | 'V' | 'S' | 'T' | 'A';
|
|
210
211
|
/**
|
|
211
212
|
* A series of simple paths
|
|
212
213
|
*/
|