{
  "version": 3,
  "sources": ["../../../../../../src/lib/shapes/arrow/elbow/routes/elbowArrowRoutes.tsx"],
  "sourcesContent": ["import { ElbowArrowRoute, ElbowArrowSide } from '../definitions'\nimport { ElbowArrowRouteBuilder } from './ElbowArrowRouteBuilder'\nimport { ElbowArrowTransform, ElbowArrowWorkingInfo } from './ElbowArrowWorkingInfo'\n\n/**\n * Draw one of these arrows:\n *\n * ```\n * 1:              2:         3:          4:          5:\n * \u250C\u2500\u2500\u2500\u2510           \u250C\u2500\u2500\u2500\u2510      \u250C\u2500\u2500\u2500\u2510       \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510   \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2510\n * \u2502 A \u251C\u2500\u2510         \u2502 A \u251C\u2500\u2510    \u2502 A \u251C\u2500\u2500\u2500\u2510   \u2502 \u250C\u2500\u2500\u2500\u2510 \u2502   \u2502 \u250C\u2500\u2500\u2500\u2510 \u2502 \u2502 A \u251C\u2500\u2510\n * \u2514\u2500\u2500\u2500\u2518 \u2502 \u250C\u2500\u2500\u2500\u2510   \u2514\u2500\u2500\u2500\u2518 \u2502    \u2514\u2500\u2500\u2500\u2518   \u2502   \u2502 \u2502 A \u251C\u2500\u2518   \u2514\u2500\u25BA B \u2502 \u2502 \u2514\u2500\u2500\u2500\u2518 \u2502\n *       \u2514\u2500\u25BA B \u2502    \u250C\u2500\u2500\u2500\u2500\u2518      \u250C\u2500\u2500\u2500\u2510 \u2502   \u2502 \u2514\u2500\u2500\u2500\u2518       \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n *         \u2514\u2500\u2500\u2500\u2518    \u2502 \u250C\u2500\u2500\u2500\u2510   \u250C\u25BA\u2502 B \u2502 \u2502   \u2502   \u250C\u2500\u2500\u2500\u2510\n *                  \u2514\u2500\u25BA B \u2502   \u2502 \u2514\u2500\u2500\u2500\u2518 \u2502   \u2514\u2500\u2500\u2500\u25BA B \u2502\n *                    \u2514\u2500\u2500\u2500\u2518   \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518       \u2514\u2500\u2500\u2500\u2518\n * ```\n */\nexport function routeRightToLeft(info: ElbowArrowWorkingInfo): ElbowArrowRoute | null {\n\tconst aEdge = info.A.edges.right\n\tconst bEdge = info.B.edges.left\n\n\t// we can't draw this arrow if we don't have the proper edge we want:\n\tif (!aEdge || !bEdge) return null\n\n\t// just so we get to handle less edge cases, flip the boxes if A is below B:\n\tif (aEdge.crossTarget > bEdge.crossTarget) {\n\t\tinfo.apply(ElbowArrowTransform.FlipY)\n\t}\n\n\tif (info.gapX > 0 && info.midX !== null) {\n\t\t// Arrow 1:\n\t\treturn new ElbowArrowRouteBuilder(info, 'to left 1')\n\t\t\t.add(aEdge.value, aEdge.crossTarget)\n\t\t\t.add(info.midX, aEdge.crossTarget)\n\t\t\t.add(info.midX, bEdge.crossTarget)\n\t\t\t.midpointHandle('x')\n\t\t\t.add(bEdge.value, bEdge.crossTarget)\n\t\t\t.build()\n\t}\n\n\tif (aEdge.expanded === null || bEdge.expanded === null) return null\n\n\tif (info.midY !== null) {\n\t\t// Arrow 2:\n\t\treturn new ElbowArrowRouteBuilder(info, 'to left 2')\n\t\t\t.add(aEdge.value, aEdge.crossTarget)\n\t\t\t.add(aEdge.expanded, aEdge.crossTarget)\n\t\t\t.add(aEdge.expanded, info.midY)\n\t\t\t.add(bEdge.expanded, info.midY)\n\t\t\t.midpointHandle('y')\n\t\t\t.add(bEdge.expanded, bEdge.crossTarget)\n\t\t\t.add(bEdge.value, bEdge.crossTarget)\n\t\t\t.build()\n\t}\n\n\tconst arrow3Distance =\n\t\tMath.abs(aEdge.value - info.common.expanded.right) +\n\t\tMath.abs(aEdge.crossTarget - info.common.expanded.bottom) +\n\t\tMath.abs(info.common.expanded.right - bEdge.expanded) +\n\t\tMath.abs(info.common.expanded.bottom - bEdge.crossTarget) +\n\t\tinfo.options.expandElbowLegLength +\n\t\t6 // 6 points in this arrow\n\n\tconst arrow4Distance =\n\t\tinfo.options.expandElbowLegLength +\n\t\tMath.abs(aEdge.crossTarget - info.common.expanded.top) +\n\t\tMath.abs(aEdge.expanded - info.common.expanded.left) +\n\t\tMath.abs(info.common.expanded.top - bEdge.crossTarget) +\n\t\tMath.abs(info.common.expanded.left - bEdge.value) +\n\t\t// 6 points in this arrow, plus bias towards down/right:\n\t\t6 +\n\t\tinfo.bias.y\n\n\tconst arrow5Distance =\n\t\tinfo.gapX < 0 && info.midX !== null\n\t\t\t? info.options.expandElbowLegLength +\n\t\t\t\tMath.abs(aEdge.crossTarget - info.A.expanded.bottom) +\n\t\t\t\tinfo.common.expanded.width +\n\t\t\t\tMath.abs(info.A.expanded.bottom - info.B.expanded.top) +\n\t\t\t\tMath.abs(info.B.expanded.top - bEdge.crossTarget) +\n\t\t\t\tinfo.options.expandElbowLegLength +\n\t\t\t\t// 8 points in this arrow\n\t\t\t\t8\n\t\t\t: Infinity\n\n\tif (arrow3Distance < arrow4Distance && arrow3Distance < arrow5Distance) {\n\t\t// Arrow 3:\n\t\treturn new ElbowArrowRouteBuilder(info, 'to left 3')\n\t\t\t.add(aEdge.value, aEdge.crossTarget)\n\t\t\t.add(info.common.expanded.right, aEdge.crossTarget)\n\t\t\t.add(info.common.expanded.right, info.common.expanded.bottom)\n\t\t\t.add(bEdge.expanded, info.common.expanded.bottom)\n\t\t\t.add(bEdge.expanded, bEdge.crossTarget)\n\t\t\t.add(bEdge.value, bEdge.crossTarget)\n\t\t\t.build()\n\t}\n\n\tif (arrow4Distance < arrow5Distance) {\n\t\t// Arrow 4:\n\t\treturn new ElbowArrowRouteBuilder(info, 'to left 4')\n\t\t\t.add(aEdge.value, aEdge.crossTarget)\n\t\t\t.add(aEdge.expanded, aEdge.crossTarget)\n\t\t\t.add(aEdge.expanded, info.common.expanded.top)\n\t\t\t.add(info.common.expanded.left, info.common.expanded.top)\n\t\t\t.add(info.common.expanded.left, bEdge.crossTarget)\n\t\t\t.add(bEdge.value, bEdge.crossTarget)\n\t\t\t.build()\n\t}\n\n\tif (info.midX !== null) {\n\t\t// Arrow 5:\n\t\treturn new ElbowArrowRouteBuilder(info, 'to left 5')\n\t\t\t.add(aEdge.value, aEdge.crossTarget)\n\t\t\t.add(aEdge.expanded, aEdge.crossTarget)\n\t\t\t.add(aEdge.expanded, info.A.expanded.bottom)\n\t\t\t.add(info.midX, info.A.expanded.bottom)\n\t\t\t.add(info.midX, info.B.expanded.top)\n\t\t\t.midpointHandle('y')\n\t\t\t.add(bEdge.expanded, info.B.expanded.top)\n\t\t\t.add(bEdge.expanded, bEdge.crossTarget)\n\t\t\t.add(bEdge.value, bEdge.crossTarget)\n\t\t\t.build()\n\t}\n\n\treturn null\n}\n\n/**\n * Draw one of these arrows:\n * ```\n * 1:              2:              3:\n * \u250C\u2500\u2500\u2500\u2510                 \u250C\u2500\u2500\u2500\u2510     \u250C\u2500\u2500\u2500\u2510\n * \u2502 A \u251C\u2500\u2500\u2500\u2500\u2500\u2510     \u250C\u2500\u2500\u2500\u2510 \u2502 \u250C\u2500\u25BC\u2500\u2510   \u2502 A \u251C\u2500\u2510\n * \u2514\u2500\u2500\u2500\u2518     \u2502     \u2502 A \u251C\u2500\u2518 \u2502 B \u2502   \u2514\u2500\u2500\u2500\u2518 \u2502\n *         \u250C\u2500\u25BC\u2500\u2510   \u2514\u2500\u2500\u2500\u2518   \u2514\u2500\u2500\u2500\u2518     \u250C\u2500\u2500\u2500\u2518\n *         \u2502 B \u2502                   \u250C\u2500\u25BC\u2500\u2510\n *         \u2514\u2500\u2500\u2500\u2518                   \u2502 B \u2502\n *                                 \u2514\u2500\u2500\u2500\u2518\n * 4:        5:          6:\n *   \u250C\u2500\u2500\u2500\u2510     \u250C\u2500\u2500\u2500\u2510       \u250C\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2510\n * \u250C\u2500\u25BC\u2500\u2510 \u2502     \u2502 \u250C\u2500\u25BC\u2500\u2510   \u250C\u2500\u25BC\u2500\u2510 \u2502 \u2502 A \u251C\u2500\u2510\n * \u2502 B \u2502 \u2502     \u2502 \u2502 B \u2502   \u2502 B \u2502 \u2502 \u2514\u2500\u2500\u2500\u2518 \u2502\n * \u2514\u2500\u2500\u2500\u2518 \u2502     \u2502 \u2514\u2500\u2500\u2500\u2518   \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n * \u250C\u2500\u2500\u2500\u2510 \u2502     \u2514\u2500\u2500\u2500\u2510\n * \u2502 A \u251C\u2500\u2518   \u250C\u2500\u2500\u2500\u2510 \u2502\n * \u2514\u2500\u2500\u2500\u2518     \u2502 A \u251C\u2500\u2518\n *           \u2514\u2500\u2500\u2500\u2518\n * ```\n */\nexport function routeRightToTop(info: ElbowArrowWorkingInfo): ElbowArrowRoute | null {\n\tconst aEdge = info.A.edges.right\n\tconst bEdge = info.B.edges.top\n\n\tif (!aEdge || !bEdge) return null\n\n\tif (\n\t\t(aEdge.crossTarget < (bEdge.expanded ?? bEdge.value) &&\n\t\t\tbEdge.crossTarget > (aEdge.expanded ?? aEdge.value)) ||\n\t\t(info.A.isPoint && info.B.expanded.containsPoint(info.A.original.center))\n\t) {\n\t\t// Arrow 1:\n\t\treturn new ElbowArrowRouteBuilder(info, 'to top 1')\n\t\t\t.add(aEdge.value, aEdge.crossTarget)\n\t\t\t.add(bEdge.crossTarget, aEdge.crossTarget)\n\t\t\t.add(bEdge.crossTarget, bEdge.value)\n\t\t\t.build()\n\t}\n\n\tif (info.gapX > 0 && info.midX !== null && bEdge.expanded !== null) {\n\t\t// Arrow 2:\n\t\treturn new ElbowArrowRouteBuilder(info, 'to top 2')\n\t\t\t.add(aEdge.value, aEdge.crossTarget)\n\t\t\t.add(info.midX, aEdge.crossTarget)\n\t\t\t.add(info.midX, bEdge.expanded)\n\t\t\t.midpointHandle('x')\n\t\t\t.add(bEdge.crossTarget, bEdge.expanded)\n\t\t\t.add(bEdge.crossTarget, bEdge.value)\n\t\t\t.build()\n\t}\n\n\tif (\n\t\tinfo.gapY > 0 &&\n\t\taEdge.expanded !== null &&\n\t\tbEdge.crossTarget < aEdge.expanded &&\n\t\tinfo.midY !== null\n\t) {\n\t\t// Arrow 3:\n\t\treturn new ElbowArrowRouteBuilder(info, 'to top 3')\n\t\t\t.add(aEdge.value, aEdge.crossTarget)\n\t\t\t.add(aEdge.expanded, aEdge.crossTarget)\n\t\t\t.add(aEdge.expanded, info.midY)\n\t\t\t.add(bEdge.crossTarget, info.midY)\n\t\t\t.midpointHandle('y')\n\t\t\t.add(bEdge.crossTarget, bEdge.value)\n\t\t\t.build()\n\t}\n\n\tconst arrow4Length =\n\t\tMath.abs(aEdge.value - info.common.expanded.right) +\n\t\tMath.abs(aEdge.crossTarget - info.common.expanded.top) +\n\t\tMath.abs(bEdge.crossTarget - info.common.expanded.right) +\n\t\tMath.abs(bEdge.value - info.common.expanded.top)\n\n\tconst arrow5Length =\n\t\taEdge.expanded !== null && info.midY !== null && bEdge.expanded !== null\n\t\t\t? Math.abs(aEdge.value - aEdge.expanded) +\n\t\t\t\tMath.abs(info.B.expanded.left - aEdge.expanded) +\n\t\t\t\tMath.abs(info.B.expanded.left - bEdge.crossTarget) +\n\t\t\t\tMath.abs(aEdge.crossTarget - info.B.expanded.top) +\n\t\t\t\tMath.abs(bEdge.value - bEdge.expanded)\n\t\t\t: Infinity\n\n\tconst arrow6Length =\n\t\taEdge.expanded !== null && info.midX !== null && bEdge.expanded !== null\n\t\t\t? Math.abs(aEdge.value - info.common.expanded.right) +\n\t\t\t\tMath.abs(aEdge.crossTarget - info.A.expanded.bottom) +\n\t\t\t\tMath.abs(aEdge.expanded - bEdge.crossTarget) +\n\t\t\t\tMath.abs(info.A.expanded.bottom - bEdge.expanded) +\n\t\t\t\tMath.abs(bEdge.expanded - bEdge.value)\n\t\t\t: Infinity\n\n\tif (arrow4Length < arrow5Length && arrow4Length < arrow6Length) {\n\t\t// Arrow 4:\n\t\treturn new ElbowArrowRouteBuilder(info, 'to top 4')\n\t\t\t.add(aEdge.value, aEdge.crossTarget)\n\t\t\t.add(info.common.expanded.right, aEdge.crossTarget)\n\t\t\t.add(info.common.expanded.right, info.common.expanded.top)\n\t\t\t.add(bEdge.crossTarget, info.common.expanded.top)\n\t\t\t.add(bEdge.crossTarget, bEdge.value)\n\t\t\t.build()\n\t}\n\n\tif (\n\t\tbEdge.expanded !== null &&\n\t\taEdge.expanded !== null &&\n\t\tinfo.midY !== null &&\n\t\tarrow5Length < arrow6Length\n\t) {\n\t\t// Arrow 5:\n\t\treturn new ElbowArrowRouteBuilder(info, 'to top 5')\n\t\t\t.add(aEdge.value, aEdge.crossTarget)\n\t\t\t.add(aEdge.expanded, aEdge.crossTarget)\n\t\t\t.add(aEdge.expanded, info.midY)\n\t\t\t.add(info.B.expanded.left, info.midY)\n\t\t\t.midpointHandle('y')\n\t\t\t.add(info.B.expanded.left, bEdge.expanded)\n\t\t\t.add(bEdge.crossTarget, bEdge.expanded)\n\t\t\t.add(bEdge.crossTarget, bEdge.value)\n\t\t\t.build()\n\t}\n\n\tif (bEdge.expanded !== null && aEdge.expanded !== null && info.midX !== null) {\n\t\t// Arrow 6:\n\t\treturn new ElbowArrowRouteBuilder(info, 'to top 6')\n\t\t\t.add(aEdge.value, aEdge.crossTarget)\n\t\t\t.add(aEdge.expanded, aEdge.crossTarget)\n\t\t\t.add(aEdge.expanded, info.A.expanded.bottom)\n\t\t\t.add(info.midX, info.A.expanded.bottom)\n\t\t\t.add(info.midX, bEdge.expanded)\n\t\t\t.midpointHandle('x')\n\t\t\t.add(bEdge.crossTarget, bEdge.expanded)\n\t\t\t.add(bEdge.crossTarget, bEdge.value)\n\t\t\t.build()\n\t}\n\n\treturn null\n}\n\n/**\n * See `routeRightToTop`.\n */\nexport function routeRightToBottom(info: ElbowArrowWorkingInfo): ElbowArrowRoute | null {\n\tinfo.apply(ElbowArrowTransform.FlipY)\n\treturn routeRightToTop(info)\n}\n\n/**\n * Arrows may be mirrored - Y flipped\n * ```\n * 1:        2:                3:\n * \u250C\u2500\u2500\u2500\u2510     \u250C\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510           \u250C\u2500\u2500\u2500\u2510\n * \u2502 A \u251C\u2500\u2510   \u2502 A \u251C\u2500\u2518 \u250C\u2500\u2500\u2500\u2510 \u2502   \u250C\u2500\u2500\u2500\u2510   \u2502 A \u251C\u2500\u2510\n * \u2514\u2500\u2500\u2500\u2518 \u2502   \u2514\u2500\u2500\u2500\u2518   \u2502 B \u25C4\u2500\u2518   \u2502 B \u25C4\u2500\u2510 \u2514\u2500\u2500\u2500\u2518 \u2502\n * \u250C\u2500\u2500\u2500\u2510 \u2502           \u2514\u2500\u2500\u2500\u2518     \u2514\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n * \u2502 B \u25C4\u2500\u2518\n * \u2514\u2500\u2500\u2500\u2518\n * ```\n */\nexport function routeRightToRight(info: ElbowArrowWorkingInfo): ElbowArrowRoute | null {\n\tconst aEdge = info.A.edges.right\n\tconst bEdge = info.B.edges.right\n\n\tif (!aEdge || !bEdge) return null\n\n\tif (\n\t\t(info.gapX <= 0 ||\n\t\t\taEdge.crossTarget > info.B.expanded.bottom ||\n\t\t\taEdge.crossTarget < info.B.expanded.top) &&\n\t\t(bEdge.value > info.A.original.left ||\n\t\t\tbEdge.crossTarget > info.A.expanded.bottom ||\n\t\t\tbEdge.crossTarget < info.A.expanded.top)\n\t) {\n\t\t// Arrow 1\n\t\treturn new ElbowArrowRouteBuilder(info, 'to right 1')\n\t\t\t.add(aEdge.value, aEdge.crossTarget)\n\t\t\t.add(info.common.expanded.right, aEdge.crossTarget)\n\t\t\t.add(info.common.expanded.right, bEdge.crossTarget)\n\t\t\t.add(bEdge.value, bEdge.crossTarget)\n\t\t\t.build()\n\t}\n\n\tif (info.midX === null) return null\n\n\tif (bEdge.expanded !== null && info.gapX >= 0) {\n\t\tconst viaBottomLength =\n\t\t\tMath.abs(bEdge.crossTarget - info.B.expanded.bottom) +\n\t\t\tMath.abs(aEdge.crossTarget - info.B.expanded.bottom)\n\t\tconst viaTopLength =\n\t\t\tMath.abs(bEdge.crossTarget - info.B.expanded.top) +\n\t\t\tMath.abs(aEdge.crossTarget - info.B.expanded.top)\n\n\t\tconst topOrBottom = viaBottomLength < viaTopLength ? 'bottom' : 'top'\n\t\t// Arrow 2:\n\t\treturn new ElbowArrowRouteBuilder(info, `to right 2 via ${topOrBottom}`)\n\t\t\t.add(aEdge.value, aEdge.crossTarget)\n\t\t\t.add(info.midX, aEdge.crossTarget)\n\t\t\t.add(info.midX, info.B.expanded[topOrBottom])\n\t\t\t.midpointHandle('x')\n\t\t\t.add(bEdge.expanded, info.B.expanded[topOrBottom])\n\t\t\t.add(bEdge.expanded, bEdge.crossTarget)\n\t\t\t.add(bEdge.value, bEdge.crossTarget)\n\t\t\t.build()\n\t}\n\n\tif (aEdge.expanded !== null && info.gapX <= 0) {\n\t\tconst viaBottomLength =\n\t\t\tMath.abs(bEdge.crossTarget - info.A.expanded.bottom) +\n\t\t\tMath.abs(aEdge.crossTarget - info.A.expanded.bottom)\n\t\tconst viaTopLength =\n\t\t\tMath.abs(bEdge.crossTarget - info.A.expanded.top) +\n\t\t\tMath.abs(aEdge.crossTarget - info.A.expanded.top)\n\n\t\tconst topOrBottom = viaBottomLength < viaTopLength ? 'bottom' : 'top'\n\t\t// Arrow 3:\n\t\treturn new ElbowArrowRouteBuilder(info, `to right 3 via ${topOrBottom}`)\n\t\t\t.add(aEdge.value, aEdge.crossTarget)\n\t\t\t.add(aEdge.expanded, aEdge.crossTarget)\n\t\t\t.add(aEdge.expanded, info.A.expanded[topOrBottom])\n\t\t\t.add(info.midX, info.A.expanded[topOrBottom])\n\t\t\t.add(info.midX, bEdge.crossTarget)\n\t\t\t.midpointHandle('x')\n\t\t\t.add(bEdge.value, bEdge.crossTarget)\n\t\t\t.build()\n\t}\n\n\treturn null\n}\n\nconst routes = {\n\ttop: {\n\t\ttop: [ElbowArrowTransform.Rotate270, routeRightToRight],\n\t\tleft: [ElbowArrowTransform.Rotate270, routeRightToTop],\n\t\tbottom: [ElbowArrowTransform.Rotate270, routeRightToLeft],\n\t\tright: [ElbowArrowTransform.Rotate270, routeRightToBottom],\n\t},\n\tright: {\n\t\ttop: [ElbowArrowTransform.Identity, routeRightToTop],\n\t\tright: [ElbowArrowTransform.Identity, routeRightToRight],\n\t\tbottom: [ElbowArrowTransform.Identity, routeRightToBottom],\n\t\tleft: [ElbowArrowTransform.Identity, routeRightToLeft],\n\t},\n\tbottom: {\n\t\ttop: [ElbowArrowTransform.Rotate90, routeRightToLeft],\n\t\tleft: [ElbowArrowTransform.Rotate90, routeRightToBottom],\n\t\tbottom: [ElbowArrowTransform.Rotate90, routeRightToRight],\n\t\tright: [ElbowArrowTransform.Rotate90, routeRightToTop],\n\t},\n\tleft: {\n\t\ttop: [ElbowArrowTransform.Rotate180, routeRightToBottom],\n\t\tleft: [ElbowArrowTransform.Rotate180, routeRightToRight],\n\t\tbottom: [ElbowArrowTransform.Rotate180, routeRightToTop],\n\t\tright: [ElbowArrowTransform.Rotate180, routeRightToLeft],\n\t},\n} satisfies Record<\n\tElbowArrowSide,\n\tRecord<\n\t\tElbowArrowSide,\n\t\t[ElbowArrowTransform, (info: ElbowArrowWorkingInfo) => ElbowArrowRoute | null]\n\t>\n>\n\nexport function tryRouteArrow(\n\tinfo: ElbowArrowWorkingInfo,\n\taEdge: ElbowArrowSide,\n\tbEdge: ElbowArrowSide\n): ElbowArrowRoute | null {\n\tconst [transform, routeFn] = routes[aEdge][bEdge]\n\tinfo.apply(transform)\n\tconst route = routeFn(info)\n\tinfo.reset()\n\treturn route\n}\n"],
  "mappings": "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",
  "names": []
}
