@next-bricks/diagram 0.62.1 → 0.63.0
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/dist/bricks.json +1 -1
- package/dist/chunks/{1889.a5a21c16.js → 1889.cd9c8220.js} +2 -2
- package/dist/chunks/{1889.a5a21c16.js.map → 1889.cd9c8220.js.map} +1 -1
- package/dist/chunks/{5552.5435b269.js → 3171.4e111cd1.js} +2 -2
- package/dist/chunks/{5552.5435b269.js.map → 3171.4e111cd1.js.map} +1 -1
- package/dist/chunks/3233.df97f221.js +3 -0
- package/dist/chunks/{3233.941a4709.js.map → 3233.df97f221.js.map} +1 -1
- package/dist/chunks/{3933.a17e8eee.js → 3933.e47efe53.js} +2 -2
- package/dist/chunks/{3933.a17e8eee.js.map → 3933.e47efe53.js.map} +1 -1
- package/dist/chunks/4837.11c3f298.js +2 -0
- package/dist/chunks/{4837.c9d5ffd2.js.map → 4837.11c3f298.js.map} +1 -1
- package/dist/chunks/{3171.5a8dfbd7.js → 5552.c1fe77c8.js} +2 -2
- package/dist/chunks/{3171.5a8dfbd7.js.map → 5552.c1fe77c8.js.map} +1 -1
- package/dist/chunks/{6314.d7fb300d.js → 6314.449f20cc.js} +2 -2
- package/dist/chunks/{6314.d7fb300d.js.map → 6314.449f20cc.js.map} +1 -1
- package/dist/chunks/{9789.61a352b0.js → 6730.b6d7107a.js} +2 -2
- package/dist/chunks/{9789.61a352b0.js.map → 6730.b6d7107a.js.map} +1 -1
- package/dist/chunks/6773.ef4413a1.js +2 -0
- package/dist/chunks/6773.ef4413a1.js.map +1 -0
- package/dist/chunks/7218.3d3b9880.js +2 -0
- package/dist/chunks/{7218.84b9d5ad.js.map → 7218.3d3b9880.js.map} +1 -1
- package/dist/chunks/8522.dcbc8592.js +2 -0
- package/dist/chunks/8522.dcbc8592.js.map +1 -0
- package/dist/chunks/871.cf918ecb.js +2 -0
- package/dist/chunks/871.cf918ecb.js.map +1 -0
- package/dist/chunks/9140.08761fe0.js +3 -0
- package/dist/chunks/9140.08761fe0.js.map +1 -0
- package/dist/chunks/{9515.fa372b62.js → 9515.2b74919b.js} +2 -2
- package/dist/chunks/9515.2b74919b.js.map +1 -0
- package/dist/chunks/{9711.756e94c9.js → 9711.522aa912.js} +2 -2
- package/dist/chunks/9711.522aa912.js.map +1 -0
- package/dist/chunks/eo-display-canvas.c67d5a35.js +2 -0
- package/dist/chunks/eo-display-canvas.c67d5a35.js.map +1 -0
- package/dist/chunks/{eo-draw-canvas.b0a01d80.js → eo-draw-canvas.7caa4a7d.js} +2 -2
- package/dist/chunks/{eo-draw-canvas.b0a01d80.js.map → eo-draw-canvas.7caa4a7d.js.map} +1 -1
- package/dist/chunks/main.69738be9.js +2 -0
- package/dist/chunks/{main.76d93db0.js.map → main.69738be9.js.map} +1 -1
- package/dist/index.b30ff5f9.js +2 -0
- package/dist/{index.8b26701d.js.map → index.b30ff5f9.js.map} +1 -1
- package/dist/manifest.json +16 -1
- package/dist/types.json +564 -88
- package/dist-types/diagram/interfaces.d.ts +12 -8
- package/dist-types/display-canvas/index.d.ts +6 -8
- package/dist-types/draw-canvas/constants.d.ts +1 -0
- package/dist-types/draw-canvas/interfaces.d.ts +41 -9
- package/dist-types/draw-canvas/processors/transformToCenter.d.ts +2 -6
- package/dist-types/shared/canvas/processors/getCellsRect.d.ts +2 -0
- package/dist-types/shared/canvas/processors/getTransformToCenter.d.ts +9 -0
- package/dist-types/shared/canvas/useAutoCenter.d.ts +5 -3
- package/dist-types/shared/canvas/useLayout.d.ts +3 -2
- package/package.json +2 -2
- package/dist/chunks/3233.941a4709.js +0 -3
- package/dist/chunks/4837.c9d5ffd2.js +0 -2
- package/dist/chunks/6773.fe170705.js +0 -2
- package/dist/chunks/6773.fe170705.js.map +0 -1
- package/dist/chunks/7218.84b9d5ad.js +0 -2
- package/dist/chunks/7770.c839e46e.js +0 -2
- package/dist/chunks/7770.c839e46e.js.map +0 -1
- package/dist/chunks/871.e9d9ff80.js +0 -2
- package/dist/chunks/871.e9d9ff80.js.map +0 -1
- package/dist/chunks/9140.6ada4433.js +0 -3
- package/dist/chunks/9140.6ada4433.js.map +0 -1
- package/dist/chunks/9515.fa372b62.js.map +0 -1
- package/dist/chunks/9711.756e94c9.js.map +0 -1
- package/dist/chunks/eo-display-canvas.2c6cf897.js +0 -2
- package/dist/chunks/eo-display-canvas.2c6cf897.js.map +0 -1
- package/dist/chunks/main.76d93db0.js +0 -2
- package/dist/index.8b26701d.js +0 -2
- /package/dist/chunks/{3233.941a4709.js.LICENSE.txt → 3233.df97f221.js.LICENSE.txt} +0 -0
- /package/dist/chunks/{9140.6ada4433.js.LICENSE.txt → 9140.08761fe0.js.LICENSE.txt} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunks/9789.61a352b0.js","mappings":"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","sources":["webpack:///./src/diagram/processors/doTwoNodesOverlap.ts","webpack:///./src/diagram/lines/getDirectLinePoints.ts","webpack:///./src/diagram/MarkerComponent.tsx","webpack:///./src/diagram/lines/getPolyLinePoints.ts","webpack:///./src/diagram/lines/intersect.ts","webpack:///./src/diagram/lines/curveLine.ts","webpack:///./src/diagram/processors/extractPartialRectTuple.ts"],"sourcesContent":["import type { NodeRect } from \"../interfaces\";\n\nexport function doTwoNodesOverlap(\n a: NodeRect,\n b: NodeRect,\n paddingA: number,\n paddingB: number\n): boolean {\n const A = paddingA ? getNodesWithPadding(a, paddingA) : a;\n const B = paddingB ? getNodesWithPadding(b, paddingB) : b;\n const left = Math.min(A.x - A.width / 2, B.x - B.width / 2);\n const right = Math.max(A.x + A.width / 2, B.x + B.width / 2);\n const top = Math.min(A.y - A.height / 2, B.y - B.height / 2);\n const bottom = Math.max(A.y + A.height / 2, B.y + B.height / 2);\n return right - left < A.width + B.width && bottom - top < A.height + B.height;\n}\n\nfunction getNodesWithPadding(node: NodeRect, padding: number) {\n return {\n x: node.x - node.width / 2 - padding,\n y: node.y - node.height / 2 - padding,\n width: node.width + padding * 2,\n height: node.height + padding * 2,\n };\n}\n","import type { EdgeView } from \"../../draw-canvas/interfaces\";\nimport type { NodePosition, NodeRect, PositionTuple } from \"../interfaces\";\nimport { doTwoNodesOverlap } from \"../processors/doTwoNodesOverlap\";\nimport { intersect } from \"./intersect\";\n\ntype LineTuple = [start: PositionTuple, end: PositionTuple];\n\nexport function getDirectLinePoints(\n source: NodeRect,\n target: NodeRect,\n parallelGap?: number,\n edgeView?: EdgeView\n): NodePosition[] | null {\n const hasExitPosition = !!edgeView?.exitPosition;\n const hasEntryPosition = !!edgeView?.entryPosition;\n\n // Ignore if two nodes are the same.\n // Ignore if two nodes overlap and no entry nor exit position.\n if (\n source === target ||\n (doTwoNodesOverlap(source, target, 0, 0) &&\n !(hasExitPosition || hasEntryPosition))\n ) {\n return null;\n }\n\n let p0: PositionTuple;\n let p1: PositionTuple;\n\n let xDiff = 0;\n let yDiff = 0;\n\n if (parallelGap) {\n const dx = target.x - source.x;\n const dy = target.y - source.y;\n const angle = Math.atan2(dy, dx);\n xDiff = (parallelGap / 2) * Math.cos(angle + Math.PI / 2);\n yDiff = (parallelGap / 2) * Math.sin(angle + Math.PI / 2);\n }\n\n const line: LineTuple = [\n hasExitPosition\n ? [\n source.x + (edgeView!.exitPosition!.x - 0.5) * source.width,\n source.y + (edgeView!.exitPosition!.y - 0.5) * source.height,\n ]\n : [source.x + xDiff, source.y + yDiff],\n hasEntryPosition\n ? [\n target.x + (edgeView!.entryPosition!.x - 0.5) * target.width,\n target.y + (edgeView!.entryPosition!.y - 0.5) * target.height,\n ]\n : [target.x + xDiff, target.y + yDiff],\n ];\n\n if (hasExitPosition) {\n p0 = line[0];\n } else {\n const sourceIntersections = getIntersections(source, line);\n // Todo: handle when more than one intersection\n if (sourceIntersections.length > 0) {\n p0 = sourceIntersections[0];\n } else {\n p0 = [source.x, source.y];\n }\n }\n\n if (hasEntryPosition) {\n p1 = line[1];\n } else {\n const targetIntersections = getIntersections(target, line);\n // Todo: handle when more than one intersection\n if (targetIntersections.length > 0) {\n p1 = targetIntersections[0];\n } else {\n p1 = [target.x, target.y];\n }\n }\n\n return [\n { x: p0[0], y: p0[1] },\n { x: p1[0], y: p1[1] },\n ];\n}\n\nfunction getIntersections(rect: NodeRect, line: LineTuple) {\n const vertices: PositionTuple[] = [\n [rect.x - rect.width / 2, rect.y - rect.height / 2],\n [rect.x + rect.width / 2, rect.y - rect.height / 2],\n [rect.x + rect.width / 2, rect.y + rect.height / 2],\n [rect.x - rect.width / 2, rect.y + rect.height / 2],\n ];\n const possibleLines: [start: PositionTuple, end: PositionTuple][] = [];\n for (let i = 0; i < 4; i++) {\n possibleLines.push([vertices[i], vertices[(i + 1) % 4]]);\n }\n const intersections: PositionTuple[] = [];\n for (const item of possibleLines) {\n const intersection = intersect(line[0], line[1], item[0], item[1]);\n if (intersection) {\n intersections.push(intersection);\n }\n }\n return intersections;\n}\n","import React from \"react\";\nimport type { LineMarkerType } from \"./interfaces\";\n\nexport interface MarkerComponentProps extends BaseMarkerComponentProps {\n type: LineMarkerType;\n}\n\nexport interface BaseMarkerComponentProps {\n id: string;\n strokeColor?: string;\n}\n\nexport function MarkerComponent({\n id,\n type,\n strokeColor,\n}: MarkerComponentProps): JSX.Element {\n let Component: (props: BaseMarkerComponentProps) => JSX.Element;\n\n switch (type) {\n case \"0..1\":\n Component = EntityRelationZeroOrOneMarker;\n break;\n case \"0..N\":\n Component = EntityRelationZeroOrManyMarker;\n break;\n case \"circle\":\n Component = CircleMarker;\n break;\n default:\n Component = ArrowMarker;\n }\n return <Component id={id} strokeColor={strokeColor} />;\n}\n\nfunction CircleMarker({\n id,\n strokeColor,\n}: BaseMarkerComponentProps): JSX.Element {\n const r = 3;\n const d = r * 3;\n return (\n <marker\n viewBox={`0 0 ${d} ${d}`}\n refX={r}\n refY={r}\n id={id}\n overflow=\"visible\"\n markerWidth={d}\n markerHeight={d}\n >\n <circle stroke=\"none\" fill={strokeColor} cx={r} cy={r} r={r} />\n </marker>\n );\n}\n\nfunction ArrowMarker({\n id,\n strokeColor,\n}: BaseMarkerComponentProps): JSX.Element {\n return (\n <marker\n id={id}\n viewBox=\"0 0 6 6\"\n refX={5}\n refY={3}\n markerWidth={6}\n markerHeight={6}\n orient=\"auto-start-reverse\"\n strokeLinejoin=\"round\"\n >\n <path\n d=\"M 0.5 0.5 L 5.5 3 L 0.5 5.5 z\"\n stroke={strokeColor}\n strokeWidth={1}\n fill={strokeColor}\n />\n </marker>\n );\n}\n\nfunction EntityRelationZeroOrOneMarker({\n id,\n strokeColor,\n}: BaseMarkerComponentProps): JSX.Element {\n return (\n <marker\n id={id}\n viewBox=\"0 0 21 11\"\n refX={0.5}\n refY={5.5}\n markerWidth={21}\n markerHeight={11}\n orient=\"auto-start-reverse\"\n >\n <path\n d=\"M 5.5 5.5 m 5 0 a 5 5 0 1 0 -10 0 a 5 5 0 1 0 10 0 M 15.5 0.5 V 10.5 M 10.5 5.5 H 20.5\"\n stroke={strokeColor}\n strokeWidth={1}\n fill=\"none\"\n />\n </marker>\n );\n}\n\nfunction EntityRelationZeroOrManyMarker({\n id,\n strokeColor,\n}: BaseMarkerComponentProps): JSX.Element {\n return (\n <marker\n id={id}\n viewBox=\"0 0 21 11\"\n refX={0.5}\n refY={5.5}\n markerWidth={21}\n markerHeight={11}\n orient=\"auto-start-reverse\"\n >\n <path\n d=\"M 5.5 5.5 m 5 0 a 5 5 0 1 0 -10 0 a 5 5 0 1 0 10 0 M 20.5 0.5 L 10.5 5.5 L 20.5 10.5 M 10.5 5.5 H 20.5\"\n stroke={strokeColor}\n strokeWidth={1}\n fill=\"none\"\n />\n </marker>\n );\n}\n","import type { Direction, NodePosition, NodeRect } from \"../interfaces\";\n\nconst MINIMAL_OFFSET = 20;\n\nexport function getPolyLinePoints(\n source: NodeRect,\n target: NodeRect,\n sourceDirection: Direction,\n targetDirection: Direction,\n sourcePosition: number,\n targetPosition: number\n): NodePosition[] {\n const p0 = getCoordinates(source, sourceDirection, sourcePosition);\n const p1 = getCoordinates(target, targetDirection, targetPosition);\n\n let controls: NodePosition[] = [];\n let reverseControls = false;\n\n const sourceIsVertical =\n sourceDirection === \"top\" || sourceDirection === \"bottom\";\n const targetIsVertical =\n targetDirection === \"top\" || targetDirection === \"bottom\";\n\n if (sourceIsVertical !== targetIsVertical) {\n // One is vertical and the other is horizontal\n let horizontal: NodeRect;\n let vertical: NodeRect;\n let horizontalSign: number;\n let verticalSign: number;\n let horizontalPosition: NodePosition;\n let verticalPosition: NodePosition;\n if (sourceIsVertical) {\n horizontal = target;\n vertical = source;\n horizontalSign = targetDirection === \"right\" ? 1 : -1;\n verticalSign = sourceDirection === \"bottom\" ? 1 : -1;\n horizontalPosition = p1;\n verticalPosition = p0;\n } else {\n horizontal = source;\n vertical = target;\n horizontalSign = sourceDirection === \"right\" ? 1 : -1;\n verticalSign = targetDirection === \"bottom\" ? 1 : -1;\n horizontalPosition = p0;\n verticalPosition = p1;\n reverseControls = true;\n }\n\n const defaultControlX =\n horizontalPosition.x + MINIMAL_OFFSET * horizontalSign;\n const defaultControlY = verticalPosition.y + MINIMAL_OFFSET * verticalSign;\n\n if ((horizontal.x - vertical.x) * horizontalSign >= 0) {\n if ((vertical.y - horizontal.y) * verticalSign >= 0) {\n // ┌──────────────┐\n // ┌──┴──┐ ┌─────┐ │\n // │ S │ │ T ├─┘\n // └─────┘ └─────┘\n controls = [\n { x: verticalPosition.x, y: defaultControlY },\n { x: defaultControlX, y: defaultControlY },\n { x: defaultControlX, y: horizontalPosition.y },\n ];\n } else {\n const controlY0 =\n vertical.y + (vertical.height / 2 + MINIMAL_OFFSET) * verticalSign;\n const controlY1 =\n horizontal.y -\n (horizontal.height / 2 + MINIMAL_OFFSET) * verticalSign;\n if ((controlY1 - controlY0) * verticalSign >= 0) {\n // ┌─────┐\n // │ T ├─┐\n // └─────┘ │\n // ┌────────┘\n // ┌──┴──┐\n // │ S │\n // └─────┘\n const middleY = (controlY0 + controlY1) / 2;\n controls = [\n { x: verticalPosition.x, y: middleY },\n { x: defaultControlX, y: middleY },\n { x: defaultControlX, y: horizontalPosition.y },\n ];\n } else {\n // ┌─────┐\n // ┌────┐ │ T ├─┐\n // ┌──┴──┐ │ └─────┘ │\n // │ S │ └─────────┘\n // └─────┘\n const middleX =\n (vertical.x +\n (vertical.width / 2) * horizontalSign +\n horizontal.x -\n (horizontal.width / 2) * horizontalSign) /\n 2;\n controls = [\n { x: verticalPosition.x, y: controlY0 },\n { x: middleX, y: controlY0 },\n { x: middleX, y: controlY1 },\n { x: defaultControlX, y: controlY1 },\n { x: defaultControlX, y: horizontalPosition.y },\n ];\n }\n }\n } else if ((horizontalPosition.y - defaultControlY) * verticalSign >= 0) {\n if ((verticalPosition.x - defaultControlX) * horizontalSign >= 0) {\n // ┌─────┐\n // ┌──┤ T │\n // │ └─────┘\n // ┌──┴──┐\n // │ S │\n // └─────┘\n controls = [{ x: verticalPosition.x, y: horizontalPosition.y }];\n } else {\n // ┌─────┐\n // │ T ├─┐\n // └─────┘ │\n // ┌─┘\n // ┌──┴──┐\n // │ S │\n // └─────┘\n const controlY0 =\n vertical.y + (vertical.height / 2 + MINIMAL_OFFSET) * verticalSign;\n const controlY1 =\n horizontal.y -\n (horizontal.height / 2 + MINIMAL_OFFSET) * verticalSign;\n const middleY = (controlY0 + controlY1) / 2;\n controls = [\n { x: verticalPosition.x, y: middleY },\n { x: defaultControlX, y: middleY },\n { x: defaultControlX, y: horizontalPosition.y },\n ];\n }\n } else {\n const sourceExtendX =\n vertical.x - (vertical.width / 2 + MINIMAL_OFFSET) * horizontalSign;\n if ((sourceExtendX - defaultControlX) * horizontalSign >= 0) {\n // ┌────┐\n // │ ┌──┴──┐\n // │ │ S │\n // ┌─────┐ │ └─────┘\n // │ T ├─┘\n // └─────┘\n const middleX = (sourceExtendX + defaultControlX) / 2;\n controls = [\n { x: verticalPosition.x, y: defaultControlY },\n { x: middleX, y: defaultControlY },\n { x: middleX, y: horizontalPosition.y },\n ];\n } else {\n // ┌────┐\n // │ ┌──┴──┐\n // │ │ S │\n // │ └─────┘\n // └───┐\n // ┌─────┐ │\n // │ T ├─┘\n // └─────┘\n const middleY =\n (vertical.y -\n (vertical.height / 2) * verticalSign +\n horizontal.y +\n (horizontal.height / 2) * verticalSign) /\n 2;\n controls = [\n { x: verticalPosition.x, y: defaultControlY },\n { x: sourceExtendX, y: defaultControlY },\n { x: sourceExtendX, y: middleY },\n { x: defaultControlX, y: middleY },\n { x: defaultControlX, y: horizontalPosition.y },\n ];\n }\n }\n } else if (sourceDirection === targetDirection) {\n // Same direction\n const sign =\n sourceDirection === \"bottom\" || sourceDirection === \"right\" ? 1 : -1;\n let start: NodeRect;\n let end: NodeRect;\n let startPosition: NodePosition;\n let endPosition: NodePosition;\n const axis = sourceIsVertical ? \"y\" : \"x\";\n const oppositeAxis = sourceIsVertical ? \"x\" : \"y\";\n if (target[axis] < source[axis]) {\n start = target;\n end = source;\n startPosition = p1;\n endPosition = p0;\n reverseControls = sign === 1;\n } else {\n start = source;\n end = target;\n startPosition = p0;\n endPosition = p1;\n reverseControls = sign !== 1;\n }\n const perpendicular =\n target[oppositeAxis] < source[oppositeAxis] ? source : target;\n let around: NodeRect;\n let nonAround: NodeRect;\n let aroundPosition: NodePosition;\n let nonAroundPosition: NodePosition;\n if (sign === 1) {\n around = end;\n nonAround = start;\n aroundPosition = endPosition;\n nonAroundPosition = startPosition;\n } else {\n around = start;\n nonAround = end;\n aroundPosition = startPosition;\n nonAroundPosition = endPosition;\n }\n const aroundSign = around === perpendicular ? 1 : -1;\n if (sourceIsVertical) {\n const defaultControlX =\n around.x - (around.width / 2 + MINIMAL_OFFSET) * aroundSign;\n const defaultControlY = aroundPosition.y + MINIMAL_OFFSET * sign;\n if ((defaultControlX - nonAroundPosition.x) * aroundSign >= 0) {\n // ┌─────────┐\n // │ ┌──┴──┐\n // │ │ T │\n // ┌──┴──┐ └─────┘\n // │ S │\n // └─────┘\n controls = [\n { x: nonAroundPosition.x, y: defaultControlY },\n { x: aroundPosition.x, y: defaultControlY },\n ];\n } else {\n // ┌────┐\n // │ ┌──┴──┐\n // │ │ T │\n // │ └─────┘\n // └─┐\n // ┌──┴──┐\n // │ S │\n // └─────┘\n const middleY =\n (nonAround.y +\n (nonAround.height / 2) * sign +\n around.y -\n (around.height / 2) * sign) /\n 2;\n controls = [\n { x: nonAroundPosition.x, y: middleY },\n { x: defaultControlX, y: middleY },\n { x: defaultControlX, y: defaultControlY },\n { x: aroundPosition.x, y: defaultControlY },\n ];\n }\n } else {\n const defaultControlX = aroundPosition.x + MINIMAL_OFFSET * sign;\n const defaultControlY =\n around.y - (around.height / 2 + MINIMAL_OFFSET) * aroundSign;\n if ((defaultControlY - nonAroundPosition.y) * aroundSign >= 0) {\n // ┌─────┐\n // ┌─────────┤ T │\n // │ ┌─────┐ └─────┘\n // └─┤ S │\n // └─────┘\n controls = [\n { x: defaultControlX, y: nonAroundPosition.y },\n { x: defaultControlX, y: aroundPosition.y },\n ];\n } else {\n // ┌─────────┐\n // │ ┌─────┐ │ ┌─────┐\n // └─┤ S │ └─┤ T │\n // └─────┘ └─────┘\n const middleX =\n (nonAround.x +\n (nonAround.width / 2) * sign +\n around.x -\n (around.width / 2) * sign) /\n 2;\n controls = [\n { x: middleX, y: nonAroundPosition.y },\n { x: middleX, y: defaultControlY },\n { x: defaultControlX, y: defaultControlY },\n { x: defaultControlX, y: aroundPosition.y },\n ];\n }\n }\n } else {\n // Opposite direction\n const targetSign =\n targetDirection === \"bottom\" || targetDirection === \"right\" ? 1 : -1;\n let axis: \"x\" | \"y\";\n let oppositeAxis: \"x\" | \"y\";\n let size: \"width\" | \"height\";\n let oppositeSize: \"width\" | \"height\";\n if (sourceIsVertical) {\n axis = \"y\";\n oppositeAxis = \"x\";\n size = \"height\";\n oppositeSize = \"width\";\n } else {\n axis = \"x\";\n oppositeAxis = \"y\";\n size = \"width\";\n oppositeSize = \"height\";\n }\n const targetEdge = target[axis] + (target[size] / 2) * targetSign;\n const sourceEdge = source[axis] - (source[size] / 2) * targetSign;\n const targetControl = targetEdge + MINIMAL_OFFSET * targetSign;\n const sourceControl = sourceEdge - MINIMAL_OFFSET * targetSign;\n const oppositeIsStraight = p0[oppositeAxis] === p1[oppositeAxis];\n if ((sourceControl - targetControl) * targetSign >= 0) {\n const middle = (sourceControl + targetControl) / 2;\n if (oppositeIsStraight) {\n // Straight line\n // ┌─────┐\n // │ T │\n // └──┬──┘\n // │\n // ┌──┴──┐\n // │ S │\n // └─────┘\n controls = [];\n } else {\n // ┌─────┐\n // │ T │\n // └──┬──┘\n // ┌───┘\n // ┌──┴──┐\n // │ S │\n // └─────┘\n controls = [\n { [oppositeAxis]: p0[oppositeAxis], [axis]: middle },\n { [oppositeAxis]: p1[oppositeAxis], [axis]: middle },\n ] as unknown[] as NodePosition[];\n }\n } else if (\n oppositeIsStraight &&\n (sourceEdge - targetEdge) * targetSign >= 0\n ) {\n // Straight line (very close)\n // ┌─────┐\n // │ T │\n // └──┬──┘\n // ┌──┴──┐\n // │ S │\n // └─────┘\n controls = [];\n } else {\n const targetOppositeSign =\n target[oppositeAxis] < source[oppositeAxis] ? -1 : 1;\n const sourceOppositeControl =\n source[oppositeAxis] +\n (source[oppositeSize] / 2 + MINIMAL_OFFSET) * targetOppositeSign;\n const targetOppositeControl =\n target[oppositeAxis] -\n (target[oppositeSize] / 2 + MINIMAL_OFFSET) * targetOppositeSign;\n if (\n (targetOppositeControl - sourceOppositeControl) * targetOppositeSign >=\n 0 ||\n Math.abs((sourceControl - targetControl) * targetSign) < MINIMAL_OFFSET\n ) {\n // ┌─────┐\n // ┌────┐ │ T │\n // ┌──┴──┐ │ └──┬──┘\n // │ S │ └────┘\n // └─────┘\n const oppositeMiddle =\n (sourceOppositeControl + targetOppositeControl) / 2;\n controls = [\n { [oppositeAxis]: p0[oppositeAxis], [axis]: sourceControl },\n { [oppositeAxis]: oppositeMiddle, [axis]: sourceControl },\n { [oppositeAxis]: oppositeMiddle, [axis]: targetControl },\n { [oppositeAxis]: p1[oppositeAxis], [axis]: targetControl },\n ] as unknown[] as NodePosition[];\n } else {\n // ┌────┐\n // ┌──┴──┐ │\n // │ S │ │\n // └─────┘ │\n // ┌─────────┘\n // │ ┌─────┐\n // │ │ T │\n // │ └──┬──┘\n // └────┘\n const middle =\n (source[axis] +\n (source[size] / 2) * targetSign +\n target[axis] -\n (target[size] / 2) * targetSign) /\n 2;\n controls = [\n { [oppositeAxis]: p0[oppositeAxis], [axis]: sourceControl },\n { [oppositeAxis]: sourceOppositeControl, [axis]: sourceControl },\n { [oppositeAxis]: sourceOppositeControl, [axis]: middle },\n { [oppositeAxis]: targetOppositeControl, [axis]: middle },\n { [oppositeAxis]: targetOppositeControl, [axis]: targetControl },\n { [oppositeAxis]: p1[oppositeAxis], [axis]: targetControl },\n ] as unknown[] as NodePosition[];\n }\n }\n }\n\n if (reverseControls) {\n controls.reverse();\n }\n\n return [p0, ...controls, p1] as NodePosition[];\n}\n\nfunction getCoordinates(\n node: NodeRect,\n direction: Direction,\n position: number\n): NodePosition {\n const { x, y, width, height } = node;\n switch (direction) {\n case \"top\":\n return {\n x: x - width / 2 + width * position,\n y: y - height / 2,\n };\n case \"bottom\":\n return {\n x: x - width / 2 + width * position,\n y: y + height / 2,\n };\n case \"left\":\n return {\n x: x - width / 2,\n y: y - height / 2 + height * position,\n };\n case \"right\":\n return {\n x: x + width / 2,\n y: y - height / 2 + height * position,\n };\n }\n}\n","import type { PositionTuple } from \"../interfaces\";\n\n// https://paulbourke.net/geometry/pointlineplane/javascript.txt\nexport function intersect(\n [x1, y1]: PositionTuple,\n [x2, y2]: PositionTuple,\n [x3, y3]: PositionTuple,\n [x4, y4]: PositionTuple\n): null | PositionTuple {\n // Check if none of the lines are of length 0\n if ((x1 === x2 && y1 === y2) || (x3 === x4 && y3 === y4)) {\n return null;\n }\n\n const denominator = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);\n\n // Lines are parallel\n if (denominator === 0) {\n return null;\n }\n\n const ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator;\n const ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denominator;\n\n // is the intersection along the segments\n if (ua < 0 || ua > 1 || ub < 0 || ub > 1) {\n return null;\n }\n\n // Return a object with the x and y coordinates of the intersection\n const x = x1 + ua * (x2 - x1);\n const y = y1 + ua * (y2 - y1);\n\n return [x, y];\n}\n","import {\n curveLinear,\n line,\n curveBasis,\n curveBumpX,\n curveBumpY,\n type CurveFactory,\n curveMonotoneX,\n curveNatural,\n curveMonotoneY,\n} from \"d3-shape\";\nimport type { CurveType, NodePosition } from \"../interfaces\";\nimport type { LineSegmentJumps } from \"../../draw-canvas/interfaces\";\n\n/**\n * Generate Line from points\n */\nexport function curveLine(\n points: Array<NodePosition> | null | undefined,\n curveType: CurveType | undefined,\n startOffset: number,\n endOffset: number,\n jumpsMap?: Map<number, LineSegmentJumps> | null\n): string {\n if (!Array.isArray(points)) {\n return \"\";\n }\n let curveFactory: CurveFactory;\n switch (curveType) {\n case \"curveLinear\":\n curveFactory = curveLinear;\n break;\n case \"curveBumpX\":\n curveFactory = curveBumpX;\n break;\n case \"curveBumpY\":\n curveFactory = curveBumpY;\n break;\n case \"curveMonotoneX\":\n curveFactory = curveMonotoneX;\n break;\n case \"curveMonotoneY\":\n curveFactory = curveMonotoneY;\n break;\n case \"curveNatural\":\n curveFactory = curveNatural;\n break;\n default:\n curveFactory = curveBasis;\n }\n const startOffsets = getOffsets(points[1], points[0], startOffset);\n const endOffsets = getOffsets(\n points[points.length - 2],\n points[points.length - 1],\n endOffset\n );\n const lineFunction = line<NodePosition>()\n .x(\n (d, index) =>\n d.x -\n (index === 0\n ? startOffsets.x\n : index === points.length - 1\n ? endOffsets.x\n : 0)\n )\n .y(\n (d, index) =>\n d.y -\n (index === 0\n ? startOffsets.y\n : index === points.length - 1\n ? endOffsets.y\n : 0)\n )\n .curve(curveFactory);\n\n if (jumpsMap && curveType == \"curveLinear\") {\n const d: string[] = [];\n for (let i = 0; i < points.length - 1; i++) {\n const start = points[i];\n const end = points[i + 1];\n if (i === 0) {\n d.push(`M${start.x},${start.y}`);\n }\n // 处理交叉跨线点\n const jump = jumpsMap.get(i);\n if (jump) {\n // 跨线点近似为一段半圆,参考 draw.io 使用三次贝赛尔曲线实现。\n // 一条 jump 记录中所有的 jumpPoints 都在同一线段上,因此角度一致、尺寸一致。\n const dx = end.x - start.x;\n const dy = end.y - start.y;\n const angle = Math.atan2(dy, dx);\n const direction = Math.abs(angle) <= Math.PI / 2 ? -1 : 1;\n const verticalAngle = angle + (Math.PI / 2) * direction;\n const offsetX = jump.radius * 1.3 * Math.cos(verticalAngle);\n const offsetY = jump.radius * 1.3 * Math.sin(verticalAngle);\n const xDiff = jump.radius * Math.cos(angle);\n const yDiff = jump.radius * Math.sin(angle);\n for (const p of jump.jumpPoints) {\n const x0 = p.x - xDiff;\n const y0 = p.y - yDiff;\n const x1 = p.x + xDiff;\n const y1 = p.y + yDiff;\n d.push(`L${x0},${y0}`);\n d.push(\n `C${x0 + offsetX},${y0 + offsetY} ${x1 + offsetX},${y1 + offsetY} ${x1},${y1}`\n );\n }\n }\n d.push(`L${end.x},${end.y}`);\n }\n return d.join(\"\");\n }\n\n return lineFunction(points)!;\n}\n\nfunction getOffsets(\n start: NodePosition,\n end: NodePosition,\n offset: number\n): NodePosition {\n if (!offset) {\n return { x: 0, y: 0 };\n }\n const { x: x0, y: y0 } = start;\n const { x: x1, y: y1 } = end;\n const distance = Math.sqrt(Math.pow(x1 - x0, 2) + Math.pow(y1 - y0, 2));\n const ratio = offset / distance;\n return {\n x: (x1 - x0) * ratio,\n y: (y1 - y0) * ratio,\n };\n}\n","import type { FullRectTuple, PartialRectTuple } from \"../interfaces\";\n\nexport function extractPartialRectTuple(\n value: PartialRectTuple\n): FullRectTuple {\n if (Array.isArray(value)) {\n const v0 = value[0];\n const v1 = value.length > 1 ? value[1]! : v0;\n const v2 = value.length > 2 ? value[2]! : v0;\n const v3 = value.length > 3 ? value[3]! : v1;\n return [v0, v1, v2, v3];\n }\n return new Array(4).fill(value) as FullRectTuple;\n}\n"],"names":["doTwoNodesOverlap","a","b","paddingA","paddingB","A","getNodesWithPadding","B","left","Math","min","x","width","right","max","top","y","height","bottom","node","padding","getDirectLinePoints","source","target","parallelGap","edgeView","hasExitPosition","exitPosition","hasEntryPosition","entryPosition","p0","p1","xDiff","yDiff","dx","dy","angle","atan2","cos","PI","sin","line","sourceIntersections","getIntersections","length","targetIntersections","rect","vertices","possibleLines","i","push","intersections","item","intersection","intersect","MarkerComponent","_ref","Component","id","type","strokeColor","EntityRelationZeroOrOneMarker","EntityRelationZeroOrManyMarker","CircleMarker","ArrowMarker","React","_ref2","viewBox","refX","refY","overflow","markerWidth","r","markerHeight","stroke","fill","cx","cy","_ref3","orient","strokeLinejoin","d","strokeWidth","_ref4","_ref5","MINIMAL_OFFSET","getPolyLinePoints","sourceDirection","targetDirection","sourcePosition","targetPosition","getCoordinates","controls","reverseControls","sourceIsVertical","horizontal","vertical","horizontalSign","verticalSign","horizontalPosition","verticalPosition","defaultControlX","defaultControlY","controlY0","controlY1","middleY","middleX","sourceExtendX","sign","start","end","startPosition","endPosition","axis","oppositeAxis","around","nonAround","aroundPosition","nonAroundPosition","aroundSign","targetSign","size","oppositeSize","targetEdge","sourceEdge","targetControl","sourceControl","oppositeIsStraight","middle","targetOppositeSign","sourceOppositeControl","targetOppositeControl","abs","oppositeMiddle","reverse","direction","position","x1","y1","x2","y2","x3","y3","x4","y4","denominator","ua","ub","curveLine","points","curveType","startOffset","endOffset","jumpsMap","Array","isArray","curveFactory","curveLinear","curveBumpX","curveBumpY","curveMonotoneX","curveMonotoneY","curveNatural","curveBasis","startOffsets","getOffsets","endOffsets","lineFunction","index","curve","jump","get","verticalAngle","offsetX","radius","offsetY","p","jumpPoints","x0","y0","join","offset","ratio","sqrt","pow","extractPartialRectTuple","value","v0","v1"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"chunks/6730.b6d7107a.js","mappings":"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","sources":["webpack:///./src/diagram/processors/doTwoNodesOverlap.ts","webpack:///./src/diagram/lines/getDirectLinePoints.ts","webpack:///./src/diagram/MarkerComponent.tsx","webpack:///./src/diagram/lines/getPolyLinePoints.ts","webpack:///./src/diagram/lines/intersect.ts","webpack:///./src/diagram/lines/curveLine.ts","webpack:///./src/diagram/processors/extractPartialRectTuple.ts"],"sourcesContent":["import type { NodeRect } from \"../interfaces\";\n\nexport function doTwoNodesOverlap(\n a: NodeRect,\n b: NodeRect,\n paddingA: number,\n paddingB: number\n): boolean {\n const A = paddingA ? getNodesWithPadding(a, paddingA) : a;\n const B = paddingB ? getNodesWithPadding(b, paddingB) : b;\n const left = Math.min(A.x - A.width / 2, B.x - B.width / 2);\n const right = Math.max(A.x + A.width / 2, B.x + B.width / 2);\n const top = Math.min(A.y - A.height / 2, B.y - B.height / 2);\n const bottom = Math.max(A.y + A.height / 2, B.y + B.height / 2);\n return right - left < A.width + B.width && bottom - top < A.height + B.height;\n}\n\nfunction getNodesWithPadding(node: NodeRect, padding: number) {\n return {\n x: node.x - node.width / 2 - padding,\n y: node.y - node.height / 2 - padding,\n width: node.width + padding * 2,\n height: node.height + padding * 2,\n };\n}\n","import type { EdgeView } from \"../../draw-canvas/interfaces\";\nimport type { NodePosition, NodeRect, PositionTuple } from \"../interfaces\";\nimport { doTwoNodesOverlap } from \"../processors/doTwoNodesOverlap\";\nimport { intersect } from \"./intersect\";\n\ntype LineTuple = [start: PositionTuple, end: PositionTuple];\n\nexport function getDirectLinePoints(\n source: NodeRect,\n target: NodeRect,\n parallelGap?: number,\n edgeView?: EdgeView\n): NodePosition[] | null {\n const hasExitPosition = !!edgeView?.exitPosition;\n const hasEntryPosition = !!edgeView?.entryPosition;\n\n // Ignore if two nodes are the same.\n // Ignore if two nodes overlap and no entry nor exit position.\n if (\n source === target ||\n (doTwoNodesOverlap(source, target, 0, 0) &&\n !(hasExitPosition || hasEntryPosition))\n ) {\n return null;\n }\n\n let p0: PositionTuple;\n let p1: PositionTuple;\n\n let xDiff = 0;\n let yDiff = 0;\n\n if (parallelGap) {\n const dx = target.x - source.x;\n const dy = target.y - source.y;\n const angle = Math.atan2(dy, dx);\n xDiff = (parallelGap / 2) * Math.cos(angle + Math.PI / 2);\n yDiff = (parallelGap / 2) * Math.sin(angle + Math.PI / 2);\n }\n\n const line: LineTuple = [\n hasExitPosition\n ? [\n source.x + (edgeView!.exitPosition!.x - 0.5) * source.width,\n source.y + (edgeView!.exitPosition!.y - 0.5) * source.height,\n ]\n : [source.x + xDiff, source.y + yDiff],\n hasEntryPosition\n ? [\n target.x + (edgeView!.entryPosition!.x - 0.5) * target.width,\n target.y + (edgeView!.entryPosition!.y - 0.5) * target.height,\n ]\n : [target.x + xDiff, target.y + yDiff],\n ];\n\n if (hasExitPosition) {\n p0 = line[0];\n } else {\n const sourceIntersections = getIntersections(source, line);\n // Todo: handle when more than one intersection\n if (sourceIntersections.length > 0) {\n p0 = sourceIntersections[0];\n } else {\n p0 = [source.x, source.y];\n }\n }\n\n if (hasEntryPosition) {\n p1 = line[1];\n } else {\n const targetIntersections = getIntersections(target, line);\n // Todo: handle when more than one intersection\n if (targetIntersections.length > 0) {\n p1 = targetIntersections[0];\n } else {\n p1 = [target.x, target.y];\n }\n }\n\n return [\n { x: p0[0], y: p0[1] },\n { x: p1[0], y: p1[1] },\n ];\n}\n\nfunction getIntersections(rect: NodeRect, line: LineTuple) {\n const vertices: PositionTuple[] = [\n [rect.x - rect.width / 2, rect.y - rect.height / 2],\n [rect.x + rect.width / 2, rect.y - rect.height / 2],\n [rect.x + rect.width / 2, rect.y + rect.height / 2],\n [rect.x - rect.width / 2, rect.y + rect.height / 2],\n ];\n const possibleLines: [start: PositionTuple, end: PositionTuple][] = [];\n for (let i = 0; i < 4; i++) {\n possibleLines.push([vertices[i], vertices[(i + 1) % 4]]);\n }\n const intersections: PositionTuple[] = [];\n for (const item of possibleLines) {\n const intersection = intersect(line[0], line[1], item[0], item[1]);\n if (intersection) {\n intersections.push(intersection);\n }\n }\n return intersections;\n}\n","import React from \"react\";\nimport type { LineMarkerType } from \"./interfaces\";\n\nexport interface MarkerComponentProps extends BaseMarkerComponentProps {\n type: LineMarkerType;\n}\n\nexport interface BaseMarkerComponentProps {\n id: string;\n strokeColor?: string;\n}\n\nexport function MarkerComponent({\n id,\n type,\n strokeColor,\n}: MarkerComponentProps): JSX.Element {\n let Component: (props: BaseMarkerComponentProps) => JSX.Element;\n\n switch (type) {\n case \"0..1\":\n Component = EntityRelationZeroOrOneMarker;\n break;\n case \"0..N\":\n Component = EntityRelationZeroOrManyMarker;\n break;\n case \"circle\":\n Component = CircleMarker;\n break;\n default:\n Component = ArrowMarker;\n }\n return <Component id={id} strokeColor={strokeColor} />;\n}\n\nfunction CircleMarker({\n id,\n strokeColor,\n}: BaseMarkerComponentProps): JSX.Element {\n const r = 3;\n const d = r * 3;\n return (\n <marker\n viewBox={`0 0 ${d} ${d}`}\n refX={r}\n refY={r}\n id={id}\n overflow=\"visible\"\n markerWidth={d}\n markerHeight={d}\n >\n <circle stroke=\"none\" fill={strokeColor} cx={r} cy={r} r={r} />\n </marker>\n );\n}\n\nfunction ArrowMarker({\n id,\n strokeColor,\n}: BaseMarkerComponentProps): JSX.Element {\n return (\n <marker\n id={id}\n viewBox=\"0 0 6 6\"\n refX={5}\n refY={3}\n markerWidth={6}\n markerHeight={6}\n orient=\"auto-start-reverse\"\n strokeLinejoin=\"round\"\n >\n <path\n d=\"M 0.5 0.5 L 5.5 3 L 0.5 5.5 z\"\n stroke={strokeColor}\n strokeWidth={1}\n fill={strokeColor}\n />\n </marker>\n );\n}\n\nfunction EntityRelationZeroOrOneMarker({\n id,\n strokeColor,\n}: BaseMarkerComponentProps): JSX.Element {\n return (\n <marker\n id={id}\n viewBox=\"0 0 21 11\"\n refX={0.5}\n refY={5.5}\n markerWidth={21}\n markerHeight={11}\n orient=\"auto-start-reverse\"\n >\n <path\n d=\"M 5.5 5.5 m 5 0 a 5 5 0 1 0 -10 0 a 5 5 0 1 0 10 0 M 15.5 0.5 V 10.5 M 10.5 5.5 H 20.5\"\n stroke={strokeColor}\n strokeWidth={1}\n fill=\"none\"\n />\n </marker>\n );\n}\n\nfunction EntityRelationZeroOrManyMarker({\n id,\n strokeColor,\n}: BaseMarkerComponentProps): JSX.Element {\n return (\n <marker\n id={id}\n viewBox=\"0 0 21 11\"\n refX={0.5}\n refY={5.5}\n markerWidth={21}\n markerHeight={11}\n orient=\"auto-start-reverse\"\n >\n <path\n d=\"M 5.5 5.5 m 5 0 a 5 5 0 1 0 -10 0 a 5 5 0 1 0 10 0 M 20.5 0.5 L 10.5 5.5 L 20.5 10.5 M 10.5 5.5 H 20.5\"\n stroke={strokeColor}\n strokeWidth={1}\n fill=\"none\"\n />\n </marker>\n );\n}\n","import type { Direction, NodePosition, NodeRect } from \"../interfaces\";\n\nconst MINIMAL_OFFSET = 20;\n\nexport function getPolyLinePoints(\n source: NodeRect,\n target: NodeRect,\n sourceDirection: Direction,\n targetDirection: Direction,\n sourcePosition: number,\n targetPosition: number\n): NodePosition[] {\n const p0 = getCoordinates(source, sourceDirection, sourcePosition);\n const p1 = getCoordinates(target, targetDirection, targetPosition);\n\n let controls: NodePosition[] = [];\n let reverseControls = false;\n\n const sourceIsVertical =\n sourceDirection === \"top\" || sourceDirection === \"bottom\";\n const targetIsVertical =\n targetDirection === \"top\" || targetDirection === \"bottom\";\n\n if (sourceIsVertical !== targetIsVertical) {\n // One is vertical and the other is horizontal\n let horizontal: NodeRect;\n let vertical: NodeRect;\n let horizontalSign: number;\n let verticalSign: number;\n let horizontalPosition: NodePosition;\n let verticalPosition: NodePosition;\n if (sourceIsVertical) {\n horizontal = target;\n vertical = source;\n horizontalSign = targetDirection === \"right\" ? 1 : -1;\n verticalSign = sourceDirection === \"bottom\" ? 1 : -1;\n horizontalPosition = p1;\n verticalPosition = p0;\n } else {\n horizontal = source;\n vertical = target;\n horizontalSign = sourceDirection === \"right\" ? 1 : -1;\n verticalSign = targetDirection === \"bottom\" ? 1 : -1;\n horizontalPosition = p0;\n verticalPosition = p1;\n reverseControls = true;\n }\n\n const defaultControlX =\n horizontalPosition.x + MINIMAL_OFFSET * horizontalSign;\n const defaultControlY = verticalPosition.y + MINIMAL_OFFSET * verticalSign;\n\n if ((horizontal.x - vertical.x) * horizontalSign >= 0) {\n if ((vertical.y - horizontal.y) * verticalSign >= 0) {\n // ┌──────────────┐\n // ┌──┴──┐ ┌─────┐ │\n // │ S │ │ T ├─┘\n // └─────┘ └─────┘\n controls = [\n { x: verticalPosition.x, y: defaultControlY },\n { x: defaultControlX, y: defaultControlY },\n { x: defaultControlX, y: horizontalPosition.y },\n ];\n } else {\n const controlY0 =\n vertical.y + (vertical.height / 2 + MINIMAL_OFFSET) * verticalSign;\n const controlY1 =\n horizontal.y -\n (horizontal.height / 2 + MINIMAL_OFFSET) * verticalSign;\n if ((controlY1 - controlY0) * verticalSign >= 0) {\n // ┌─────┐\n // │ T ├─┐\n // └─────┘ │\n // ┌────────┘\n // ┌──┴──┐\n // │ S │\n // └─────┘\n const middleY = (controlY0 + controlY1) / 2;\n controls = [\n { x: verticalPosition.x, y: middleY },\n { x: defaultControlX, y: middleY },\n { x: defaultControlX, y: horizontalPosition.y },\n ];\n } else {\n // ┌─────┐\n // ┌────┐ │ T ├─┐\n // ┌──┴──┐ │ └─────┘ │\n // │ S │ └─────────┘\n // └─────┘\n const middleX =\n (vertical.x +\n (vertical.width / 2) * horizontalSign +\n horizontal.x -\n (horizontal.width / 2) * horizontalSign) /\n 2;\n controls = [\n { x: verticalPosition.x, y: controlY0 },\n { x: middleX, y: controlY0 },\n { x: middleX, y: controlY1 },\n { x: defaultControlX, y: controlY1 },\n { x: defaultControlX, y: horizontalPosition.y },\n ];\n }\n }\n } else if ((horizontalPosition.y - defaultControlY) * verticalSign >= 0) {\n if ((verticalPosition.x - defaultControlX) * horizontalSign >= 0) {\n // ┌─────┐\n // ┌──┤ T │\n // │ └─────┘\n // ┌──┴──┐\n // │ S │\n // └─────┘\n controls = [{ x: verticalPosition.x, y: horizontalPosition.y }];\n } else {\n // ┌─────┐\n // │ T ├─┐\n // └─────┘ │\n // ┌─┘\n // ┌──┴──┐\n // │ S │\n // └─────┘\n const controlY0 =\n vertical.y + (vertical.height / 2 + MINIMAL_OFFSET) * verticalSign;\n const controlY1 =\n horizontal.y -\n (horizontal.height / 2 + MINIMAL_OFFSET) * verticalSign;\n const middleY = (controlY0 + controlY1) / 2;\n controls = [\n { x: verticalPosition.x, y: middleY },\n { x: defaultControlX, y: middleY },\n { x: defaultControlX, y: horizontalPosition.y },\n ];\n }\n } else {\n const sourceExtendX =\n vertical.x - (vertical.width / 2 + MINIMAL_OFFSET) * horizontalSign;\n if ((sourceExtendX - defaultControlX) * horizontalSign >= 0) {\n // ┌────┐\n // │ ┌──┴──┐\n // │ │ S │\n // ┌─────┐ │ └─────┘\n // │ T ├─┘\n // └─────┘\n const middleX = (sourceExtendX + defaultControlX) / 2;\n controls = [\n { x: verticalPosition.x, y: defaultControlY },\n { x: middleX, y: defaultControlY },\n { x: middleX, y: horizontalPosition.y },\n ];\n } else {\n // ┌────┐\n // │ ┌──┴──┐\n // │ │ S │\n // │ └─────┘\n // └───┐\n // ┌─────┐ │\n // │ T ├─┘\n // └─────┘\n const middleY =\n (vertical.y -\n (vertical.height / 2) * verticalSign +\n horizontal.y +\n (horizontal.height / 2) * verticalSign) /\n 2;\n controls = [\n { x: verticalPosition.x, y: defaultControlY },\n { x: sourceExtendX, y: defaultControlY },\n { x: sourceExtendX, y: middleY },\n { x: defaultControlX, y: middleY },\n { x: defaultControlX, y: horizontalPosition.y },\n ];\n }\n }\n } else if (sourceDirection === targetDirection) {\n // Same direction\n const sign =\n sourceDirection === \"bottom\" || sourceDirection === \"right\" ? 1 : -1;\n let start: NodeRect;\n let end: NodeRect;\n let startPosition: NodePosition;\n let endPosition: NodePosition;\n const axis = sourceIsVertical ? \"y\" : \"x\";\n const oppositeAxis = sourceIsVertical ? \"x\" : \"y\";\n if (target[axis] < source[axis]) {\n start = target;\n end = source;\n startPosition = p1;\n endPosition = p0;\n reverseControls = sign === 1;\n } else {\n start = source;\n end = target;\n startPosition = p0;\n endPosition = p1;\n reverseControls = sign !== 1;\n }\n const perpendicular =\n target[oppositeAxis] < source[oppositeAxis] ? source : target;\n let around: NodeRect;\n let nonAround: NodeRect;\n let aroundPosition: NodePosition;\n let nonAroundPosition: NodePosition;\n if (sign === 1) {\n around = end;\n nonAround = start;\n aroundPosition = endPosition;\n nonAroundPosition = startPosition;\n } else {\n around = start;\n nonAround = end;\n aroundPosition = startPosition;\n nonAroundPosition = endPosition;\n }\n const aroundSign = around === perpendicular ? 1 : -1;\n if (sourceIsVertical) {\n const defaultControlX =\n around.x - (around.width / 2 + MINIMAL_OFFSET) * aroundSign;\n const defaultControlY = aroundPosition.y + MINIMAL_OFFSET * sign;\n if ((defaultControlX - nonAroundPosition.x) * aroundSign >= 0) {\n // ┌─────────┐\n // │ ┌──┴──┐\n // │ │ T │\n // ┌──┴──┐ └─────┘\n // │ S │\n // └─────┘\n controls = [\n { x: nonAroundPosition.x, y: defaultControlY },\n { x: aroundPosition.x, y: defaultControlY },\n ];\n } else {\n // ┌────┐\n // │ ┌──┴──┐\n // │ │ T │\n // │ └─────┘\n // └─┐\n // ┌──┴──┐\n // │ S │\n // └─────┘\n const middleY =\n (nonAround.y +\n (nonAround.height / 2) * sign +\n around.y -\n (around.height / 2) * sign) /\n 2;\n controls = [\n { x: nonAroundPosition.x, y: middleY },\n { x: defaultControlX, y: middleY },\n { x: defaultControlX, y: defaultControlY },\n { x: aroundPosition.x, y: defaultControlY },\n ];\n }\n } else {\n const defaultControlX = aroundPosition.x + MINIMAL_OFFSET * sign;\n const defaultControlY =\n around.y - (around.height / 2 + MINIMAL_OFFSET) * aroundSign;\n if ((defaultControlY - nonAroundPosition.y) * aroundSign >= 0) {\n // ┌─────┐\n // ┌─────────┤ T │\n // │ ┌─────┐ └─────┘\n // └─┤ S │\n // └─────┘\n controls = [\n { x: defaultControlX, y: nonAroundPosition.y },\n { x: defaultControlX, y: aroundPosition.y },\n ];\n } else {\n // ┌─────────┐\n // │ ┌─────┐ │ ┌─────┐\n // └─┤ S │ └─┤ T │\n // └─────┘ └─────┘\n const middleX =\n (nonAround.x +\n (nonAround.width / 2) * sign +\n around.x -\n (around.width / 2) * sign) /\n 2;\n controls = [\n { x: middleX, y: nonAroundPosition.y },\n { x: middleX, y: defaultControlY },\n { x: defaultControlX, y: defaultControlY },\n { x: defaultControlX, y: aroundPosition.y },\n ];\n }\n }\n } else {\n // Opposite direction\n const targetSign =\n targetDirection === \"bottom\" || targetDirection === \"right\" ? 1 : -1;\n let axis: \"x\" | \"y\";\n let oppositeAxis: \"x\" | \"y\";\n let size: \"width\" | \"height\";\n let oppositeSize: \"width\" | \"height\";\n if (sourceIsVertical) {\n axis = \"y\";\n oppositeAxis = \"x\";\n size = \"height\";\n oppositeSize = \"width\";\n } else {\n axis = \"x\";\n oppositeAxis = \"y\";\n size = \"width\";\n oppositeSize = \"height\";\n }\n const targetEdge = target[axis] + (target[size] / 2) * targetSign;\n const sourceEdge = source[axis] - (source[size] / 2) * targetSign;\n const targetControl = targetEdge + MINIMAL_OFFSET * targetSign;\n const sourceControl = sourceEdge - MINIMAL_OFFSET * targetSign;\n const oppositeIsStraight = p0[oppositeAxis] === p1[oppositeAxis];\n if ((sourceControl - targetControl) * targetSign >= 0) {\n const middle = (sourceControl + targetControl) / 2;\n if (oppositeIsStraight) {\n // Straight line\n // ┌─────┐\n // │ T │\n // └──┬──┘\n // │\n // ┌──┴──┐\n // │ S │\n // └─────┘\n controls = [];\n } else {\n // ┌─────┐\n // │ T │\n // └──┬──┘\n // ┌───┘\n // ┌──┴──┐\n // │ S │\n // └─────┘\n controls = [\n { [oppositeAxis]: p0[oppositeAxis], [axis]: middle },\n { [oppositeAxis]: p1[oppositeAxis], [axis]: middle },\n ] as unknown[] as NodePosition[];\n }\n } else if (\n oppositeIsStraight &&\n (sourceEdge - targetEdge) * targetSign >= 0\n ) {\n // Straight line (very close)\n // ┌─────┐\n // │ T │\n // └──┬──┘\n // ┌──┴──┐\n // │ S │\n // └─────┘\n controls = [];\n } else {\n const targetOppositeSign =\n target[oppositeAxis] < source[oppositeAxis] ? -1 : 1;\n const sourceOppositeControl =\n source[oppositeAxis] +\n (source[oppositeSize] / 2 + MINIMAL_OFFSET) * targetOppositeSign;\n const targetOppositeControl =\n target[oppositeAxis] -\n (target[oppositeSize] / 2 + MINIMAL_OFFSET) * targetOppositeSign;\n if (\n (targetOppositeControl - sourceOppositeControl) * targetOppositeSign >=\n 0 ||\n Math.abs((sourceControl - targetControl) * targetSign) < MINIMAL_OFFSET\n ) {\n // ┌─────┐\n // ┌────┐ │ T │\n // ┌──┴──┐ │ └──┬──┘\n // │ S │ └────┘\n // └─────┘\n const oppositeMiddle =\n (sourceOppositeControl + targetOppositeControl) / 2;\n controls = [\n { [oppositeAxis]: p0[oppositeAxis], [axis]: sourceControl },\n { [oppositeAxis]: oppositeMiddle, [axis]: sourceControl },\n { [oppositeAxis]: oppositeMiddle, [axis]: targetControl },\n { [oppositeAxis]: p1[oppositeAxis], [axis]: targetControl },\n ] as unknown[] as NodePosition[];\n } else {\n // ┌────┐\n // ┌──┴──┐ │\n // │ S │ │\n // └─────┘ │\n // ┌─────────┘\n // │ ┌─────┐\n // │ │ T │\n // │ └──┬──┘\n // └────┘\n const middle =\n (source[axis] +\n (source[size] / 2) * targetSign +\n target[axis] -\n (target[size] / 2) * targetSign) /\n 2;\n controls = [\n { [oppositeAxis]: p0[oppositeAxis], [axis]: sourceControl },\n { [oppositeAxis]: sourceOppositeControl, [axis]: sourceControl },\n { [oppositeAxis]: sourceOppositeControl, [axis]: middle },\n { [oppositeAxis]: targetOppositeControl, [axis]: middle },\n { [oppositeAxis]: targetOppositeControl, [axis]: targetControl },\n { [oppositeAxis]: p1[oppositeAxis], [axis]: targetControl },\n ] as unknown[] as NodePosition[];\n }\n }\n }\n\n if (reverseControls) {\n controls.reverse();\n }\n\n return [p0, ...controls, p1] as NodePosition[];\n}\n\nfunction getCoordinates(\n node: NodeRect,\n direction: Direction,\n position: number\n): NodePosition {\n const { x, y, width, height } = node;\n switch (direction) {\n case \"top\":\n return {\n x: x - width / 2 + width * position,\n y: y - height / 2,\n };\n case \"bottom\":\n return {\n x: x - width / 2 + width * position,\n y: y + height / 2,\n };\n case \"left\":\n return {\n x: x - width / 2,\n y: y - height / 2 + height * position,\n };\n case \"right\":\n return {\n x: x + width / 2,\n y: y - height / 2 + height * position,\n };\n }\n}\n","import type { PositionTuple } from \"../interfaces\";\n\n// https://paulbourke.net/geometry/pointlineplane/javascript.txt\nexport function intersect(\n [x1, y1]: PositionTuple,\n [x2, y2]: PositionTuple,\n [x3, y3]: PositionTuple,\n [x4, y4]: PositionTuple\n): null | PositionTuple {\n // Check if none of the lines are of length 0\n if ((x1 === x2 && y1 === y2) || (x3 === x4 && y3 === y4)) {\n return null;\n }\n\n const denominator = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);\n\n // Lines are parallel\n if (denominator === 0) {\n return null;\n }\n\n const ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator;\n const ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denominator;\n\n // is the intersection along the segments\n if (ua < 0 || ua > 1 || ub < 0 || ub > 1) {\n return null;\n }\n\n // Return a object with the x and y coordinates of the intersection\n const x = x1 + ua * (x2 - x1);\n const y = y1 + ua * (y2 - y1);\n\n return [x, y];\n}\n","import {\n curveLinear,\n line,\n curveBasis,\n curveBumpX,\n curveBumpY,\n type CurveFactory,\n curveMonotoneX,\n curveNatural,\n curveMonotoneY,\n} from \"d3-shape\";\nimport type { CurveType, NodePosition } from \"../interfaces\";\nimport type { LineSegmentJumps } from \"../../draw-canvas/interfaces\";\n\n/**\n * Generate Line from points\n */\nexport function curveLine(\n points: Array<NodePosition> | null | undefined,\n curveType: CurveType | undefined,\n startOffset: number,\n endOffset: number,\n jumpsMap?: Map<number, LineSegmentJumps> | null\n): string {\n if (!Array.isArray(points)) {\n return \"\";\n }\n let curveFactory: CurveFactory;\n switch (curveType) {\n case \"curveLinear\":\n curveFactory = curveLinear;\n break;\n case \"curveBumpX\":\n curveFactory = curveBumpX;\n break;\n case \"curveBumpY\":\n curveFactory = curveBumpY;\n break;\n case \"curveMonotoneX\":\n curveFactory = curveMonotoneX;\n break;\n case \"curveMonotoneY\":\n curveFactory = curveMonotoneY;\n break;\n case \"curveNatural\":\n curveFactory = curveNatural;\n break;\n default:\n curveFactory = curveBasis;\n }\n const startOffsets = getOffsets(points[1], points[0], startOffset);\n const endOffsets = getOffsets(\n points[points.length - 2],\n points[points.length - 1],\n endOffset\n );\n const lineFunction = line<NodePosition>()\n .x(\n (d, index) =>\n d.x -\n (index === 0\n ? startOffsets.x\n : index === points.length - 1\n ? endOffsets.x\n : 0)\n )\n .y(\n (d, index) =>\n d.y -\n (index === 0\n ? startOffsets.y\n : index === points.length - 1\n ? endOffsets.y\n : 0)\n )\n .curve(curveFactory);\n\n if (jumpsMap && curveType == \"curveLinear\") {\n const d: string[] = [];\n for (let i = 0; i < points.length - 1; i++) {\n const start = points[i];\n const end = points[i + 1];\n if (i === 0) {\n d.push(`M${start.x},${start.y}`);\n }\n // 处理交叉跨线点\n const jump = jumpsMap.get(i);\n if (jump) {\n // 跨线点近似为一段半圆,参考 draw.io 使用三次贝赛尔曲线实现。\n // 一条 jump 记录中所有的 jumpPoints 都在同一线段上,因此角度一致、尺寸一致。\n const dx = end.x - start.x;\n const dy = end.y - start.y;\n const angle = Math.atan2(dy, dx);\n const direction = Math.abs(angle) <= Math.PI / 2 ? -1 : 1;\n const verticalAngle = angle + (Math.PI / 2) * direction;\n const offsetX = jump.radius * 1.3 * Math.cos(verticalAngle);\n const offsetY = jump.radius * 1.3 * Math.sin(verticalAngle);\n const xDiff = jump.radius * Math.cos(angle);\n const yDiff = jump.radius * Math.sin(angle);\n for (const p of jump.jumpPoints) {\n const x0 = p.x - xDiff;\n const y0 = p.y - yDiff;\n const x1 = p.x + xDiff;\n const y1 = p.y + yDiff;\n d.push(`L${x0},${y0}`);\n d.push(\n `C${x0 + offsetX},${y0 + offsetY} ${x1 + offsetX},${y1 + offsetY} ${x1},${y1}`\n );\n }\n }\n d.push(`L${end.x},${end.y}`);\n }\n return d.join(\"\");\n }\n\n return lineFunction(points)!;\n}\n\nfunction getOffsets(\n start: NodePosition,\n end: NodePosition,\n offset: number\n): NodePosition {\n if (!offset) {\n return { x: 0, y: 0 };\n }\n const { x: x0, y: y0 } = start;\n const { x: x1, y: y1 } = end;\n const distance = Math.sqrt(Math.pow(x1 - x0, 2) + Math.pow(y1 - y0, 2));\n const ratio = offset / distance;\n return {\n x: (x1 - x0) * ratio,\n y: (y1 - y0) * ratio,\n };\n}\n","import type { FullRectTuple, PartialRectTuple } from \"../interfaces\";\n\nexport function extractPartialRectTuple(\n value: PartialRectTuple\n): FullRectTuple {\n if (Array.isArray(value)) {\n const v0 = value[0];\n const v1 = value.length > 1 ? value[1]! : v0;\n const v2 = value.length > 2 ? value[2]! : v0;\n const v3 = value.length > 3 ? value[3]! : v1;\n return [v0, v1, v2, v3];\n }\n return new Array(4).fill(value) as FullRectTuple;\n}\n"],"names":["doTwoNodesOverlap","a","b","paddingA","paddingB","A","getNodesWithPadding","B","left","Math","min","x","width","right","max","top","y","height","bottom","node","padding","getDirectLinePoints","source","target","parallelGap","edgeView","hasExitPosition","exitPosition","hasEntryPosition","entryPosition","p0","p1","xDiff","yDiff","dx","dy","angle","atan2","cos","PI","sin","line","sourceIntersections","getIntersections","length","targetIntersections","rect","vertices","possibleLines","i","push","intersections","item","intersection","intersect","MarkerComponent","_ref","Component","id","type","strokeColor","EntityRelationZeroOrOneMarker","EntityRelationZeroOrManyMarker","CircleMarker","ArrowMarker","React","_ref2","viewBox","refX","refY","overflow","markerWidth","r","markerHeight","stroke","fill","cx","cy","_ref3","orient","strokeLinejoin","d","strokeWidth","_ref4","_ref5","MINIMAL_OFFSET","getPolyLinePoints","sourceDirection","targetDirection","sourcePosition","targetPosition","getCoordinates","controls","reverseControls","sourceIsVertical","horizontal","vertical","horizontalSign","verticalSign","horizontalPosition","verticalPosition","defaultControlX","defaultControlY","controlY0","controlY1","middleY","middleX","sourceExtendX","sign","start","end","startPosition","endPosition","axis","oppositeAxis","around","nonAround","aroundPosition","nonAroundPosition","aroundSign","targetSign","size","oppositeSize","targetEdge","sourceEdge","targetControl","sourceControl","oppositeIsStraight","middle","targetOppositeSign","sourceOppositeControl","targetOppositeControl","abs","oppositeMiddle","reverse","direction","position","x1","y1","x2","y2","x3","y3","x4","y4","denominator","ua","ub","curveLine","points","curveType","startOffset","endOffset","jumpsMap","Array","isArray","curveFactory","curveLinear","curveBumpX","curveBumpY","curveMonotoneX","curveMonotoneY","curveNatural","curveBasis","startOffsets","getOffsets","endOffsets","lineFunction","index","curve","jump","get","verticalAngle","offsetX","radius","offsetY","p","jumpPoints","x0","y0","join","offset","ratio","sqrt","pow","extractPartialRectTuple","value","v0","v1"],"sourceRoot":""}
|