@next-bricks/diagram 0.68.4 → 0.68.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/bricks.json +2 -2
  2. package/dist/chunks/3440.4132cdb6.js +2 -0
  3. package/dist/chunks/3440.4132cdb6.js.map +1 -0
  4. package/dist/chunks/3654.1ca3854c.js +3 -0
  5. package/dist/chunks/3654.1ca3854c.js.map +1 -0
  6. package/dist/chunks/3746.3c082d43.js +2 -0
  7. package/dist/chunks/3746.3c082d43.js.map +1 -0
  8. package/dist/chunks/577.be8fdde1.js +2 -0
  9. package/dist/chunks/577.be8fdde1.js.map +1 -0
  10. package/dist/chunks/editable-label.667b04d5.js +3 -0
  11. package/dist/chunks/editable-label.667b04d5.js.map +1 -0
  12. package/dist/chunks/eo-diagram.78450578.js +2 -0
  13. package/dist/chunks/{eo-diagram.ccbb3f33.js.map → eo-diagram.78450578.js.map} +1 -1
  14. package/dist/chunks/eo-display-canvas.2a43ce91.js +2 -0
  15. package/dist/chunks/{eo-display-canvas.969c8dc2.js.map → eo-display-canvas.2a43ce91.js.map} +1 -1
  16. package/dist/chunks/eo-draw-canvas.580045be.js +2 -0
  17. package/dist/chunks/{eo-draw-canvas.2fb409f0.js.map → eo-draw-canvas.580045be.js.map} +1 -1
  18. package/dist/chunks/experimental-node.2f4d802a.js +2 -0
  19. package/dist/chunks/experimental-node.2f4d802a.js.map +1 -0
  20. package/dist/chunks/main.a4e99faa.js +2 -0
  21. package/dist/chunks/{main.03dc5db0.js.map → main.a4e99faa.js.map} +1 -1
  22. package/dist/examples.json +3 -3
  23. package/dist/index.680276ff.js +2 -0
  24. package/dist/{index.cd3db676.js.map → index.680276ff.js.map} +1 -1
  25. package/dist/manifest.json +175 -175
  26. package/package.json +3 -3
  27. package/dist/chunks/3233.c247dfc0.js +0 -3
  28. package/dist/chunks/3233.c247dfc0.js.map +0 -1
  29. package/dist/chunks/551.fd9aaa4f.js +0 -2
  30. package/dist/chunks/551.fd9aaa4f.js.map +0 -1
  31. package/dist/chunks/5819.071430a0.js +0 -2
  32. package/dist/chunks/5819.071430a0.js.map +0 -1
  33. package/dist/chunks/9711.ecaa0666.js +0 -2
  34. package/dist/chunks/9711.ecaa0666.js.map +0 -1
  35. package/dist/chunks/editable-label.595d319c.js +0 -3
  36. package/dist/chunks/editable-label.595d319c.js.map +0 -1
  37. package/dist/chunks/eo-diagram.ccbb3f33.js +0 -2
  38. package/dist/chunks/eo-display-canvas.969c8dc2.js +0 -2
  39. package/dist/chunks/eo-draw-canvas.2fb409f0.js +0 -2
  40. package/dist/chunks/experimental-node.e8e2498e.js +0 -2
  41. package/dist/chunks/experimental-node.e8e2498e.js.map +0 -1
  42. package/dist/chunks/main.03dc5db0.js +0 -2
  43. package/dist/index.cd3db676.js +0 -2
  44. /package/dist/chunks/{3233.c247dfc0.js.LICENSE.txt → 3654.1ca3854c.js.LICENSE.txt} +0 -0
  45. /package/dist/chunks/{editable-label.595d319c.js.LICENSE.txt → editable-label.667b04d5.js.LICENSE.txt} +0 -0
package/dist/bricks.json CHANGED
@@ -5,8 +5,8 @@
5
5
  "diagram.experimental-node"
6
6
  ],
7
7
  "elements": [
8
- "eo-diagram",
9
8
  "eo-draw-canvas",
9
+ "eo-diagram",
10
10
  "eo-display-canvas"
11
11
  ],
12
12
  "processors": [],
@@ -16,5 +16,5 @@
16
16
  "basic.lock-body-scroll"
17
17
  ]
18
18
  },
19
- "filePath": "bricks/diagram/dist/index.cd3db676.js"
19
+ "filePath": "bricks/diagram/dist/index.680276ff.js"
20
20
  }
@@ -0,0 +1,2 @@
1
+ "use strict";(globalThis.webpackChunk_next_bricks_diagram=globalThis.webpackChunk_next_bricks_diagram||[]).push([[3440],{883:(t,e,r)=>{r.d(e,{h:()=>o});var i=r(3016),n=r(9918);function o(t,e,r,n){const o=!(null==n||!n.exitPosition),s=!(null==n||!n.entryPosition);if(t===e||(0,i.w)(t,e,0,0)&&!o&&!s)return null;let y,x,a=0,c=0;if(r){const i=e.x-t.x,n=e.y-t.y,o=Math.atan2(n,i);a=r/2*Math.cos(o+Math.PI/2),c=r/2*Math.sin(o+Math.PI/2)}const l=[o?[t.x+(n.exitPosition.x-.5)*t.width,t.y+(n.exitPosition.y-.5)*t.height]:[t.x+a,t.y+c],s?[e.x+(n.entryPosition.x-.5)*e.width,e.y+(n.entryPosition.y-.5)*e.height]:[e.x+a,e.y+c]];if(o)y=l[0];else{const e=h(t,l);y=e.length>0?e[0]:[t.x,t.y]}if(s)x=l[1];else{const t=h(e,l);x=t.length>0?t[0]:[e.x,e.y]}return[{x:y[0],y:y[1]},{x:x[0],y:x[1]}]}function h(t,e){const r=[[t.x-t.width/2,t.y-t.height/2],[t.x+t.width/2,t.y-t.height/2],[t.x+t.width/2,t.y+t.height/2],[t.x-t.width/2,t.y+t.height/2]],i=[];for(let t=0;t<4;t++)i.push([r[t],r[(t+1)%4]]);const o=[];for(const t of i){const r=(0,n.y)(e[0],e[1],t[0],t[1]);r&&o.push(r)}return o}},3016:(t,e,r)=>{function i(t,e,r,i){const o=r?n(t,r):t,h=i?n(e,i):e,s=Math.min(o.x-o.width/2,h.x-h.width/2),y=Math.max(o.x+o.width/2,h.x+h.width/2),x=Math.min(o.y-o.height/2,h.y-h.height/2),a=Math.max(o.y+o.height/2,h.y+h.height/2);return y-s<o.width+h.width&&a-x<o.height+h.height}function n(t,e){return{x:t.x-t.width/2-e,y:t.y-t.height/2-e,width:t.width+2*e,height:t.height+2*e}}r.d(e,{w:()=>i})},4487:(t,e,r)=>{function i(t){if(Array.isArray(t)){const e=t[0],r=t.length>1?t[1]:e;return[e,r,t.length>2?t[2]:e,t.length>3?t[3]:r]}return new Array(4).fill(t)}r.d(e,{D:()=>i})},4928:(t,e,r)=>{r.d(e,{o:()=>n});const i=20;function n(t,e,r,n,h,s){const y=o(t,r,h),x=o(e,n,s);let a=[],c=!1;const l="top"===r||"bottom"===r;if(l!==("top"===n||"bottom"===n)){let o,h,s,u,f,d;l?(o=e,h=t,s="right"===n?1:-1,u="bottom"===r?1:-1,f=x,d=y):(o=t,h=e,s="right"===r?1:-1,u="bottom"===n?1:-1,f=y,d=x,c=!0);const g=f.x+i*s,k=d.y+i*u;if((o.x-h.x)*s>=0)if((h.y-o.y)*u>=0)a=[{x:d.x,y:k},{x:g,y:k},{x:g,y:f.y}];else{const t=h.y+(h.height/2+i)*u,e=o.y-(o.height/2+i)*u;if((e-t)*u>=0){const r=(t+e)/2;a=[{x:d.x,y:r},{x:g,y:r},{x:g,y:f.y}]}else{const r=(h.x+h.width/2*s+o.x-o.width/2*s)/2;a=[{x:d.x,y:t},{x:r,y:t},{x:r,y:e},{x:g,y:e},{x:g,y:f.y}]}}else if((f.y-k)*u>=0)if((d.x-g)*s>=0)a=[{x:d.x,y:f.y}];else{const t=(h.y+(h.height/2+i)*u+(o.y-(o.height/2+i)*u))/2;a=[{x:d.x,y:t},{x:g,y:t},{x:g,y:f.y}]}else{const t=h.x-(h.width/2+i)*s;if((t-g)*s>=0){const e=(t+g)/2;a=[{x:d.x,y:k},{x:e,y:k},{x:e,y:f.y}]}else{const e=(h.y-h.height/2*u+o.y+o.height/2*u)/2;a=[{x:d.x,y:k},{x:t,y:k},{x:t,y:e},{x:g,y:e},{x:g,y:f.y}]}}}else if(r===n){const n="bottom"===r||"right"===r?1:-1;let o,h,s,u;const f=l?"y":"x",d=l?"x":"y";let g,k,m,w;e[f]<t[f]?(o=e,h=t,s=x,u=y,c=1===n):(o=t,h=e,s=y,u=x,c=1!==n),1===n?(g=h,k=o,m=u,w=s):(g=o,k=h,m=s,w=u);const M=g===(e[d]<t[d]?t:e)?1:-1;if(l){const t=g.x-(g.width/2+i)*M,e=m.y+i*n;if((t-w.x)*M>=0)a=[{x:w.x,y:e},{x:m.x,y:e}];else{const r=(k.y+k.height/2*n+g.y-g.height/2*n)/2;a=[{x:w.x,y:r},{x:t,y:r},{x:t,y:e},{x:m.x,y:e}]}}else{const t=m.x+i*n,e=g.y-(g.height/2+i)*M;if((e-w.y)*M>=0)a=[{x:t,y:w.y},{x:t,y:m.y}];else{const r=(k.x+k.width/2*n+g.x-g.width/2*n)/2;a=[{x:r,y:w.y},{x:r,y:e},{x:t,y:e},{x:t,y:m.y}]}}}else{const r="bottom"===n||"right"===n?1:-1;let o,h,s,c;l?(o="y",h="x",s="height",c="width"):(o="x",h="y",s="width",c="height");const u=e[o]+e[s]/2*r,f=t[o]-t[s]/2*r,d=u+i*r,g=f-i*r,k=y[h]===x[h];if((g-d)*r>=0){const t=(g+d)/2;a=k?[]:[{[h]:y[h],[o]:t},{[h]:x[h],[o]:t}]}else if(k&&(f-u)*r>=0)a=[];else{const n=e[h]<t[h]?-1:1,l=t[h]+(t[c]/2+i)*n,u=e[h]-(e[c]/2+i)*n;if((u-l)*n>=0||Math.abs((g-d)*r)<i){const t=(l+u)/2;a=[{[h]:y[h],[o]:g},{[h]:t,[o]:g},{[h]:t,[o]:d},{[h]:x[h],[o]:d}]}else{const i=(t[o]+t[s]/2*r+e[o]-e[s]/2*r)/2;a=[{[h]:y[h],[o]:g},{[h]:l,[o]:g},{[h]:l,[o]:i},{[h]:u,[o]:i},{[h]:u,[o]:d},{[h]:x[h],[o]:d}]}}}return c&&a.reverse(),[y,...a,x]}function o(t,e,r){const{x:i,y:n,width:o,height:h}=t;switch(e){case"top":return{x:i-o/2+o*r,y:n-h/2};case"bottom":return{x:i-o/2+o*r,y:n+h/2};case"left":return{x:i-o/2,y:n-h/2+h*r};case"right":return{x:i+o/2,y:n-h/2+h*r}}}},5078:(t,e,r)=>{r.d(e,{c:()=>o});var i=r(8769),n=r.n(i);function o(t){let e,{id:r,type:i,strokeColor:o}=t;switch(i){case"0..1":e=y;break;case"0..N":e=x;break;case"circle":e=h;break;default:e=s}return n().createElement(e,{id:r,strokeColor:o})}function h(t){let{id:e,strokeColor:r}=t;return n().createElement("marker",{viewBox:"0 0 9 9",refX:3,refY:3,id:e,overflow:"visible",markerWidth:9,markerHeight:9},n().createElement("circle",{stroke:"none",fill:r,cx:3,cy:3,r:3}))}function s(t){let{id:e,strokeColor:r}=t;return n().createElement("marker",{id:e,viewBox:"0 0 6 6",refX:5,refY:3,markerWidth:6,markerHeight:6,orient:"auto-start-reverse",strokeLinejoin:"round"},n().createElement("path",{d:"M 0.5 0.5 L 5.5 3 L 0.5 5.5 z",stroke:r,strokeWidth:1,fill:r}))}function y(t){let{id:e,strokeColor:r}=t;return n().createElement("marker",{id:e,viewBox:"0 0 21 11",refX:.5,refY:5.5,markerWidth:21,markerHeight:11,orient:"auto-start-reverse"},n().createElement("path",{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",stroke:r,strokeWidth:1,fill:"none"}))}function x(t){let{id:e,strokeColor:r}=t;return n().createElement("marker",{id:e,viewBox:"0 0 21 11",refX:.5,refY:5.5,markerWidth:21,markerHeight:11,orient:"auto-start-reverse"},n().createElement("path",{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",stroke:r,strokeWidth:1,fill:"none"}))}},9698:(t,e,r)=>{r.d(e,{S:()=>x});var i=r(482),n=r(4643),o=r(3488),h=r(6066),s=r(4993),y=r(3269);function x(t,e,r,x,c){if(!Array.isArray(t))return"";let l;switch(e){case"curveLinear":l=i.A;break;case"curveBumpX":l=n.dJ;break;case"curveBumpY":l=n.kl;break;case"curveMonotoneX":l=o.G;break;case"curveMonotoneY":l=o.N;break;case"curveNatural":l=h.A;break;default:l=s.Ay}const u=a(t[1],t[0],r),f=a(t[t.length-2],t[t.length-1],x),d=(0,y.A)().x(((e,r)=>e.x-(0===r?u.x:r===t.length-1?f.x:0))).y(((e,r)=>e.y-(0===r?u.y:r===t.length-1?f.y:0))).curve(l);if(c&&"curveLinear"==e){const e=[];for(let r=0;r<t.length-1;r++){const i=t[r],n=t[r+1];0===r&&e.push(`M${i.x},${i.y}`);const o=c.get(r);if(o){const t=n.x-i.x,r=n.y-i.y,h=Math.atan2(r,t),s=Math.abs(h)<=Math.PI/2?-1:1,y=h+Math.PI/2*s,x=1.3*o.radius*Math.cos(y),a=1.3*o.radius*Math.sin(y),c=o.radius*Math.cos(h),l=o.radius*Math.sin(h);for(const t of o.jumpPoints){const r=t.x-c,i=t.y-l,n=t.x+c,o=t.y+l;e.push(`L${r},${i}`),e.push(`C${r+x},${i+a} ${n+x},${o+a} ${n},${o}`)}}e.push(`L${n.x},${n.y}`)}return e.join("")}return d(t)}function a(t,e,r){if(!r)return{x:0,y:0};const{x:i,y:n}=t,{x:o,y:h}=e,s=r/Math.sqrt(Math.pow(o-i,2)+Math.pow(h-n,2));return{x:(o-i)*s,y:(h-n)*s}}},9918:(t,e,r)=>{function i(t,e,r,i){let[n,o]=t,[h,s]=e,[y,x]=r,[a,c]=i;if(n===h&&o===s||y===a&&x===c)return null;const l=(c-x)*(h-n)-(a-y)*(s-o);if(0===l)return null;const u=((a-y)*(o-x)-(c-x)*(n-y))/l,f=((h-n)*(o-x)-(s-o)*(n-y))/l;return u<0||u>1||f<0||f>1?null:[n+u*(h-n),o+u*(s-o)]}r.d(e,{y:()=>i})}}]);
2
+ //# sourceMappingURL=3440.4132cdb6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunks/3440.4132cdb6.js","mappings":"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","sources":["webpack:///./src/diagram/lines/getDirectLinePoints.ts","webpack:///./src/diagram/processors/doTwoNodesOverlap.ts","webpack:///./src/diagram/processors/extractPartialRectTuple.ts","webpack:///./src/diagram/lines/getPolyLinePoints.ts","webpack:///./src/diagram/MarkerComponent.tsx","webpack:///./src/diagram/lines/curveLine.ts","webpack:///./src/diagram/lines/intersect.ts"],"sourcesContent":["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 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 { 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","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 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 {\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 { 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"],"names":["getDirectLinePoints","source","target","parallelGap","edgeView","hasExitPosition","exitPosition","hasEntryPosition","entryPosition","doTwoNodesOverlap","p0","p1","xDiff","yDiff","dx","x","dy","y","angle","Math","atan2","cos","PI","sin","line","width","height","sourceIntersections","getIntersections","length","targetIntersections","rect","vertices","possibleLines","i","push","intersections","item","intersection","intersect","a","b","paddingA","paddingB","A","getNodesWithPadding","B","left","min","right","max","top","bottom","node","padding","extractPartialRectTuple","value","Array","isArray","v0","v1","fill","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","MarkerComponent","_ref","Component","id","type","strokeColor","EntityRelationZeroOrOneMarker","EntityRelationZeroOrManyMarker","CircleMarker","ArrowMarker","React","_ref2","viewBox","refX","refY","overflow","markerWidth","r","markerHeight","stroke","cx","cy","_ref3","orient","strokeLinejoin","d","strokeWidth","_ref4","_ref5","curveLine","points","curveType","startOffset","endOffset","jumpsMap","curveFactory","curveLinear","curveBumpX","curveBumpY","curveMonotoneX","curveMonotoneY","curveNatural","curveBasis","startOffsets","getOffsets","endOffsets","lineFunction","index","curve","jump","get","verticalAngle","offsetX","radius","offsetY","p","jumpPoints","x0","y0","x1","y1","join","offset","ratio","sqrt","pow","x2","y2","x3","y3","x4","y4","denominator","ua","ub"],"sourceRoot":""}
@@ -0,0 +1,3 @@
1
+ /*! For license information please see 3654.1ca3854c.js.LICENSE.txt */
2
+ "use strict";(globalThis.webpackChunk_next_bricks_diagram=globalThis.webpackChunk_next_bricks_diagram||[]).push([[3654],{790:(e,t,n)=>{n.d(t,{y:()=>i});var o=n(8769),a=n.n(o);function i(e){let{lineId:t,rects:n,maskPrefix:o,renderedLineLabels:i}=e;const l=i.find((e=>e.lineId===t&&"center"===e.placement));if(!l)return null;const{lineRect:r}=l,s=(c=1e3,{left:(d=r).left-c,top:d.top-c,width:d.width+2e3,height:d.height+2e3});var d,c;return a().createElement("mask",{id:`${o}${t}`,x:s.left,y:s.top,width:s.width,height:s.height},a().createElement("rect",{x:s.left,y:s.top,width:s.width,height:s.height,fill:"white"}),n.map(((e,t)=>a().createElement("rect",{key:t,x:e.left,y:e.top,width:e.width,height:e.height,fill:"black"}))))}},821:(e,t,n)=>{n.d(t,{A:()=>r});var o=n(6758),a=n.n(o),i=n(935),l=n.n(i)()(a());l.push([e.id,":host{display:block;width:100%;height:100%;overflow:hidden}:host([hidden]){display:none}*{box-sizing:border-box}.diagram{width:100%;height:100%;position:relative;opacity:0}.diagram:focus{outline:none}.lines,\n.line-labels,\n.nodes{position:absolute;top:0;left:0}.line-labels{opacity:0}.ready{opacity:1}.diagram.ready.pannable{cursor:grab}.diagram.pannable.grabbing{cursor:grabbing}.nodes,\n.lines{transform-origin:0 0}.node,\n.line-label{position:absolute;visibility:hidden}.line-label{transform:translate(-50%,-50%);white-space:pre-line;width:max-content;text-align:center;line-height:1}.lines{pointer-events:none}.line.interactable{pointer-events:auto;cursor:default}.connect-line{position:fixed;top:0;left:0;right:0;bottom:0;pointer-events:none}.connect-line:not(.connecting){display:none}.line:not(.active) .active-bg{display:none}",""]);const r=l.toString()},1014:(e,t,n)=>{n.d(t,{m:()=>r});var o=n(8769),a=n.n(o),i=n(3373),l=n.n(i);function r(e){var t,n;let{line:{line:o,edge:i,d:r,markers:s},linePaths:d,lineMaskRects:c,maskPrefix:u,markerPrefix:f,activeLineMarkerPrefix:p,active:m,activeRelated:h,onLineClick:v,onLineDoubleClick:g}=e;const y=c.has(o.$id)?`url(#${u}${o.$id})`:void 0,{strokeColor:k,strokeWidth:b,interactStrokeWidth:w}={...o,...m?null===(t=o.overrides)||void 0===t?void 0:t.active:h?null===(n=o.overrides)||void 0===n?void 0:n.activeRelated:null},x=m?"active":h?"active-related":"default";let M,R;for(const e of s)e.variant===x&&("start"===e.placement?M=`url(#${f}${e.index})`:R=`url(#${f}${e.index})`);return a().createElement("g",{className:l()("line",{interactable:o.interactable,active:m,"active-related":h}),onClick:o.interactable?()=>{null==v||v({id:o.$id,edge:i})}:void 0,onDoubleClick:o.interactable?e=>{e.preventDefault(),e.stopPropagation(),null==g||g({id:o.$id,edge:i})}:void 0,style:{cursor:o.cursor}},o.interactable&&a().createElement("path",{d:r,fill:"none",stroke:"transparent",strokeWidth:w}),a().createElement("path",{ref:e=>d.set(o.$id,e),stroke:k,strokeWidth:b,d:r,fill:"none",markerStart:M,markerEnd:R,mask:y}),a().createElement("path",{stroke:"var(--palette-blue-3)",strokeWidth:b,d:r,fill:"none",className:"active-bg",markerStart:`url(#${p}start)`,markerEnd:`url(#${p}end)`,mask:y}))}},1553:(e,t,n)=>{n.d(t,{t:()=>r});var o=n(1030),a=n(1921);function i(e,t){return!!t&&(t.edgeType?[].concat(t.edgeType).includes(e.type):(0,a.checkIfByTransform)(t,{edge:e}))}var l=n(5222);function r(e,t){const n=[],r=new WeakMap,d=[];for(const v of null!=e?e:[]){var c,u;const{label:e,...g}=null!==(c=null==t?void 0:t.find((e=>i(v,e))))&&void 0!==c?c:{},y=a.__secret_internals.legacyDoTransform({edge:v},g);if(!1===(null==y?void 0:y.draw))continue;const k=(0,o.uniqueId)("line-"),b={strokeColor:l.mF,strokeWidth:l.VO,curveType:"polyline"===(null==y?void 0:y.type)?"curveLinear":l.KP,interactStrokeWidth:l.Ie,type:"auto",...y,label:e,$id:k};r.set(v,k);const w=[],x=null!==(u=b.markers)&&void 0!==u?u:b.arrow?[{placement:"end",type:"arrow"}]:[];for(const e of x){var f,p,m,h;const{placement:t,type:n}=e,o=null!=t?t:"end";let a,i;switch(n){case"0..1":case"0..N":i=21,a=n;break;default:i=1,a="arrow"}const l=i*b.strokeWidth,r=s({type:a,strokeColor:b.strokeColor},d);w.push({index:r,placement:o,type:a,variant:"default",offset:l});const c=s({type:a,strokeColor:null!==(f=null===(p=b.overrides)||void 0===p||null===(p=p.active)||void 0===p?void 0:p.strokeColor)&&void 0!==f?f:b.strokeColor},d);w.push({index:c,placement:o,type:a,variant:"active",offset:l});const u=s({type:a,strokeColor:null!==(m=null===(h=b.overrides)||void 0===h||null===(h=h.activeRelated)||void 0===h?void 0:h.strokeColor)&&void 0!==m?m:b.strokeColor},d);w.push({index:u,placement:o,type:a,variant:"active-related",offset:l})}n.push({line:b,markers:w,edge:v})}return{normalizedLines:n,normalizedLinesMap:r,markers:d}}function s(e,t){let n=(0,o.findIndex)(t,e);return-1===n&&(n=t.push(e)-1),n}},2579:(e,t,n)=>{n.d(t,{_:()=>u});var o=n(8769),a=n(1921),i=n(6330),l=n(1361),r=function(){var e=(0,i.A)((function*(e,t,n){return(yield l.http.post("api/gateway/cmdb.instance.PostSearchV3/v3/object/".concat(e,"/instance/_search"),t,n)).data}));return function(t,n,o){return e.apply(this,arguments)}}(),s=function(){var e=(0,i.A)((function*(e,t,n,o){return(yield l.http.put("api/gateway/cmdb.instance.UpdateInstanceV2/v2/object/".concat(e,"/instance/").concat(t),n,o)).data}));return function(t,n,o,a){return e.apply(this,arguments)}}(),d=function(){var e=(0,i.A)((function*(e,t,n){return(yield l.http.post("api/gateway/cmdb.instance.CreateInstance/v2/object/".concat(e,"/instance"),t,n)).data}));return function(t,n,o){return e.apply(this,arguments)}}();const c="GRAPH_USER_VIEW@EASYOPS";function u(e){const[t,n]=(0,o.useState)(!e),i=(0,o.useRef)(),[l,u]=(0,o.useState)(null),f=(0,o.useMemo)((()=>function(){let e=!1;const t=[];return async function(n){if(t.push(n),!e){let n;for(e=!0;n=t.shift();)try{await n()}catch(e){console.error(e)}e=!1}}}()),[]);return(0,o.useEffect)((()=>{!async function(){if(!e)return void n(!0);const{namespace:t,key:o}=e;if(!t||!o)return console.error("Namespace and key are required to save graph user view"),void n(!0);try{const e=(await r(c,{fields:["nodes"],query:{namespace:{$eq:t},key:{$eq:o}},page:1,page_size:30})).list;if(e.length>0){var l;const t=e[0],n=new Map(null===(l=t.nodes)||void 0===l?void 0:l.map((e=>[e.id,e])));i.current=t.instanceId,u(n)}else u(null)}catch(e){(0,a.handleHttpError)(e)}finally{n(!0)}}()}),[e]),{userViewReady:t,userViewNodesMap:l,saveUserView:(0,o.useCallback)((t=>{const{namespace:n,key:o}=null!=e?e:{};n&&o&&f((async()=>{const e={namespace:n,key:o,nodes:t};try{if(i.current)await s(c,i.current,e,{interceptorParams:{ignoreLoadingBar:!0}});else{const t=await d(c,e,{interceptorParams:{ignoreLoadingBar:!0}});i.current=t.instanceId}}catch(e){(0,a.handleHttpError)(e)}}))}),[e,f])}}},3402:(e,t,n)=>{function o(e,t){return e?!!t&&e.type===t.type&&("node"===e.type?e.nodeId===t.nodeId:e.edge.source===t.edge.source&&e.edge.target===t.edge.target):!t}n.d(t,{c:()=>o})},3984:(e,t,n)=>{function o(e,t){const n=new Map;for(const{id:o,lineId:a,placement:i}of e){if(!t||"center"!==i)continue;const e=t.get(o);if(!e)continue;const{offsetWidth:l,offsetHeight:r}=e;if(0===l||0===r)continue;const s=3;n.set(a,[{left:e.offsetLeft-l/2-s,top:e.offsetTop-r/2-s,width:l+2*s,height:r+2*s}])}return n}n.d(t,{G:()=>o})},4567:(e,t,n)=>{function o(e,t){for(const{id:n,position:o,placement:a,angle:i,size:l}of e){const e=t.get(n);if(e&&(e.style.left=`${o[0]}px`,e.style.top=`${o[1]}px`,e.style.visibility="visible","center"!==a&&void 0!==i)){const[t,n]=null!=l?l:[0,0],o=Math.floor((i<0?2*Math.PI+i:i)/Math.PI*4),r="start"===a?o:(o+4)%8,s=Math.tan(i),d=i+("start"===a?1:-1)*Math.PI/2,c=2,u=Math.sin(d)*c,f=Math.cos(d)*c;let p;switch(r){case 0:p=`translate(0,${t*s+u}px)`;break;case 1:p=`translate(${n/s-f}px,0)`;break;case 2:p=`translate(calc(${n/s+f}px - 100%),0)`;break;case 3:p=`translate(-100%,${-t*s-u}px)`;break;case 4:p=`translate(-100%,calc(${-t*s+u}px - 100%))`;break;case 5:p=`translate(calc(${-n/s-f}px - 100%),-100%)`;break;case 6:p=`translate(${-n/s+f}px,-100%)`;break;default:p=`translate(0,calc(${t*s-u}px - 100%))`}e.style.transform=p}}}n.d(t,{F:()=>o})},5222:(e,t,n)=>{n.d(t,{Ie:()=>l,KP:()=>i,VO:()=>a,Yt:()=>s,mF:()=>o,sS:()=>r});const o="var(--palette-gray-5)",a=1,i="curveBasis",l=20,r=.5,s=2},5305:(e,t,n)=>{n.d(t,{R:()=>r});var o=n(9698),a=n(883),i=n(4928),l=n(3016);function r(e,t,n){const r=new WeakMap,c=new Map,u=new Map;for(const e of t)c.set(e.id,e);for(const t of e){const{data:e}=t;r.set(e,t)}let f=!1;return n.map((t=>{var n,p,m,h;let{line:v,edge:g,markers:y,...k}=t;const b=r.get(g);if(!b)return;const w=null!==(n=null===(p=y.find((e=>"default"===e.variant&&"start"===e.placement)))||void 0===p?void 0:p.offset)&&void 0!==n?n:0,x=null!==(m=null===(h=y.find((e=>"default"===e.variant&&"end"===e.placement)))||void 0===h?void 0:h.offset)&&void 0!==m?m:0;let M,{points:R}=b;if(!R){const t=c.get(g.source),n=c.get(g.target);if(t&&n&&t!==n){if("polyline"===v.type){if(!(0,l.w)(t,n,w,x)){var E,L;(()=>{if(f)return;f=!0;const t=(e,t)=>{let n=u.get(e);n||u.set(e,n=new Set);const o=c.get(t);o&&n.add(o)};for(const{data:{source:n,target:o}}of e)n!==o&&(t(n,o),t(o,n))})();const o=s(t,n,w),a=s(n,t,x),l=d(null!==(E=u.get(g.source))&&void 0!==E?E:[],t,o,w),r=d(null!==(L=u.get(g.target))&&void 0!==L?L:[],n,a,x),p=(l.indexOf(n)+1)/(l.length+1),m=(r.indexOf(t)+1)/(r.length+1);R=(0,i.o)(t,n,o,a,p,m)}}else R=(0,a.h)(t,n);if(R){const e=R[0],t=R[R.length-1];M=Math.atan2(t.y-e.y,t.x-e.x)}}}return{...k,markers:y,line:v,edge:g,d:(0,o.S)(R,v.curveType,w,x),angle:M,labelSize:b.labelSize}})).filter(Boolean)}function s(e,t,n){const o=Math.atan2(e.height+2*n,e.width+2*n),{x:a,y:i}=e,{x:l,y:r}=t,s=Math.atan2(r-i,l-a),d=s<0?2*Math.PI+s:s;switch(Math.floor(d/Math.PI*2)){case 0:return d<o?"right":"bottom";case 1:return d<Math.PI-o?"bottom":"left";case 2:return d<Math.PI+o?"left":"top";default:return d<2*Math.PI-o?"top":"right"}}function d(e,t,n,o){return[...e].filter((e=>s(t,e,o)===n)).sort(((e,t)=>{const{x:o,y:a}=e,{x:i,y:l}=t;return"top"===n||"bottom"===n?o-i:a-l}))}},6155:(e,t,n)=>{n.d(t,{p:()=>r});var o=n(8769),a=n.n(o),i=n(9711),l=n(1921);function r(e){let{nodes:t,nodeBricks:n,onRendered:i}=e;const[l,r]=(0,o.useState)(!1),[d,c]=(0,o.useState)([]),u=(0,o.useMemo)((()=>new Map),[]),f=(0,o.useCallback)(((e,t)=>{t&&u.set(e,t),c((t=>t.includes(e)?t:t.concat(e)))}),[u]),p=(0,o.useCallback)((e=>{c((t=>{const n=t.indexOf(e);return-1===n?t:t.slice(0,n).concat(t.slice(n+1))})),u.delete(e)}),[u]);return(0,o.useEffect)((()=>{r(!(null!=t&&t.some((e=>!d.includes(e.id)))))}),[t,d]),(0,o.useEffect)((()=>{null==i||i(l?u:null)}),[u,l]),a().createElement(a().Fragment,null,null==t?void 0:t.map((e=>a().createElement("div",{key:e.id,className:"node"},a().createElement(s,{nodeBricks:n,node:e,onRendered:f,onUnmount:p})))))}function s(e){let{node:t,nodeBricks:n,onRendered:r,onUnmount:s}=e;const d=(0,o.useMemo)((()=>{var e;return null===(e=function(e,t){return null==t?void 0:t.find((t=>t.nodeType?[].concat(t.nodeType).includes(e.type):(0,l.checkIfByTransform)(t,{node:e})))}(t,n))||void 0===e?void 0:e.useBrick}),[t,n]),c=(0,o.useMemo)((()=>({node:t})),[t]);(0,o.useEffect)((()=>{d||setTimeout((()=>{null==r||r(t.id,null)}))}),[t.id,r,d]),(0,o.useEffect)((()=>()=>{null==s||s(t.id)}),[]);const u=(0,o.useCallback)((e=>{e&&setTimeout((()=>{null==r||r(t.id,e)}))}),[t.id,r]),f=(0,o.useCallback)((()=>{setTimeout((()=>{null==r||r(t.id,null)}))}),[t.id,r]);return d?a().createElement(i.ReactUseBrick,{refCallback:u,ignoredCallback:f,useBrick:d,data:c}):null}},6884:(e,t,n)=>{n.d(t,{w:()=>s});var o=n(8769),a=n.n(o),i=n(3373),l=n.n(i),r=n(5078);function s(e){let{connectLineState:t,connectLineTo:n,markerPrefix:o}=e;return a().createElement("svg",{width:"100%",height:"100%",className:l()("connect-line",{connecting:!!t&&(n[0]-t.from[0])**2+(n[1]-t.from[1])**2>25})},a().createElement("defs",null,a().createElement(r.c,{type:"arrow",id:`${o}connect-line`,strokeColor:null==t?void 0:t.options.strokeColor})),a().createElement("path",{d:t?`M${t.from.join(" ")}L${n.join(" ")}`:"",fill:"none",stroke:null==t?void 0:t.options.strokeColor,strokeWidth:null==t?void 0:t.options.strokeWidth,markerEnd:null!=t&&t.options.arrow?`url(#${o}connect-line)`:void 0}))}},7467:(e,t,n)=>{n.d(t,{P:()=>i});var o=n(1921),a=n(5222);function i(e,t){let{nodes:n,nodesRefRepository:i,connectNodes:l,dragNodes:r,scale:s,setConnectLineState:d,setConnectLineTo:c,setManualLayoutStatus:u,setNodeMovement:f,onSwitchActiveTarget:p,onNodesConnect:m}=t;function h(e){if(i)for(const[t,o]of i)if(e(o))return null==n?void 0:n.find((e=>e.id===t))}if(!l&&!r)return;const v=h((t=>t.contains(e.target)));if(!v)return;if(!function(e,t){return e.sourceType?[].concat(e.sourceType).includes(t.type):(0,o.checkIfByTransform)(e,{source:t})}(l||r,v))return;e.stopPropagation();const g=[e.clientX,e.clientY];if(l){d({from:g,options:{strokeColor:a.mF,strokeWidth:a.VO,...o.__secret_internals.legacyDoTransform({source:v},l)}}),c(g),null==p||p({type:"node",nodeId:v.id});const e=e=>{c([e.clientX,e.clientY])},t=n=>{document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",t),d(null);const o=n.composedPath(),a=h((e=>o.includes(e)));a&&v!==a&&(null==m||m({source:v,target:a}))};return document.addEventListener("mousemove",e),void document.addEventListener("mouseup",t)}null==p||p({type:"node",nodeId:v.id});let y=!1;const k=e=>{const t=[(e.clientX-g[0])/s,(e.clientY-g[1])/s];y||(y=t[0]**2+t[1]**2>=9,y&&u("started")),y&&f({id:v.id,move:t})},b=()=>{y=!1,document.removeEventListener("mousemove",k),document.removeEventListener("mouseup",b),f(null),u("finished")};document.addEventListener("mousemove",k),document.addEventListener("mouseup",b)}},7971:(e,t,n)=>{n.d(t,{o:()=>k});var o=n(8769),a=n(7586),i=n.n(a),l=n(1030);function r(e,t,n){for(const i of e){var o,a;const e=t.get(i.id);i.width=Math.max(null!==(o=null==e?void 0:e.offsetWidth)&&void 0!==o?o:0,10)+n[1]+n[3],i.height=Math.max(null!==(a=null==e?void 0:e.offsetHeight)&&void 0!==a?a:0,10)+n[0]+n[2]}}function s(e,t,n){for(const a of e){var o;const e=a.x-a.width/2+n[3],i=a.y-a.height/2+n[0],l=null===(o=t.get(a.id))||void 0===o?void 0:o.parentElement;l&&(l.style.left=`${e}px`,l.style.top=`${i}px`,l.style.visibility="visible")}}var d=n(4487),c=n(6149),u=n(4842),f=n(1945),p=n(9418),m=n(3854),h=n(7931);function v(e,t){var n;let{normalizedLinesMap:o,lineLabelsRefRepository:a}=t;return null!==(n=null==e?void 0:e.map((e=>{const t=o.get(e),n={};if(t)for(const e of["start","end"]){const o=a.get(`${t}-${e}`);o&&(n[e]=[o.offsetWidth,o.offsetHeight])}return{data:e,labelSize:n}})))&&void 0!==n?n:[]}function g(e,t){return new Array(t).fill(null).map(((t,n)=>({dummy:!0,id:`$dummy-${e.source}-${e.target}-${n}`})))}function y(e,t){return new Array(t+1).fill(null).map(((n,o)=>({dummy:!0,source:0===o?e.source:`$dummy-${e.source}-${e.target}-${o-1}`,target:o===t?e.target:`$dummy-${e.source}-${e.target}-${o}`})))}function k(e){let{layout:t,nodes:n,edges:a,manualLayoutStatus:k,userViewReady:b,userViewNodesMap:w,nodeMovement:x,nodesRefRepository:M,lineLabelsRefRepository:R,normalizedLinesMap:E,nodesRenderId:L,lineLabelsRenderId:$,layoutOptions:C}=e;const P="initial"===k?t:"manual",[S,I]=(0,o.useState)(null),[T,N]=(0,o.useState)({nodes:[],edges:[]});return(0,o.useEffect)((()=>{b&&I((e=>"dagre"===P?function(e,t,n,o){const{nodePadding:a,...c}={nodePadding:0,rankdir:"TB",ranksep:50,edgesep:10,nodesep:50,...(0,l.pick)(o,["nodePadding","rankdir","ranksep","edgesep","nodesep","align"])},u=(0,d.D)(a),f=new(i().graphlib.Graph);f.setGraph(c),f.setDefaultEdgeLabel((function(){return{}}));for(const n of null!=t?t:[]){const t=null==e?void 0:e.getNode(n.id);f.setNode(n.id,(null==t?void 0:t.data)===n?t:{id:n.id,data:n})}for(const e of null!=n?n:[])f.setEdge(e.source,e.target,{data:e});return{layout:"dagre",getNode:e=>f.node(e),applyLayout(e){let{nodesRefRepository:t,lineLabelsRefRepository:n,normalizedLinesMap:o}=e;const a=[];for(const e of f.nodes()){const t=f.node(e);t?a.push(t):console.error("Diagram node not found: %s",e)}if(0===a.length)return null;r(a,t,u);const l=f.edges().map((e=>f.edge(e)));for(const e of l){const t=o.get(e.data);if(t)for(const o of["center","start","end"]){const a=n.get(`${t}-${o}`);if(a){var d;const{offsetWidth:t,offsetHeight:n}=a;"center"===o&&(e.labelpos="c",e.width=t,e.height=n),null!==(d=e.labelSize)&&void 0!==d||(e.labelSize={}),e.labelSize[o]=[t,n]}}}return i().layout(f),s(a,t,u),{nodes:a,edges:l}}}}(e,n,a,C):"force"===P?function(e,t,n,o,a){const{nodePadding:i,dummyNodesOnEdges:k,collide:b}={nodePadding:0,dummyNodesOnEdges:0,...(0,l.pick)(a,["nodePadding","dummyNodesOnEdges"]),collide:!1!==(null==a?void 0:a.collide)&&{dummyRadius:1,radiusDiff:5,strength:1,iterations:1,...!0===(null==a?void 0:a.collide)?null:null==a?void 0:a.collide}},w=(0,d.D)(i),x=[];for(const n of null!=t?t:[]){const t=null==e?void 0:e.getNode(n.id);if((null==t?void 0:t.data)===n)x.push(t);else{const e={id:n.id,data:n},t=null==o?void 0:o.get(n.id);t&&(e.fx=t.x,e.fy=t.y),x.push(e)}}return{layout:"force",getNode:function(e){return x.find((t=>t.data.id===e))},applyLayout(e){let{nodesRefRepository:t,lineLabelsRefRepository:o,normalizedLinesMap:a}=e;if(0===x.length)return null;r(x,t,w);const i=x.slice(),l=[];for(const e of null!=n?n:[])l.push({...e}),k>0&&(i.push(...g(e,k)),l.push(...y(e,k)));const d=(0,c.A)(l).id((e=>e.id));k>0&&d.distance((e=>e.dummy?30/(k+1):30)).strength((e=>e.dummy?.5:1));const M=(0,u.A)(i).force("link",d).force("x",(0,f.A)()).force("y",(0,p.A)()).force("charge",(0,m.A)());b&&M.force("collide",(0,h.A)().radius((e=>e.dummy?b.dummyRadius:Math.sqrt(e.width**2+e.height**2)/2+b.radiusDiff)).strength(b.strength).iterations(b.iterations)),M.stop(),function(e){e.tick(Math.ceil(Math.log(e.alphaMin())/Math.log(1-e.alphaDecay())))}(M),s(x,t,w);const R=v(n,{normalizedLinesMap:a,lineLabelsRefRepository:o});return{nodes:x,edges:R}}}}(e,n,a,w,C):"manual"===P?function(e,t,n,o){const{nodePadding:a}={nodePadding:0,...(0,l.pick)(o,["nodePadding"])},i=(0,d.D)(a),c=[];for(const n of null!=t?t:[]){const t=null==e?void 0:e.getNode(n.id);(null==t?void 0:t.data)===n?(c.push(t),t.x0=t.x,t.y0=t.y):c.push({id:n.id,data:n})}let u;return{layout:"manual",getNode:function(e){return c.find((t=>t.data.id===e))},applyLayout(e){let{manualLayoutStatus:t,nodesRefRepository:o,lineLabelsRefRepository:a,normalizedLinesMap:l,nodeMovement:d}=e;if(0===c.length)return null;var f,p;r(c,o,i),d&&(u=c.find((e=>e.id===d.id)),u&&(u.x=(null!==(f=u.x0)&&void 0!==f?f:0)+d.move[0],u.y=(null!==(p=u.y0)&&void 0!==p?p:0)+d.move[1])),"finished"===t&&u&&(u.x0=u.x,u.y0=u.y),s(c,o,i);const m=v(n,{normalizedLinesMap:l,lineLabelsRefRepository:a});return{nodes:c,edges:m}}}}(e,n,a,C):null))}),[a,n,P,C,b,w]),(0,o.useEffect)((()=>{if(!M||!R||P!==(null==S?void 0:S.layout))return;const e=null==S?void 0:S.applyLayout({manualLayoutStatus:k,nodesRefRepository:M,lineLabelsRefRepository:R,normalizedLinesMap:E,nodeMovement:x});e&&N(e)}),[P,k,S,x,M,R,L,$,E]),T}},8166:(e,t,n)=>{n.d(t,{a:()=>a});var o=n(1030);function a(e,t){let{renderedNodes:n,activeTarget:o}=t;const a="node"===(null==o?void 0:o.type)?n.find((e=>e.id===o.nodeId)):void 0,l="edge"===(null==o?void 0:o.type)?o.edge:void 0;if(!a&&!l)return;const r=e.key||e.keyCode||e.which;let s,d,c;switch(r){case"Backspace":case 8:case"Delete":case 46:a?(s="delete-node",d=a):(s="delete-edge",c=l);break;default:if(!a)return;switch(r){case"ArrowLeft":case 37:d=i("x",n,a,-1),s="switch-active-node";break;case"ArrowUp":case 38:d=i("y",n,a,-1),s="switch-active-node";break;case"ArrowRight":case 39:d=i("x",n,a,1),s="switch-active-node";break;case"ArrowDown":case 40:d=i("y",n,a,1),s="switch-active-node"}}var u;return s?(e.preventDefault(),e.stopPropagation(),{action:s,node:null===(u=d)||void 0===u?void 0:u.data,edge:c}):void 0}function i(e,t,n,a){const i="x"===e?"y":"x";let l;const r=t.filter((t=>t!==n&&(l=(t[e]-n[e])*a,l>0)&&l>Math.abs(n[i]-t[i])));return(0,o.minBy)(r,(t=>(n[i]-t[i])**2+(n[e]-t[e])**2))}},8265:(e,t,n)=>{function o(e,t){let{canvasWidth:n,canvasHeight:o,scaleRange:a}=t,i=1/0,l=1/0,r=-1/0,s=-1/0;for(const t of e){const e=t.width/2,n=t.height/2,o=t.x-e,a=t.x+e,d=t.y-n,c=t.y+n;o<i&&(i=o),a>r&&(r=a),d<l&&(l=d),c>s&&(s=c)}const d=r-i,c=s-l,u=a&&(d>n||c>o)?Math.max(Math.min(n/d,o/c,a[1]),a[0]):1;return{x:(n-d*u)/2-i*u,y:(o-c*u)/2-l*u,k:u}}n.d(t,{r:()=>o})},9088:(e,t,n)=>{n.d(t,{d2:()=>r});var o=n(8769),a=n.n(o),i=n(9711),l=n(1921);function r(e){let{labels:t,onRendered:n}=e;const[i,l]=(0,o.useState)(!1),[r,c]=(0,o.useState)([]),u=(0,o.useMemo)((()=>new Map),[]),f=(0,o.useCallback)(((e,t)=>{t&&u.set(e,t),c((t=>t.includes(e)?t:t.concat(e)))}),[u]),p=(0,o.useCallback)((e=>{c((t=>{const n=t.indexOf(e);return-1===n?t:t.slice(0,n).concat(t.slice(n+1))})),u.delete(e)}),[u]);return(0,o.useEffect)((()=>{l(!(null!=t&&t.some((e=>!r.includes(e.id)))))}),[t,r]),(0,o.useEffect)((()=>{null==n||n(i?u:null)}),[u,i]),a().createElement(a().Fragment,null,null==t?void 0:t.map((e=>{let{text:t,label:n,id:o,edge:i}=e;return n?a().createElement("div",{key:o,className:"line-label"},a().createElement(d,{id:o,edge:i,label:n,onRendered:f,onUnmount:p})):a().createElement(s,{key:o,id:o,text:t,onRendered:f})})))}function s(e){let{id:t,text:n,onRendered:i}=e;const l=(0,o.useCallback)((e=>{null==i||i(t,e)}),[t,i]);return a().createElement("div",{className:"line-label",ref:l,style:n.style},n.content)}function d(e){let{id:t,edge:n,label:r,onRendered:s,onUnmount:d}=e;const c=(0,o.useMemo)((()=>(0,l.checkIfByTransform)(r,{edge:n})?r.useBrick:null),[n,r]),u=(0,o.useMemo)((()=>({edge:n})),[n]);(0,o.useEffect)((()=>{c||setTimeout((()=>{null==s||s(t,null)}))}),[t,s,c]),(0,o.useEffect)((()=>()=>{null==d||d(t)}),[]);const f=(0,o.useCallback)((e=>{e&&setTimeout((()=>{null==s||s(t,e.parentElement)}))}),[t,s]),p=(0,o.useCallback)((()=>{setTimeout((()=>{null==s||s(t,null)}))}),[t,s]);return c?a().createElement(i.ReactUseBrick,{refCallback:f,ignoredCallback:p,useBrick:c,data:u}):null}},9409:(e,t,n)=>{function o(e,t,n){return 0===e.length&&0===t.length?e:t.flatMap((e=>{let{line:{text:t,label:o,$id:a},edge:i,labelSize:l,angle:r}=e;const s=n.get(a);if(!t&&!o||!s||!s.getAttribute("d"))return[];let d,c;o?(d="label",c=[].concat(o)):(d="text",c=[].concat(t));const{x:u,y:f,width:p,height:m}=s.getBBox(),h=s.getTotalLength();return c.map((e=>{var t;const n=null!==(t=e.placement)&&void 0!==t?t:"center",o=s.getPointAtLength("start"===n?Math.min(0,h/2):"end"===n?Math.max(h-0,h/2):h/2);return{[d]:e,edge:i,position:[o.x,o.y],lineRect:{left:u,top:f,width:p,height:m},id:`${a}-${n}`,lineId:a,placement:n,angle:r,size:null==l?void 0:l[n]}}))}))}n.d(t,{z:()=>o})}}]);
3
+ //# sourceMappingURL=3654.1ca3854c.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunks/3654.1ca3854c.js","mappings":"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","sources":["webpack:///./src/diagram/LineMaskComponent.tsx","webpack:///./src/diagram/styles.shadow.css","webpack:///./src/diagram/LineComponent.tsx","webpack:///./src/diagram/processors/matchEdgeByFilter.ts","webpack:///./src/diagram/processors/normalizeLinesAndMarkers.ts","webpack:///../../node_modules/@next-api-sdk/cmdb-sdk/dist/esm/api/cmdb/instance/postSearchV3.js","webpack:///../../node_modules/@next-api-sdk/cmdb-sdk/dist/esm/api/cmdb/instance/updateInstanceV2.js","webpack:///../../node_modules/@next-api-sdk/cmdb-sdk/dist/esm/api/cmdb/instance/createInstance.js","webpack:///./src/diagram/hooks/useUserView.ts","webpack:///./src/diagram/processors/createAsyncQueue.ts","webpack:///./src/diagram/processors/sameTarget.ts","webpack:///./src/diagram/processors/getLineMaskRects.ts","webpack:///./src/diagram/processors/adjustLineLabels.ts","webpack:///./src/diagram/constants.ts","webpack:///./src/diagram/processors/getRenderedLines.ts","webpack:///./src/diagram/NodeComponent.tsx","webpack:///./src/diagram/processors/findNodeBrick.ts","webpack:///./src/diagram/ConnectLineComponent.tsx","webpack:///./src/diagram/processors/handleNodesMouseDown.ts","webpack:///./src/diagram/processors/adjustNodesSize.ts","webpack:///./src/diagram/processors/adjustNodesPosition.ts","webpack:///./src/diagram/processors/getRenderedEdges.ts","webpack:///./src/diagram/processors/getForceGraph.ts","webpack:///./src/diagram/hooks/useRenderedDiagram.ts","webpack:///./src/diagram/processors/getDagreGraph.ts","webpack:///./src/diagram/processors/getManualGraph.ts","webpack:///./src/diagram/processors/handleKeyboard.ts","webpack:///./src/diagram/processors/transformToCenter.ts","webpack:///./src/diagram/LineLabelComponent.tsx","webpack:///./src/diagram/processors/getRenderedLineLabels.ts"],"sourcesContent":["import React from \"react\";\nimport type { RenderedLineLabel, SimpleRect } from \"./interfaces\";\n\nexport interface LineMaskComponentProps {\n maskPrefix: string;\n lineId: string;\n rects: SimpleRect[];\n renderedLineLabels: RenderedLineLabel[];\n}\n\nexport function LineMaskComponent({\n lineId,\n rects,\n maskPrefix,\n renderedLineLabels,\n}: LineMaskComponentProps): JSX.Element | null {\n const lineText = renderedLineLabels.find(\n (item) => item.lineId === lineId && item.placement === \"center\"\n );\n // istanbul ignore next\n if (!lineText) {\n return null;\n }\n const { lineRect } = lineText;\n const bgRect = getRectWithPadding(lineRect, 1000);\n return (\n <mask\n id={`${maskPrefix}${lineId}`}\n x={bgRect.left}\n y={bgRect.top}\n width={bgRect.width}\n height={bgRect.height}\n >\n <rect\n x={bgRect.left}\n y={bgRect.top}\n width={bgRect.width}\n height={bgRect.height}\n // Everything under a white pixel will be visible\n fill=\"white\"\n />\n {rects.map((rect, index) => (\n <rect\n key={index}\n x={rect.left}\n y={rect.top}\n width={rect.width}\n height={rect.height}\n // Everything under a black pixel will be invisible\n fill=\"black\"\n />\n ))}\n </mask>\n );\n}\n\nfunction getRectWithPadding(rect: SimpleRect, padding: number): SimpleRect {\n return {\n left: rect.left - padding,\n top: rect.top - padding,\n width: rect.width + padding * 2,\n height: rect.height + padding * 2,\n };\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `:host{display:block;width:100%;height:100%;overflow:hidden}:host([hidden]){display:none}*{box-sizing:border-box}.diagram{width:100%;height:100%;position:relative;opacity:0}.diagram:focus{outline:none}.lines,\n.line-labels,\n.nodes{position:absolute;top:0;left:0}.line-labels{opacity:0}.ready{opacity:1}.diagram.ready.pannable{cursor:grab}.diagram.pannable.grabbing{cursor:grabbing}.nodes,\n.lines{transform-origin:0 0}.node,\n.line-label{position:absolute;visibility:hidden}.line-label{transform:translate(-50%,-50%);white-space:pre-line;width:max-content;text-align:center;line-height:1}.lines{pointer-events:none}.line.interactable{pointer-events:auto;cursor:default}.connect-line{position:fixed;top:0;left:0;right:0;bottom:0;pointer-events:none}.connect-line:not(.connecting){display:none}.line:not(.active) .active-bg{display:none}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport type { LineTarget, RenderedLine, LineMaskRects } from \"./interfaces\";\n\nexport interface LineComponentProps {\n line: RenderedLine;\n linePaths: Map<string, SVGPathElement | null>;\n lineMaskRects: LineMaskRects;\n maskPrefix: string;\n markerPrefix: string;\n activeLineMarkerPrefix: string;\n active?: boolean;\n activeRelated?: boolean;\n onLineClick?(line: LineTarget): void;\n onLineDoubleClick?(line: LineTarget): void;\n}\n\nexport function LineComponent({\n line: { line, edge, d, markers },\n linePaths,\n lineMaskRects,\n maskPrefix,\n markerPrefix,\n activeLineMarkerPrefix,\n active,\n activeRelated,\n onLineClick,\n onLineDoubleClick,\n}: LineComponentProps): JSX.Element {\n const mask = lineMaskRects.has(line.$id)\n ? `url(#${maskPrefix}${line.$id})`\n : undefined;\n\n const { strokeColor, strokeWidth, interactStrokeWidth } = {\n ...line,\n ...(active\n ? line.overrides?.active\n : activeRelated\n ? line.overrides?.activeRelated\n : null),\n };\n\n const expectVariant = active\n ? \"active\"\n : activeRelated\n ? \"active-related\"\n : \"default\";\n\n let markerStart: string | undefined;\n let markerEnd: string | undefined;\n\n for (const marker of markers) {\n if (marker.variant === expectVariant) {\n if (marker.placement === \"start\") {\n markerStart = `url(#${markerPrefix}${marker.index})`;\n } else {\n markerEnd = `url(#${markerPrefix}${marker.index})`;\n }\n }\n }\n\n return (\n <g\n className={classNames(\"line\", {\n interactable: line.interactable,\n active,\n \"active-related\": activeRelated,\n })}\n onClick={\n line.interactable\n ? () => {\n onLineClick?.({ id: line.$id, edge });\n }\n : undefined\n }\n onDoubleClick={\n line.interactable\n ? (e) => {\n e.preventDefault();\n e.stopPropagation();\n onLineDoubleClick?.({ id: line.$id, edge });\n }\n : undefined\n }\n style={{ cursor: line.cursor }}\n >\n {line.interactable && (\n <path\n // This `path` is made for expanding interaction area of graph lines.\n d={d}\n fill=\"none\"\n stroke=\"transparent\"\n strokeWidth={interactStrokeWidth}\n />\n )}\n <path\n ref={(element) => linePaths.set(line.$id, element)}\n stroke={strokeColor}\n strokeWidth={strokeWidth}\n d={d}\n fill=\"none\"\n markerStart={markerStart}\n markerEnd={markerEnd}\n mask={mask}\n />\n <path\n stroke=\"var(--palette-blue-3)\"\n strokeWidth={strokeWidth}\n d={d}\n fill=\"none\"\n className=\"active-bg\"\n markerStart={`url(#${activeLineMarkerPrefix}start)`}\n markerEnd={`url(#${activeLineMarkerPrefix}end)`}\n mask={mask}\n />\n </g>\n );\n}\n","import { checkIfByTransform } from \"@next-core/runtime\";\nimport type { DiagramEdge, LineConf } from \"../interfaces\";\n\nexport function matchEdgeByFilter(\n edge: DiagramEdge,\n filter: LineConf\n): boolean {\n if (!filter) {\n return false;\n }\n if (filter.edgeType) {\n return ([] as string[]).concat(filter.edgeType).includes(edge.type!);\n }\n return checkIfByTransform(filter, { edge });\n}\n","import { findIndex, uniqueId } from \"lodash\";\nimport { __secret_internals } from \"@next-core/runtime\";\nimport type {\n DiagramEdge,\n LineConf,\n LineMarker,\n LineMarkerConf,\n LineMarkerType,\n NormalizedLine,\n NormalizedLineMarker,\n} from \"../interfaces\";\nimport { matchEdgeByFilter } from \"./matchEdgeByFilter\";\nimport {\n DEFAULT_LINE_CURVE_TYPE,\n DEFAULT_LINE_INTERACT_STROKE_WIDTH,\n DEFAULT_LINE_STROKE_COLOR,\n DEFAULT_LINE_STROKE_WIDTH,\n} from \"../constants\";\n\nexport function normalizeLinesAndMarkers(\n edges: DiagramEdge[] | undefined,\n lines: LineConf[] | undefined\n) {\n const normalizedLines: NormalizedLine[] = [];\n const normalizedLinesMap = new WeakMap<DiagramEdge, string>();\n const markers: LineMarker[] = [];\n for (const edge of edges ?? []) {\n const { label, ...restLineConf } =\n lines?.find((line) => matchEdgeByFilter(edge, line)) ?? {};\n\n const computedLineConf = __secret_internals.legacyDoTransform(\n { edge },\n restLineConf\n ) as LineConf | undefined;\n if (computedLineConf?.draw === false) {\n continue;\n }\n const id = uniqueId(\"line-\");\n const line: NormalizedLine[\"line\"] = {\n strokeColor: DEFAULT_LINE_STROKE_COLOR,\n strokeWidth: DEFAULT_LINE_STROKE_WIDTH,\n curveType:\n computedLineConf?.type === \"polyline\"\n ? \"curveLinear\"\n : DEFAULT_LINE_CURVE_TYPE,\n interactStrokeWidth: DEFAULT_LINE_INTERACT_STROKE_WIDTH,\n type: \"auto\",\n ...computedLineConf,\n label,\n $id: id,\n };\n normalizedLinesMap.set(edge, id);\n\n const normalizedMarkers: NormalizedLineMarker[] = [];\n\n const lineMarkers: LineMarkerConf[] =\n line.markers ?? (line.arrow ? [{ placement: \"end\", type: \"arrow\" }] : []);\n for (const marker of lineMarkers) {\n const { placement: _placement, type: _type } = marker;\n const placement = _placement ?? \"end\";\n\n let type: LineMarkerType;\n let offsetUnit: number;\n\n switch (_type) {\n case \"0..1\":\n case \"0..N\":\n offsetUnit = 21;\n type = _type;\n break;\n default:\n offsetUnit = 1;\n type = \"arrow\";\n }\n const offset = offsetUnit * line.strokeWidth;\n\n const index = addMarker({ type, strokeColor: line.strokeColor }, markers);\n normalizedMarkers.push({\n index,\n placement,\n type,\n variant: \"default\",\n offset,\n });\n\n const activeStrokeColor =\n line.overrides?.active?.strokeColor ?? line.strokeColor;\n const activeMarkerIndex = addMarker(\n { type, strokeColor: activeStrokeColor },\n markers\n );\n normalizedMarkers.push({\n index: activeMarkerIndex,\n placement,\n type,\n variant: \"active\",\n offset,\n });\n const activeRelatedStrokeColor =\n line.overrides?.activeRelated?.strokeColor ?? line.strokeColor;\n const activeRelatedMarkerIndex = addMarker(\n { type, strokeColor: activeRelatedStrokeColor },\n markers\n );\n normalizedMarkers.push({\n index: activeRelatedMarkerIndex,\n placement,\n type,\n variant: \"active-related\",\n offset,\n });\n }\n\n normalizedLines.push({\n line,\n markers: normalizedMarkers,\n edge,\n });\n }\n return {\n normalizedLines,\n normalizedLinesMap,\n markers,\n };\n}\n\nfunction addMarker(marker: LineMarker, markers: LineMarker[]): number {\n let markerIndex = findIndex(markers, marker);\n if (markerIndex === -1) {\n markerIndex = markers.push(marker) - 1;\n }\n return markerIndex;\n}\n","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport { http } from \"@next-core/http\";\n/**\n * @description 搜索实例V3 (支持多属性排序)\n * @endpoint POST /v3/object/:objectId/instance/_search\n */\nexport var InstanceApi_postSearchV3 = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (objectId, data, options) {\n return (/**! @contract easyops.api.cmdb.instance.PostSearchV3@1.1.0 */(yield http.post(\"api/gateway/cmdb.instance.PostSearchV3/v3/object/\".concat(objectId, \"/instance/_search\"), data, options)).data\n );\n });\n return function InstanceApi_postSearchV3(_x, _x2, _x3) {\n return _ref.apply(this, arguments);\n };\n}();\n//# sourceMappingURL=postSearchV3.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport { http } from \"@next-core/http\";\n\n/** 要更新的实例 */\n\n/**\n * @description 更新实例V2 (支持关系更新)\n * @endpoint PUT /v2/object/:objectId/instance/:instanceId\n */\nexport var InstanceApi_updateInstanceV2 = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (objectId, instanceId, data, options) {\n return (/**! @contract easyops.api.cmdb.instance.UpdateInstanceV2@1.0.0 */(yield http.put(\"api/gateway/cmdb.instance.UpdateInstanceV2/v2/object/\".concat(objectId, \"/instance/\").concat(instanceId), data, options)).data\n );\n });\n return function InstanceApi_updateInstanceV2(_x, _x2, _x3, _x4) {\n return _ref.apply(this, arguments);\n };\n}();\n//# sourceMappingURL=updateInstanceV2.js.map","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport { http } from \"@next-core/http\";\n\n/** 创建实例 */\n\n/**\n * @description 创建实例 (body为实例信息,字段限制参考模型定义,支持关系创建)\n * @endpoint POST /v2/object/:objectId/instance\n */\nexport var InstanceApi_createInstance = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (objectId, data, options) {\n return (/**! @contract easyops.api.cmdb.instance.CreateInstance@1.1.0 */(yield http.post(\"api/gateway/cmdb.instance.CreateInstance/v2/object/\".concat(objectId, \"/instance\"), data, options)).data\n );\n });\n return function InstanceApi_createInstance(_x, _x2, _x3) {\n return _ref.apply(this, arguments);\n };\n}();\n//# sourceMappingURL=createInstance.js.map","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { handleHttpError } from \"@next-core/runtime\";\nimport {\n InstanceApi_postSearchV3,\n InstanceApi_updateInstanceV2,\n InstanceApi_createInstance,\n} from \"@next-api-sdk/cmdb-sdk\";\nimport { createAsyncQueue } from \"../processors/createAsyncQueue\";\nimport {\n NodeUserView,\n UserView,\n UserViewNodesMap,\n UserViewQuery,\n} from \"../interfaces\";\n\nconst USER_VIEW_MODEL_ID = \"GRAPH_USER_VIEW@EASYOPS\";\n\nexport interface UserViewHook {\n userViewReady: boolean;\n userViewNodesMap: UserViewNodesMap | null;\n saveUserView: (nodes: NodeUserView[]) => void;\n}\n\nexport function useUserView(query: UserViewQuery | undefined): UserViewHook {\n const [userViewReady, setUserViewReady] = useState(!query);\n const userViewIdRef = useRef<string>();\n const [userViewNodesMap, setUserViewNodesMap] =\n useState<UserViewNodesMap | null>(null);\n const queue = useMemo(() => createAsyncQueue(), []);\n\n useEffect(() => {\n async function getUserView(): Promise<void> {\n if (!query) {\n setUserViewReady(true);\n return;\n }\n const { namespace, key } = query;\n if (!(namespace && key)) {\n // eslint-disable-next-line no-console\n console.error(\"Namespace and key are required to save graph user view\");\n setUserViewReady(true);\n return;\n }\n try {\n const list = (\n await InstanceApi_postSearchV3(USER_VIEW_MODEL_ID, {\n fields: [\"nodes\"],\n query: {\n namespace: {\n $eq: namespace,\n },\n key: {\n $eq: key,\n },\n },\n page: 1,\n page_size: 30,\n })\n ).list as UserView[];\n if (list.length > 0) {\n const userView = list[0];\n const userViewNodesMap = new Map(\n userView.nodes?.map((node) => [node.id, node])\n );\n userViewIdRef.current = userView.instanceId;\n setUserViewNodesMap(userViewNodesMap);\n } else {\n setUserViewNodesMap(null);\n }\n } catch (error) {\n handleHttpError(error as Error);\n } finally {\n setUserViewReady(true);\n }\n }\n getUserView();\n }, [query]);\n\n const saveUserView = useCallback(\n (nodes: NodeUserView[]) => {\n const { namespace, key } = query ?? {};\n if (!(namespace && key)) {\n return;\n }\n queue(async () => {\n const userViewData = {\n namespace,\n key,\n nodes,\n };\n try {\n if (userViewIdRef.current) {\n await InstanceApi_updateInstanceV2(\n USER_VIEW_MODEL_ID,\n userViewIdRef.current,\n userViewData,\n {\n interceptorParams: {\n ignoreLoadingBar: true,\n },\n }\n );\n } else {\n const userView = await InstanceApi_createInstance(\n USER_VIEW_MODEL_ID,\n userViewData,\n {\n interceptorParams: {\n ignoreLoadingBar: true,\n },\n }\n );\n userViewIdRef.current = userView.instanceId;\n }\n } catch (error) {\n handleHttpError(error);\n }\n });\n },\n [query, queue]\n );\n\n return {\n userViewReady,\n userViewNodesMap,\n saveUserView,\n };\n}\n","type Task = (...args: unknown[]) => unknown;\ntype Queue = (task: Task) => Promise<void>;\n\nexport function createAsyncQueue(): Queue {\n let working = false;\n const waitingTasks: Task[] = [];\n return async function queue(task: Task) {\n waitingTasks.push(task);\n if (!working) {\n working = true;\n let nextTask: Task | undefined;\n while ((nextTask = waitingTasks.shift())) {\n try {\n await nextTask();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n }\n working = false;\n }\n };\n}\n","import type {\n ActiveTarget,\n ActiveTargetOfEdge,\n ActiveTargetOfNode,\n} from \"../interfaces\";\n\nexport function sameTarget(\n a: ActiveTarget | null | undefined,\n b: ActiveTarget | null | undefined\n): boolean {\n return a\n ? !!b &&\n a.type === b.type &&\n (a.type === \"node\"\n ? a.nodeId === (b as ActiveTargetOfNode).nodeId\n : a.edge.source === (b as ActiveTargetOfEdge).edge.source &&\n a.edge.target === (b as ActiveTargetOfEdge).edge.target)\n : !b;\n}\n","import type {\n LineMaskRects,\n RefRepository,\n RenderedLineLabel,\n} from \"../interfaces\";\n\nexport function getLineMaskRects(\n renderedLineLabels: RenderedLineLabel[],\n lineLabelsRefRepository: RefRepository\n) {\n const map: LineMaskRects = new Map();\n\n for (const { id, lineId, placement } of renderedLineLabels) {\n if (!lineLabelsRefRepository || placement !== \"center\") {\n continue;\n }\n const element = lineLabelsRefRepository.get(id);\n if (!element) {\n continue;\n }\n const { offsetWidth, offsetHeight } = element;\n // Do not mask out when the label takes no space.\n // istanbul ignore next\n if (\n process.env.NODE_ENV !== \"test\" &&\n (offsetWidth === 0 || offsetHeight === 0)\n ) {\n continue;\n }\n const padding = 3;\n // Currently no other rects\n map.set(lineId, [\n {\n left: element.offsetLeft - offsetWidth / 2 - padding,\n top: element.offsetTop - offsetHeight / 2 - padding,\n width: offsetWidth + padding * 2,\n height: offsetHeight + padding * 2,\n },\n ]);\n }\n\n return map;\n}\n","import type { RefRepository, RenderedLineLabel } from \"../interfaces\";\n\nexport function adjustLineLabels(\n renderedLineLabels: RenderedLineLabel[],\n lineLabelsRefRepository: RefRepository\n) {\n for (const {\n id,\n position,\n placement,\n angle,\n size: _size,\n } of renderedLineLabels) {\n const label = lineLabelsRefRepository.get(id);\n if (label) {\n label.style.left = `${position[0]}px`;\n label.style.top = `${position[1]}px`;\n label.style.visibility = \"visible\";\n // label.classList.add(placement);\n if (placement !== \"center\" && angle !== undefined) {\n const [width, height] = _size ?? [0, 0];\n // Get the numbered direction of the line\n //\n // \\ | /\n // \\ 5 | 6 /\n // 4 \\ | / 7\n // -----x-----\n // 3 / | \\ 0\n // / 2 | 1 \\\n // / | \\\n const tempDirection = Math.floor(\n ((angle < 0 ? Math.PI * 2 + angle : angle) / Math.PI) * 4\n );\n // Swap direction for end labels.\n const direction =\n placement === \"start\" ? tempDirection : (tempDirection + 4) % 8;\n const tangent = Math.tan(angle);\n const offsetAngle =\n angle + ((placement === \"start\" ? 1 : -1) * Math.PI) / 2;\n const offset = 2;\n const offsetSin = Math.sin(offsetAngle) * offset;\n const offsetCos = Math.cos(offsetAngle) * offset;\n let transform: string;\n switch (direction) {\n case 0:\n transform = `translate(0,${width * tangent + offsetSin}px)`;\n break;\n case 1:\n transform = `translate(${height / tangent - offsetCos}px,0)`;\n break;\n case 2:\n transform = `translate(calc(${\n height / tangent + offsetCos\n }px - 100%),0)`;\n break;\n case 3:\n transform = `translate(-100%,${-width * tangent - offsetSin}px)`;\n break;\n case 4:\n transform = `translate(-100%,calc(${\n -width * tangent + offsetSin\n }px - 100%))`;\n break;\n case 5:\n transform = `translate(calc(${\n -height / tangent - offsetCos\n }px - 100%),-100%)`;\n break;\n case 6:\n transform = `translate(${-height / tangent + offsetCos}px,-100%)`;\n break;\n default:\n transform = `translate(0,calc(${\n width * tangent - offsetSin\n }px - 100%))`;\n }\n label.style.transform = transform;\n }\n }\n }\n}\n","export const DEFAULT_LINE_STROKE_COLOR = \"var(--palette-gray-5)\";\nexport const DEFAULT_LINE_STROKE_WIDTH = 1;\nexport const DEFAULT_LINE_CURVE_TYPE = \"curveBasis\";\nexport const DEFAULT_LINE_INTERACT_STROKE_WIDTH = 20;\nexport const DEFAULT_SCALE_RANGE_MIN = 0.5;\nexport const DEFAULT_SCALE_RANGE_MAX = 2;\n","// istanbul ignore file: experimental\nimport type {\n DiagramEdge,\n Direction,\n NormalizedLine,\n RenderedEdge,\n RenderedLine,\n RenderedNode,\n} from \"../interfaces\";\nimport { curveLine } from \"../lines/curveLine\";\nimport { getDirectLinePoints } from \"../lines/getDirectLinePoints\";\nimport { getPolyLinePoints } from \"../lines/getPolyLinePoints\";\nimport { doTwoNodesOverlap } from \"./doTwoNodesOverlap\";\n\nexport function getRenderedLines(\n renderedEdges: RenderedEdge[],\n renderedNodes: RenderedNode[],\n normalizedLines: NormalizedLine[]\n): RenderedLine[] {\n const renderedEdgeMap = new WeakMap<DiagramEdge, RenderedEdge>();\n const renderedNodeMap = new Map<string, RenderedNode>();\n const relatedNodes = new Map<string, Set<RenderedNode>>();\n\n for (const renderedNode of renderedNodes) {\n renderedNodeMap.set(renderedNode.id, renderedNode);\n }\n\n for (const renderedEdge of renderedEdges) {\n const { data: edge } = renderedEdge;\n renderedEdgeMap.set(edge, renderedEdge);\n }\n\n let prepared = false;\n const prepareRelatedNodes = () => {\n if (prepared) {\n return;\n }\n prepared = true;\n\n const addRelatedNodes = (from: string, to: string) => {\n let relates = relatedNodes.get(from);\n if (!relates) {\n relatedNodes.set(from, (relates = new Set()));\n }\n const toNode = renderedNodeMap.get(to);\n if (toNode) {\n relates.add(toNode);\n }\n };\n\n for (const {\n data: { source, target },\n } of renderedEdges) {\n if (source !== target) {\n addRelatedNodes(source, target);\n addRelatedNodes(target, source);\n }\n }\n };\n\n return normalizedLines\n .map<RenderedLine | undefined>(({ line, edge, markers, ...rest }) => {\n const renderedEdge = renderedEdgeMap.get(edge);\n if (!renderedEdge) {\n return;\n }\n const startMarkerOffset =\n markers.find(\n (marker) =>\n marker.variant === \"default\" && marker.placement === \"start\"\n )?.offset ?? 0;\n const endMarkerOffset =\n markers.find(\n (marker) => marker.variant === \"default\" && marker.placement === \"end\"\n )?.offset ?? 0;\n let angle: number | undefined;\n\n let { points } = renderedEdge;\n // Only dagre graph will have pre-calculated line points\n if (!points) {\n const source = renderedNodeMap.get(edge.source);\n const target = renderedNodeMap.get(edge.target);\n\n if (source && target && source !== target) {\n if (line.type === \"polyline\") {\n if (\n !doTwoNodesOverlap(\n source,\n target,\n startMarkerOffset,\n endMarkerOffset\n )\n ) {\n prepareRelatedNodes();\n const sourceDirection = getDirection(\n source,\n target,\n startMarkerOffset\n );\n const targetDirection = getDirection(\n target,\n source,\n endMarkerOffset\n );\n const sourceRelates = getOrderedRelates(\n relatedNodes.get(edge.source) ?? [],\n source,\n sourceDirection,\n startMarkerOffset\n );\n const targetRelates = getOrderedRelates(\n relatedNodes.get(edge.target) ?? [],\n target,\n targetDirection,\n endMarkerOffset\n );\n\n const sourcePosition =\n (sourceRelates.indexOf(target) + 1) /\n (sourceRelates.length + 1);\n const targetPosition =\n (targetRelates.indexOf(source) + 1) /\n (targetRelates.length + 1);\n\n points = getPolyLinePoints(\n source,\n target,\n sourceDirection,\n targetDirection,\n sourcePosition,\n targetPosition\n );\n }\n } else {\n points = getDirectLinePoints(source, target);\n }\n\n if (points) {\n const start = points[0];\n const end = points[points.length - 1];\n angle = Math.atan2(end.y - start.y, end.x - start.x);\n }\n }\n }\n\n const d = curveLine(\n points,\n line.curveType,\n startMarkerOffset,\n endMarkerOffset\n );\n return {\n ...rest,\n markers,\n line,\n edge,\n d,\n angle,\n labelSize: renderedEdge.labelSize,\n };\n })\n .filter(Boolean) as RenderedLine[];\n}\n\nfunction getDirection(\n source: RenderedNode,\n target: RenderedNode,\n padding: number\n): Direction {\n // Add a padding to the source node to avoid the markers being warped.\n const sourceAngle = Math.atan2(\n source.height + padding * 2,\n source.width + padding * 2\n );\n const { x: sx, y: sy } = source;\n const { x: tx, y: ty } = target;\n const angle = Math.atan2(ty - sy, tx - sx);\n const fixedAngle = angle < 0 ? Math.PI * 2 + angle : angle;\n const direction = Math.floor((fixedAngle / Math.PI) * 2);\n switch (direction) {\n case 0:\n return fixedAngle < sourceAngle ? \"right\" : \"bottom\";\n case 1:\n return fixedAngle < Math.PI - sourceAngle ? \"bottom\" : \"left\";\n case 2:\n return fixedAngle < Math.PI + sourceAngle ? \"left\" : \"top\";\n default:\n return fixedAngle < Math.PI * 2 - sourceAngle ? \"top\" : \"right\";\n }\n}\n\nfunction getOrderedRelates(\n relates: Iterable<RenderedNode>,\n from: RenderedNode,\n direction: Direction,\n padding: number\n): RenderedNode[] {\n return [...relates]\n .filter((node) => getDirection(from, node, padding) === direction)\n .sort((a, b) => {\n const { x: ax, y: ay } = a;\n const { x: bx, y: by } = b;\n return direction === \"top\" || direction === \"bottom\" ? ax - bx : ay - by;\n });\n}\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { ReactUseBrick } from \"@next-core/react-runtime\";\nimport type {\n DiagramNode,\n DiagramNodeId,\n NodeBrickConf,\n RefRepository,\n} from \"./interfaces\";\nimport { findNodeBrick } from \"./processors/findNodeBrick\";\n\nexport interface NodeComponentGroupProps {\n nodes?: DiagramNode[];\n nodeBricks?: NodeBrickConf[];\n onRendered?: (refRepository: RefRepository | null) => void;\n}\n\nexport function NodeComponentGroup({\n nodes,\n nodeBricks,\n onRendered,\n}: NodeComponentGroupProps): JSX.Element {\n const [rendered, setRendered] = useState(false);\n const [renderedIds, setRenderedIds] = useState<DiagramNodeId[]>([]);\n const refRepository = useMemo<RefRepository>(() => new Map(), []);\n\n const handleRenderer = useCallback(\n (id: DiagramNodeId, element: HTMLElement | null) => {\n if (element) {\n refRepository.set(id, element);\n }\n setRenderedIds((previous) =>\n previous.includes(id) ? previous : previous.concat(id)\n );\n },\n [refRepository]\n );\n\n const handleUnmount = useCallback(\n (id: DiagramNodeId) => {\n setRenderedIds((previous) => {\n const index = previous.indexOf(id);\n return index === -1\n ? previous\n : previous.slice(0, index).concat(previous.slice(index + 1));\n });\n refRepository.delete(id);\n },\n [refRepository]\n );\n\n useEffect(() => {\n // All nodes have been rendered.\n setRendered(!nodes?.some((node) => !renderedIds.includes(node.id)));\n }, [nodes, renderedIds]);\n\n useEffect(\n () => {\n onRendered?.(rendered ? refRepository : null);\n },\n // Dot not re-run effect when `onRendered` changed.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [/* onRendered, */ refRepository, rendered]\n );\n\n return (\n <React.Fragment>\n {nodes?.map((node) => (\n <div key={node.id} className=\"node\">\n <NodeComponent\n nodeBricks={nodeBricks}\n node={node}\n onRendered={handleRenderer}\n onUnmount={handleUnmount}\n />\n </div>\n ))}\n </React.Fragment>\n );\n}\n\nexport interface NodeComponentProps {\n node: DiagramNode;\n nodeBricks?: NodeBrickConf[];\n onRendered?: (id: DiagramNodeId, element: HTMLElement | null) => void;\n onUnmount?: (id: DiagramNodeId) => void;\n}\n\nexport function NodeComponent({\n node,\n nodeBricks,\n onRendered,\n onUnmount,\n}: NodeComponentProps): JSX.Element | null {\n const useBrick = useMemo(\n () => findNodeBrick(node, nodeBricks)?.useBrick,\n [node, nodeBricks]\n );\n const memoizedData = useMemo(() => ({ node }), [node]);\n\n useEffect(() => {\n if (!useBrick) {\n // Keep the same time delay for reporting rendered.\n setTimeout(() => {\n onRendered?.(node.id, null);\n });\n }\n }, [node.id, onRendered, useBrick]);\n\n useEffect(\n () => {\n return () => {\n onUnmount?.(node.id);\n };\n },\n // Only unmount once\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n const refCallback = useCallback(\n (element: HTMLElement | null) => {\n if (element) {\n // Todo: correctly wait for `useBrick` in v3 to be rendered (after layout)\n // Wait a macro task to let `useBrick` to be rendered.\n setTimeout(() => {\n onRendered?.(node.id, element);\n });\n }\n },\n [node.id, onRendered]\n );\n\n const ignoredCallback = useCallback(() => {\n setTimeout(() => {\n onRendered?.(node.id, null);\n });\n }, [node.id, onRendered]);\n\n if (!useBrick) {\n return null;\n }\n\n return (\n <ReactUseBrick\n refCallback={refCallback}\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore For v3 only\n ignoredCallback={ignoredCallback}\n useBrick={useBrick}\n data={memoizedData}\n />\n );\n}\n","import { checkIfByTransform } from \"@next-core/runtime\";\nimport { NodeBrickConf, DiagramNode } from \"../interfaces\";\n\nexport function findNodeBrick(\n node: DiagramNode,\n nodeBricks: NodeBrickConf[] | undefined\n): NodeBrickConf | undefined {\n return nodeBricks?.find((item) => {\n if (item.nodeType) {\n return ([] as unknown[]).concat(item.nodeType).includes(node.type);\n }\n return checkIfByTransform(item, { node });\n });\n}\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport type { ConnectLineState, PositionTuple } from \"./interfaces\";\nimport { MarkerComponent } from \"./MarkerComponent\";\n\nexport interface ConnectLineComponentProps {\n connectLineState: ConnectLineState | null;\n connectLineTo: PositionTuple;\n markerPrefix: string;\n}\n\nexport function ConnectLineComponent({\n connectLineState,\n connectLineTo,\n markerPrefix,\n}: ConnectLineComponentProps): JSX.Element {\n return (\n <svg\n width=\"100%\"\n height=\"100%\"\n className={classNames(\"connect-line\", {\n connecting:\n !!connectLineState &&\n // Do not show when the distance of mouse move is less than 5px\n (connectLineTo[0] - connectLineState.from[0]) ** 2 +\n (connectLineTo[1] - connectLineState.from[1]) ** 2 >\n 25,\n })}\n >\n <defs>\n <MarkerComponent\n type=\"arrow\"\n id={`${markerPrefix}connect-line`}\n strokeColor={connectLineState?.options.strokeColor}\n />\n </defs>\n <path\n d={\n connectLineState\n ? `M${connectLineState.from.join(\" \")}L${connectLineTo.join(\" \")}`\n : \"\"\n }\n fill=\"none\"\n stroke={connectLineState?.options.strokeColor}\n strokeWidth={connectLineState?.options.strokeWidth}\n markerEnd={\n connectLineState?.options.arrow\n ? `url(#${markerPrefix}connect-line)`\n : undefined\n }\n />\n </svg>\n );\n}\n","import { checkIfByTransform, __secret_internals } from \"@next-core/runtime\";\nimport type React from \"react\";\nimport {\n DEFAULT_LINE_STROKE_COLOR,\n DEFAULT_LINE_STROKE_WIDTH,\n} from \"../constants\";\nimport type {\n ConnectLineState,\n DiagramNode,\n ConnectLineDetail,\n ConnectNodesOptions,\n PositionTuple,\n RefRepository,\n ActiveTarget,\n DragNodesOptions,\n NodesFilterOptions,\n NodeMovement,\n ManualLayoutStatus,\n} from \"../interfaces\";\n\nexport function handleNodesMouseDown(\n event: MouseEvent,\n {\n nodes,\n nodesRefRepository,\n connectNodes,\n dragNodes,\n scale,\n setConnectLineState,\n setConnectLineTo,\n setManualLayoutStatus,\n setNodeMovement,\n onSwitchActiveTarget,\n onNodesConnect,\n }: {\n nodes: DiagramNode[] | undefined;\n connectNodes: ConnectNodesOptions | undefined;\n dragNodes: DragNodesOptions | undefined;\n nodesRefRepository: RefRepository | null;\n scale: number;\n setConnectLineState: (\n value: React.SetStateAction<ConnectLineState | null>\n ) => void;\n setConnectLineTo: (value: React.SetStateAction<PositionTuple>) => void;\n setManualLayoutStatus: (\n value: React.SetStateAction<ManualLayoutStatus>\n ) => void;\n setNodeMovement: (value: React.SetStateAction<NodeMovement | null>) => void;\n onSwitchActiveTarget?(target: ActiveTarget | null): void;\n onNodesConnect?(detail: ConnectLineDetail): void;\n }\n) {\n function findNode(match: (element: HTMLElement) => boolean) {\n if (nodesRefRepository) {\n for (const [id, element] of nodesRefRepository) {\n if (match(element)) {\n return nodes?.find((node) => node.id === id);\n }\n }\n }\n }\n\n if (!connectNodes && !dragNodes) {\n return;\n }\n\n const source = findNode((element) =>\n element.contains(event.target as Node | null)\n );\n\n if (!source) {\n return;\n }\n\n if (!nodeMatched(connectNodes || dragNodes!, source)) {\n return;\n }\n\n event.stopPropagation();\n const from: PositionTuple = [event.clientX, event.clientY];\n\n if (connectNodes) {\n setConnectLineState({\n from,\n options: {\n strokeColor: DEFAULT_LINE_STROKE_COLOR,\n strokeWidth: DEFAULT_LINE_STROKE_WIDTH,\n ...(__secret_internals.legacyDoTransform(\n { source },\n connectNodes\n ) as ConnectNodesOptions),\n },\n });\n setConnectLineTo(from);\n\n onSwitchActiveTarget?.({ type: \"node\", nodeId: source.id });\n\n const onMouseMove = (e: MouseEvent) => {\n setConnectLineTo([e.clientX, e.clientY]);\n };\n const onMouseUp = (e: MouseEvent) => {\n document.removeEventListener(\"mousemove\", onMouseMove);\n document.removeEventListener(\"mouseup\", onMouseUp);\n setConnectLineState(null);\n const eventTargets = e.composedPath();\n const target = findNode((element) => eventTargets.includes(element));\n if (target && source !== target) {\n onNodesConnect?.({ source, target });\n }\n };\n document.addEventListener(\"mousemove\", onMouseMove);\n document.addEventListener(\"mouseup\", onMouseUp);\n return;\n }\n\n // Drag node\n onSwitchActiveTarget?.({ type: \"node\", nodeId: source.id });\n\n let moved = false;\n const onMouseMove = (e: MouseEvent) => {\n // Respect the scale\n const movement: PositionTuple = [\n (e.clientX - from[0]) / scale,\n (e.clientY - from[1]) / scale,\n ];\n if (!moved) {\n moved = movement[0] ** 2 + movement[1] ** 2 >= 9;\n if (moved) {\n setManualLayoutStatus(\"started\");\n }\n }\n if (moved) {\n setNodeMovement({ id: source.id, move: movement });\n }\n };\n const onMouseUp = () => {\n moved = false;\n document.removeEventListener(\"mousemove\", onMouseMove);\n document.removeEventListener(\"mouseup\", onMouseUp);\n setNodeMovement(null);\n setManualLayoutStatus(\"finished\");\n };\n document.addEventListener(\"mousemove\", onMouseMove);\n document.addEventListener(\"mouseup\", onMouseUp);\n}\n\nfunction nodeMatched(\n options: NodesFilterOptions,\n source: DiagramNode\n): boolean {\n return options.sourceType\n ? ([] as unknown[]).concat(options.sourceType).includes(source.type)\n : checkIfByTransform(options, { source });\n}\n","import type { FullRectTuple, RefRepository, RenderedNode } from \"../interfaces\";\n\nexport function adjustNodesSize(\n nodes: RenderedNode[],\n nodesRefRepository: RefRepository,\n nodePaddings: FullRectTuple\n) {\n for (const node of nodes) {\n const element = nodesRefRepository.get(node.id);\n node.width =\n Math.max(element?.offsetWidth ?? 0, 10) +\n nodePaddings[1] +\n nodePaddings[3];\n node.height =\n Math.max(element?.offsetHeight ?? 0, 10) +\n nodePaddings[0] +\n nodePaddings[2];\n }\n}\n","import type { FullRectTuple, RefRepository, RenderedNode } from \"../interfaces\";\n\nexport function adjustNodesPosition(\n nodes: RenderedNode[],\n nodesRefRepository: RefRepository,\n nodePaddings: FullRectTuple\n) {\n for (const node of nodes) {\n const x = node.x - node.width / 2 + nodePaddings[3];\n const y = node.y - node.height / 2 + nodePaddings[0];\n\n const nodeContainer = nodesRefRepository.get(node.id)?.parentElement;\n if (nodeContainer) {\n nodeContainer.style.left = `${x}px`;\n nodeContainer.style.top = `${y}px`;\n nodeContainer.style.visibility = \"visible\";\n }\n }\n}\n","// istanbul ignore file: experimental\nimport type {\n DiagramEdge,\n LabelSize,\n RefRepository,\n RenderedEdge,\n} from \"../interfaces\";\n\nexport function getRenderedEdges(\n edges: DiagramEdge[] | undefined,\n {\n normalizedLinesMap,\n lineLabelsRefRepository,\n }: {\n normalizedLinesMap: WeakMap<DiagramEdge, string>;\n lineLabelsRefRepository: RefRepository;\n }\n) {\n return (\n edges?.map<RenderedEdge>((edge) => {\n const lineId = normalizedLinesMap.get(edge);\n const labelSize: LabelSize = {};\n if (lineId) {\n for (const placement of [/* \"center\", */ \"start\", \"end\"] as const) {\n const element = lineLabelsRefRepository.get(`${lineId}-${placement}`);\n if (element) {\n labelSize[placement] = [element.offsetWidth, element.offsetHeight];\n }\n }\n }\n\n return {\n data: edge,\n labelSize,\n };\n }) ?? []\n );\n}\n","// istanbul ignore file: experimental\nimport {\n forceSimulation,\n forceLink,\n forceCollide,\n forceManyBody,\n forceX,\n forceY,\n type Simulation,\n type SimulationNodeDatum,\n type SimulationLinkDatum,\n} from \"d3-force\";\nimport { pick } from \"lodash\";\nimport type {\n DiagramEdge,\n DiagramNode,\n ForceCollideOptions,\n LayoutOptionsForce,\n RenderedNode,\n UnifiedGraph,\n UserViewNodesMap,\n} from \"../interfaces\";\nimport { adjustNodesSize } from \"./adjustNodesSize\";\nimport { adjustNodesPosition } from \"./adjustNodesPosition\";\nimport { extractPartialRectTuple } from \"./extractPartialRectTuple\";\nimport { getRenderedEdges } from \"./getRenderedEdges\";\n\ninterface NormalNode extends SimulationNodeDatum {\n dummy?: false;\n id: string;\n data: DiagramNode;\n width: number;\n height: number;\n}\n\ninterface DummyNode extends SimulationNodeDatum {\n dummy: true;\n id: string;\n}\n\ntype ForceNode = NormalNode | DummyNode;\n\ntype ForceLink = SimulationLinkDatum<ForceNode> & {\n dummy?: boolean;\n};\n\nexport function getForceGraph(\n previousGraph: UnifiedGraph | null,\n nodes: DiagramNode[] | undefined,\n edges: DiagramEdge[] | undefined,\n userViewNodesMap: UserViewNodesMap | null,\n forceLayoutOptions: LayoutOptionsForce | undefined\n): UnifiedGraph {\n const { nodePadding, dummyNodesOnEdges, collide } = {\n nodePadding: 0,\n dummyNodesOnEdges: 0,\n ...pick(forceLayoutOptions, [\"nodePadding\", \"dummyNodesOnEdges\"]),\n collide:\n forceLayoutOptions?.collide !== false\n ? ({\n dummyRadius: 1,\n radiusDiff: 5,\n strength: 1,\n iterations: 1,\n ...(forceLayoutOptions?.collide === true\n ? null\n : (forceLayoutOptions?.collide as ForceCollideOptions)),\n } as Required<ForceCollideOptions>)\n : (false as const),\n };\n const nodePaddings = extractPartialRectTuple(nodePadding);\n\n const renderedNodes: RenderedNode[] = [];\n for (const node of nodes ?? []) {\n const previousNode = previousGraph?.getNode(node.id);\n if (previousNode?.data === node) {\n renderedNodes.push(previousNode);\n } else {\n const renderedNode = {\n id: node.id,\n data: node,\n } as RenderedNode & { fx?: number; fy?: number };\n const userViewNode = userViewNodesMap?.get(node.id);\n if (userViewNode) {\n renderedNode.fx = userViewNode.x;\n renderedNode.fy = userViewNode.y;\n }\n renderedNodes.push(renderedNode);\n }\n }\n\n function getNode(id: string) {\n return renderedNodes.find((node) => node.data.id === id);\n }\n\n return {\n layout: \"force\",\n getNode,\n applyLayout({\n nodesRefRepository,\n lineLabelsRefRepository,\n normalizedLinesMap,\n }) {\n if (renderedNodes.length === 0) {\n return null;\n }\n\n adjustNodesSize(renderedNodes, nodesRefRepository, nodePaddings);\n\n const forceNodes = renderedNodes.slice();\n const forceLinks: ForceLink[] = [];\n\n for (const edge of edges ?? []) {\n forceLinks.push({ ...edge });\n if (dummyNodesOnEdges > 0) {\n forceNodes.push(\n ...(getDummyNodes(\n edge,\n dummyNodesOnEdges\n ) as Partial<RenderedNode>[] as RenderedNode[])\n );\n forceLinks.push(...getDummyEdges(edge, dummyNodesOnEdges));\n }\n }\n\n const linkSimulation = forceLink<ForceNode, ForceLink>(forceLinks).id(\n (d) => d.id\n );\n\n if (dummyNodesOnEdges > 0) {\n linkSimulation\n .distance((l) => (l.dummy ? 30 / (dummyNodesOnEdges + 1) : 30))\n .strength((l) => (l.dummy ? 0.5 : 1));\n }\n\n const simulation = forceSimulation<ForceNode>(forceNodes)\n .force(\"link\", linkSimulation)\n .force(\"x\", forceX())\n .force(\"y\", forceY())\n .force(\"charge\", forceManyBody());\n\n if (collide) {\n simulation.force(\n \"collide\",\n forceCollide<ForceNode>()\n .radius((d) =>\n d.dummy\n ? collide.dummyRadius\n : Math.sqrt(d.width ** 2 + d.height ** 2) / 2 +\n collide.radiusDiff\n )\n .strength(collide.strength)\n .iterations(collide.iterations)\n );\n }\n\n simulation.stop();\n manuallyTickToTheEnd(simulation);\n\n adjustNodesPosition(renderedNodes, nodesRefRepository, nodePaddings);\n\n const renderedEdges = getRenderedEdges(edges, {\n normalizedLinesMap,\n lineLabelsRefRepository,\n });\n\n return { nodes: renderedNodes, edges: renderedEdges };\n },\n };\n}\n\nfunction manuallyTickToTheEnd(\n simulation: Simulation<ForceNode, ForceLink>\n): void {\n // Manually tick to the end.\n simulation.tick(\n Math.ceil(\n Math.log(simulation.alphaMin()) / Math.log(1 - simulation.alphaDecay())\n )\n );\n}\n\nfunction getDummyNodes(edge: DiagramEdge, count: number): DummyNode[] {\n return new Array(count).fill(null).map<DummyNode>((v, i) => ({\n dummy: true,\n id: `$dummy-${edge.source}-${edge.target}-${i}`,\n }));\n}\n\nfunction getDummyEdges(edge: DiagramEdge, count: number): ForceLink[] {\n return new Array(count + 1).fill(null).map<ForceLink>((v, i) => ({\n dummy: true,\n source:\n i === 0 ? edge.source : `$dummy-${edge.source}-${edge.target}-${i - 1}`,\n target:\n i === count ? edge.target : `$dummy-${edge.source}-${edge.target}-${i}`,\n }));\n}\n","import { useEffect, useState } from \"react\";\nimport type {\n DiagramEdge,\n DiagramNode,\n LayoutOptions,\n LayoutOptionsDagre,\n LayoutOptionsForce,\n ManualLayoutStatus,\n NodeMovement,\n RefRepository,\n RenderedDiagram,\n UnifiedGraph,\n UserViewNodesMap,\n} from \"../interfaces\";\nimport { getDagreGraph } from \"../processors/getDagreGraph\";\nimport { getForceGraph } from \"../processors/getForceGraph\";\nimport { getManualGraph } from \"../processors/getManualGraph\";\n\nexport function useRenderedDiagram({\n layout: originalLayout,\n nodes,\n edges,\n manualLayoutStatus,\n userViewReady,\n userViewNodesMap,\n nodeMovement,\n nodesRefRepository,\n lineLabelsRefRepository,\n normalizedLinesMap,\n nodesRenderId,\n lineLabelsRenderId,\n layoutOptions,\n}: {\n layout: \"dagre\" | \"force\" | undefined;\n nodes: DiagramNode[] | undefined;\n edges: DiagramEdge[] | undefined;\n manualLayoutStatus: ManualLayoutStatus;\n userViewReady: boolean;\n userViewNodesMap: UserViewNodesMap | null;\n nodeMovement: NodeMovement | null;\n nodesRefRepository: RefRepository | null;\n lineLabelsRefRepository: RefRepository | null;\n normalizedLinesMap: WeakMap<DiagramEdge, string>;\n nodesRenderId: number;\n lineLabelsRenderId: number;\n layoutOptions?: LayoutOptions;\n}) {\n const layout = manualLayoutStatus === \"initial\" ? originalLayout : \"manual\";\n const [graph, setGraph] = useState<UnifiedGraph | null>(null);\n\n const [renderedDiagram, setRenderedDiagram] = useState<RenderedDiagram>({\n nodes: [],\n edges: [],\n });\n\n useEffect(() => {\n if (!userViewReady) {\n return;\n }\n setGraph((previousGraph) =>\n layout === \"dagre\"\n ? getDagreGraph(\n previousGraph,\n nodes,\n edges,\n layoutOptions as LayoutOptionsDagre\n )\n : layout === \"force\"\n ? getForceGraph(\n previousGraph,\n nodes,\n edges,\n userViewNodesMap,\n layoutOptions as LayoutOptionsForce\n )\n : layout === \"manual\"\n ? getManualGraph(previousGraph, nodes, edges, layoutOptions)\n : null\n );\n }, [edges, nodes, layout, layoutOptions, userViewReady, userViewNodesMap]);\n\n useEffect(() => {\n if (\n !nodesRefRepository ||\n !lineLabelsRefRepository ||\n layout !== graph?.layout\n ) {\n return;\n }\n const renderedDiagram = graph?.applyLayout({\n manualLayoutStatus,\n nodesRefRepository,\n lineLabelsRefRepository,\n normalizedLinesMap,\n nodeMovement,\n });\n if (renderedDiagram) {\n setRenderedDiagram(renderedDiagram);\n }\n }, [\n layout,\n manualLayoutStatus,\n graph,\n nodeMovement,\n nodesRefRepository,\n lineLabelsRefRepository,\n nodesRenderId,\n lineLabelsRenderId,\n normalizedLinesMap,\n ]);\n\n return renderedDiagram;\n}\n","import dagre from \"@dagrejs/dagre\";\nimport { pick } from \"lodash\";\nimport type {\n DiagramEdge,\n DiagramNode,\n LayoutOptionsDagre,\n RenderedEdge,\n RenderedNode,\n UnifiedGraph,\n} from \"../interfaces\";\nimport { adjustNodesSize } from \"./adjustNodesSize\";\nimport { adjustNodesPosition } from \"./adjustNodesPosition\";\nimport { extractPartialRectTuple } from \"./extractPartialRectTuple\";\n\nexport function getDagreGraph(\n previousGraph: UnifiedGraph | null,\n nodes: DiagramNode[] | undefined,\n edges: DiagramEdge[] | undefined,\n dagreLayoutOptions: LayoutOptionsDagre | undefined\n): UnifiedGraph {\n const { nodePadding, ...dagreGraphOptions } = {\n nodePadding: 0,\n rankdir: \"TB\",\n ranksep: 50,\n edgesep: 10,\n nodesep: 50,\n // align: undefined,\n ...pick(dagreLayoutOptions, [\n \"nodePadding\",\n \"rankdir\",\n \"ranksep\",\n \"edgesep\",\n \"nodesep\",\n \"align\",\n ]),\n };\n const nodePaddings = extractPartialRectTuple(nodePadding);\n\n // Create a new directed graph\n const graph = new dagre.graphlib.Graph<RenderedNode>();\n\n // Set an object for the graph label\n graph.setGraph(dagreGraphOptions);\n\n // Default to assigning a new object as a label for each new edge.\n graph.setDefaultEdgeLabel(function () {\n return {};\n });\n\n for (const node of nodes ?? []) {\n const previousNode = previousGraph?.getNode(node.id);\n graph.setNode(\n node.id,\n previousNode?.data === node\n ? previousNode\n : {\n id: node.id,\n data: node,\n }\n );\n }\n\n for (const edge of edges ?? []) {\n graph.setEdge(edge.source, edge.target, { data: edge });\n }\n\n return {\n layout: \"dagre\",\n getNode(id) {\n return graph.node(id);\n },\n applyLayout({\n nodesRefRepository,\n lineLabelsRefRepository,\n normalizedLinesMap,\n }) {\n const renderedNodes: RenderedNode[] = [];\n for (const id of graph.nodes()) {\n const node = graph.node(id);\n if (node) {\n renderedNodes.push(node);\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Diagram node not found: %s\", id);\n }\n }\n\n if (renderedNodes.length === 0) {\n return null;\n }\n\n adjustNodesSize(renderedNodes, nodesRefRepository, nodePaddings);\n\n const renderedEdges = graph\n .edges()\n .map((e) => graph.edge(e) as RenderedEdge);\n for (const edge of renderedEdges) {\n const lineId = normalizedLinesMap.get(edge.data);\n if (lineId) {\n for (const placement of [\"center\", \"start\", \"end\"] as const) {\n const element = lineLabelsRefRepository.get(\n `${lineId}-${placement}`\n );\n if (element) {\n const { offsetWidth, offsetHeight } = element;\n if (placement === \"center\") {\n edge.labelpos = \"c\";\n edge.width = offsetWidth;\n edge.height = offsetHeight;\n }\n edge.labelSize ??= {};\n edge.labelSize[placement] = [offsetWidth, offsetHeight];\n }\n }\n }\n }\n dagre.layout(graph);\n\n adjustNodesPosition(renderedNodes, nodesRefRepository, nodePaddings);\n\n return {\n nodes: renderedNodes,\n edges: renderedEdges,\n };\n },\n };\n}\n","// istanbul ignore file: experimental\nimport { pick } from \"lodash\";\nimport type {\n DiagramEdge,\n DiagramNode,\n BaseLayoutOptions,\n RenderedNode,\n UnifiedGraph,\n} from \"../interfaces\";\nimport { extractPartialRectTuple } from \"./extractPartialRectTuple\";\nimport { adjustNodesSize } from \"./adjustNodesSize\";\nimport { adjustNodesPosition } from \"./adjustNodesPosition\";\nimport { getRenderedEdges } from \"./getRenderedEdges\";\n\nexport function getManualGraph(\n previousGraph: UnifiedGraph | null,\n nodes: DiagramNode[] | undefined,\n edges: DiagramEdge[] | undefined,\n layoutOptions: BaseLayoutOptions | undefined\n): UnifiedGraph {\n const { nodePadding } = {\n nodePadding: 0,\n ...pick(layoutOptions, [\"nodePadding\"]),\n };\n const nodePaddings = extractPartialRectTuple(nodePadding);\n\n const renderedNodes: RenderedNode[] = [];\n for (const node of nodes ?? []) {\n const previousNode = previousGraph?.getNode(node.id);\n if (previousNode?.data === node) {\n renderedNodes.push(previousNode);\n previousNode.x0 = previousNode.x;\n previousNode.y0 = previousNode.y;\n } else {\n renderedNodes.push({\n id: node.id,\n data: node,\n } as RenderedNode);\n }\n }\n\n function getNode(id: string) {\n return renderedNodes.find((node) => node.data.id === id);\n }\n\n let movedNode: RenderedNode | undefined;\n\n return {\n layout: \"manual\",\n getNode,\n applyLayout({\n manualLayoutStatus,\n nodesRefRepository,\n lineLabelsRefRepository,\n normalizedLinesMap,\n nodeMovement,\n }) {\n if (renderedNodes.length === 0) {\n return null;\n }\n\n adjustNodesSize(renderedNodes, nodesRefRepository, nodePaddings);\n\n if (nodeMovement) {\n movedNode = renderedNodes.find((node) => node.id === nodeMovement.id);\n if (movedNode) {\n movedNode.x = (movedNode.x0 ?? 0) + nodeMovement.move[0];\n movedNode.y = (movedNode.y0 ?? 0) + nodeMovement.move[1];\n }\n }\n\n if (manualLayoutStatus === \"finished\" && movedNode) {\n // Set x0/y0 after finished manual layout\n movedNode.x0 = movedNode.x;\n movedNode.y0 = movedNode.y;\n }\n\n adjustNodesPosition(renderedNodes, nodesRefRepository, nodePaddings);\n\n const renderedEdges = getRenderedEdges(edges, {\n normalizedLinesMap,\n lineLabelsRefRepository,\n });\n\n return { nodes: renderedNodes, edges: renderedEdges };\n },\n };\n}\n","import { minBy } from \"lodash\";\nimport type {\n ActiveTarget,\n DiagramEdge,\n DiagramNode,\n RenderedNode,\n} from \"../interfaces\";\n\nexport type KeyboardAction =\n | KeyboardActionSwitchActiveNode\n | KeyboardActionDeleteNode\n | KeyboardActionDeleteEdge;\n\nexport interface KeyboardActionSwitchActiveNode {\n action: \"switch-active-node\";\n node?: DiagramNode;\n}\n\nexport interface KeyboardActionDeleteNode {\n action: \"delete-node\";\n node: DiagramNode;\n}\n\nexport interface KeyboardActionDeleteEdge {\n action: \"delete-edge\";\n edge: DiagramEdge;\n}\n\nexport function handleKeyboard(\n event: KeyboardEvent,\n {\n renderedNodes,\n activeTarget,\n }: {\n renderedNodes: RenderedNode[];\n activeTarget: ActiveTarget | null | undefined;\n }\n): KeyboardAction | undefined {\n const activeNode =\n activeTarget?.type === \"node\"\n ? renderedNodes.find((node) => node.id === activeTarget.nodeId)\n : undefined;\n const activeEdge =\n activeTarget?.type === \"edge\" ? activeTarget.edge : undefined;\n\n if (!activeNode && !activeEdge) {\n return;\n }\n\n const key =\n event.key ||\n /* istanbul ignore next: compatibility */ event.keyCode ||\n /* istanbul ignore next: compatibility */ event.which;\n let action: KeyboardAction[\"action\"] | undefined;\n let node: RenderedNode | undefined;\n let edge: DiagramEdge | undefined;\n\n switch (key) {\n case \"Backspace\":\n case 8:\n case \"Delete\":\n case 46: {\n if (activeNode) {\n action = \"delete-node\";\n node = activeNode;\n } else {\n action = \"delete-edge\";\n edge = activeEdge;\n }\n break;\n }\n default:\n if (!activeNode) {\n return;\n }\n switch (key) {\n case \"ArrowLeft\":\n case 37: {\n node = moveOnAxis(\"x\", renderedNodes, activeNode, -1);\n action = \"switch-active-node\";\n break;\n }\n case \"ArrowUp\":\n case 38: {\n node = moveOnAxis(\"y\", renderedNodes, activeNode, -1);\n action = \"switch-active-node\";\n break;\n }\n case \"ArrowRight\":\n case 39: {\n node = moveOnAxis(\"x\", renderedNodes, activeNode, 1);\n action = \"switch-active-node\";\n break;\n }\n case \"ArrowDown\":\n case 40: {\n node = moveOnAxis(\"y\", renderedNodes, activeNode, 1);\n action = \"switch-active-node\";\n break;\n }\n }\n }\n if (action) {\n event.preventDefault();\n event.stopPropagation();\n return { action, node: node?.data, edge } as KeyboardAction;\n }\n}\n\nfunction moveOnAxis(\n axis: \"x\" | \"y\",\n renderedNodes: RenderedNode[],\n activeNode: RenderedNode,\n direction: 1 | -1\n) {\n const oppositeAxis = axis === \"x\" ? \"y\" : \"x\";\n let diff: number;\n const candidates = renderedNodes.filter(\n (node) =>\n node !== activeNode &&\n ((diff = (node[axis] - activeNode[axis]) * direction), diff > 0) &&\n diff > Math.abs(activeNode[oppositeAxis] - node[oppositeAxis])\n );\n return minBy(\n candidates,\n (node) =>\n (activeNode[oppositeAxis] - node[oppositeAxis]) ** 2 +\n (activeNode[axis] - node[axis]) ** 2\n );\n}\n","import type { RenderedNode, TransformLiteral } from \"../interfaces\";\n\nexport interface TransformToCenterOptions {\n canvasWidth: number;\n canvasHeight: number;\n scaleRange?: [min: number, max: number];\n}\n\nexport function transformToCenter(\n renderedNodes: RenderedNode[],\n { canvasWidth, canvasHeight, scaleRange }: TransformToCenterOptions\n): TransformLiteral {\n let left = Infinity;\n let top = Infinity;\n let right = -Infinity;\n let bottom = -Infinity;\n for (const node of renderedNodes) {\n const hw = node.width / 2;\n const hh = node.height / 2;\n const l = node.x - hw;\n const r = node.x + hw;\n const t = node.y - hh;\n const b = node.y + hh;\n if (l < left) {\n left = l;\n }\n if (r > right) {\n right = r;\n }\n if (t < top) {\n top = t;\n }\n if (b > bottom) {\n bottom = b;\n }\n }\n\n const width = right - left;\n const height = bottom - top;\n\n const scale =\n scaleRange && (width > canvasWidth || height > canvasHeight)\n ? Math.max(\n Math.min(canvasWidth / width, canvasHeight / height, scaleRange[1]),\n scaleRange[0]\n )\n : 1;\n\n const x = (canvasWidth - width * scale) / 2 - left * scale;\n const y = (canvasHeight - height * scale) / 2 - top * scale;\n\n return { x, y, k: scale };\n}\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { ReactUseBrick } from \"@next-core/react-runtime\";\nimport { checkIfByTransform } from \"@next-core/runtime\";\nimport type {\n DiagramEdge,\n LineLabelConf,\n // PositionTuple,\n RefRepository,\n LineLabel,\n TextOptions,\n} from \"./interfaces\";\n\nexport interface LineLabelComponentGroupProps {\n labels?: LineLabel[];\n onRendered?: (refRepository: RefRepository | null) => void;\n}\n\nexport function LineLabelComponentGroup({\n labels,\n onRendered,\n}: LineLabelComponentGroupProps): JSX.Element {\n const [rendered, setRendered] = useState(false);\n const [renderedIds, setRenderedIds] = useState<string[]>([]);\n const refRepository = useMemo<RefRepository>(() => new Map(), []);\n\n const handleRenderer = useCallback(\n (id: string, element: HTMLElement | null) => {\n if (element) {\n refRepository.set(id, element);\n }\n setRenderedIds((previous) =>\n previous.includes(id) ? previous : previous.concat(id)\n );\n },\n [refRepository]\n );\n\n const handleUnmount = useCallback(\n (id: string) => {\n setRenderedIds((previous) => {\n const index = previous.indexOf(id);\n return index === -1\n ? previous\n : previous.slice(0, index).concat(previous.slice(index + 1));\n });\n refRepository.delete(id);\n },\n [refRepository]\n );\n\n useEffect(() => {\n // All nodes have been rendered.\n setRendered(!labels?.some((label) => !renderedIds.includes(label.id)));\n }, [labels, renderedIds]);\n\n useEffect(\n () => {\n onRendered?.(rendered ? refRepository : null);\n },\n // Dot not re-run effect when `onRendered` changed.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [/* onRendered, */ refRepository, rendered]\n );\n\n return (\n <React.Fragment>\n {labels?.map(({ text, label, /* position, */ id, edge }) =>\n label ? (\n <div\n key={id}\n className=\"line-label\"\n // style={{\n // left: position[0],\n // top: position[1],\n // }}\n >\n <LineLabelComponent\n id={id}\n edge={edge}\n label={label}\n onRendered={handleRenderer}\n onUnmount={handleUnmount}\n />\n </div>\n ) : (\n <LineTextComponent\n key={id}\n id={id}\n text={text!}\n // position={position}\n onRendered={handleRenderer}\n />\n )\n )}\n </React.Fragment>\n );\n}\n\nexport interface LineTextComponentProps {\n id: string;\n text: TextOptions;\n // position: PositionTuple;\n onRendered?: (id: string, element: HTMLElement | null) => void;\n // onUnmount?: (id: string) => void;\n}\n\nexport function LineTextComponent({\n id,\n text,\n // position,\n onRendered /* , onUnmount */,\n}: LineTextComponentProps): JSX.Element {\n const refCallback = useCallback(\n (element: HTMLDivElement) => {\n onRendered?.(id, element);\n },\n [id, onRendered]\n );\n\n return (\n <div\n className=\"line-label\"\n ref={refCallback}\n // style={{\n // left: position[0],\n // top: position[1],\n // ...text!.style,\n // }}\n style={text.style}\n >\n {text!.content}\n </div>\n );\n}\n\n// export const LineLabelComponentGroup = React.memo(LegacyLineLabelComponentGroup);\n\nexport interface LineLabelComponentProps {\n id: string;\n edge: DiagramEdge;\n label: LineLabelConf;\n onRendered?: (id: string, element: HTMLElement | null) => void;\n onUnmount?: (id: string) => void;\n}\n\nexport function LineLabelComponent({\n id,\n edge,\n label,\n onRendered,\n onUnmount,\n}: LineLabelComponentProps): JSX.Element | null {\n const useBrick = useMemo(\n () => (checkIfByTransform(label, { edge }) ? label.useBrick : null),\n [edge, label]\n );\n\n const memoizedData = useMemo(() => ({ edge }), [edge]);\n\n useEffect(() => {\n if (!useBrick) {\n // Keep the same time delay for reporting rendered.\n setTimeout(() => {\n onRendered?.(id, null);\n });\n }\n }, [id, onRendered, useBrick]);\n\n useEffect(\n () => {\n return () => {\n onUnmount?.(id);\n };\n },\n // Only unmount once\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n const refCallback = useCallback(\n (element: HTMLElement | null) => {\n if (element) {\n // Todo: correctly wait for `useBrick` in v3 to be rendered (after layout)\n // Wait a macro task to let `useBrick` to be rendered.\n setTimeout(() => {\n onRendered?.(id, element.parentElement);\n });\n }\n },\n [id, onRendered]\n );\n\n const ignoredCallback = useCallback(() => {\n setTimeout(() => {\n onRendered?.(id, null);\n });\n }, [id, onRendered]);\n\n if (!useBrick) {\n return null;\n }\n\n return (\n <ReactUseBrick\n refCallback={refCallback}\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore For v3 only\n ignoredCallback={ignoredCallback}\n useBrick={useBrick}\n data={memoizedData}\n />\n );\n}\n","import type {\n LineLabelConf,\n RenderedLine,\n RenderedLineLabel,\n TextOptions,\n} from \"../interfaces\";\n\nexport function getRenderedLineLabels(\n previous: RenderedLineLabel[],\n renderedLines: RenderedLine[],\n linePaths: Map<string, SVGPathElement | null>\n) {\n if (previous.length === 0 && renderedLines.length === 0) {\n return previous;\n }\n return renderedLines.flatMap(\n ({ line: { text, label, $id }, edge, labelSize, angle }) => {\n const path = linePaths.get($id);\n if ((!text && !label) || !path || !path.getAttribute(\"d\")) {\n return [] as RenderedLineLabel[];\n }\n\n let key: \"label\" | \"text\";\n let list: LineLabelConf[] | TextOptions[];\n if (label) {\n key = \"label\";\n list = ([] as LineLabelConf[]).concat(label);\n } else {\n key = \"text\";\n list = ([] as TextOptions[]).concat(text!);\n }\n\n // istanbul ignore next\n const {\n x: left,\n y: top,\n width,\n height,\n } = process.env.NODE_ENV === \"test\"\n ? { x: 10, y: 20, width: 300, height: 400 }\n : path.getBBox();\n\n // istanbul ignore next\n const pathLength =\n process.env.NODE_ENV === \"test\" ? 50 : path.getTotalLength();\n\n return list.map<RenderedLineLabel>((item) => {\n const placement = item.placement ?? \"center\";\n const offset = 0;\n // istanbul ignore next\n const point =\n process.env.NODE_ENV === \"test\"\n ? { x: 50, y: 50 }\n : path.getPointAtLength(\n placement === \"start\"\n ? Math.min(offset, pathLength / 2)\n : placement === \"end\"\n ? Math.max(pathLength - offset, pathLength / 2)\n : pathLength / 2\n );\n\n return {\n [key as \"label\"]: item as LineLabelConf,\n edge,\n position: [point.x, point.y],\n lineRect: { left, top, width, height },\n id: `${$id}-${placement}`,\n lineId: $id,\n placement,\n angle,\n size: labelSize?.[placement],\n };\n });\n }\n );\n}\n"],"names":["LineMaskComponent","_ref","lineId","rects","maskPrefix","renderedLineLabels","lineText","find","item","placement","lineRect","bgRect","padding","left","rect","top","width","height","React","id","x","y","fill","map","index","key","___CSS_LOADER_EXPORT___","push","module","toString","LineComponent","_line$overrides","_line$overrides2","line","edge","d","markers","linePaths","lineMaskRects","markerPrefix","activeLineMarkerPrefix","active","activeRelated","onLineClick","onLineDoubleClick","mask","has","$id","undefined","strokeColor","strokeWidth","interactStrokeWidth","overrides","expectVariant","markerStart","markerEnd","marker","variant","className","classNames","interactable","onClick","onDoubleClick","e","preventDefault","stopPropagation","style","cursor","stroke","ref","element","set","matchEdgeByFilter","filter","edgeType","concat","includes","type","checkIfByTransform","normalizeLinesAndMarkers","edges","lines","normalizedLines","normalizedLinesMap","WeakMap","_lines$find","_line$markers","label","restLineConf","computedLineConf","__secret_internals","legacyDoTransform","draw","uniqueId","DEFAULT_LINE_STROKE_COLOR","DEFAULT_LINE_STROKE_WIDTH","curveType","DEFAULT_LINE_CURVE_TYPE","DEFAULT_LINE_INTERACT_STROKE_WIDTH","normalizedMarkers","lineMarkers","arrow","_line$overrides$activ","_line$overrides$activ2","_placement","_type","offsetUnit","offset","addMarker","activeMarkerIndex","activeRelatedMarkerIndex","markerIndex","findIndex","InstanceApi_postSearchV3","objectId","data","options","http","post","_x","_x2","_x3","apply","this","arguments","InstanceApi_updateInstanceV2","instanceId","put","_x4","InstanceApi_createInstance","USER_VIEW_MODEL_ID","useUserView","query","userViewReady","setUserViewReady","useState","userViewIdRef","useRef","userViewNodesMap","setUserViewNodesMap","queue","useMemo","working","waitingTasks","async","task","nextTask","shift","error","console","createAsyncQueue","useEffect","namespace","list","fields","$eq","page","page_size","length","_userView$nodes","userView","Map","nodes","node","current","handleHttpError","getUserView","saveUserView","useCallback","userViewData","interceptorParams","ignoreLoadingBar","sameTarget","a","b","nodeId","source","target","getLineMaskRects","lineLabelsRefRepository","get","offsetWidth","offsetHeight","offsetLeft","offsetTop","adjustLineLabels","position","angle","size","_size","visibility","tempDirection","Math","floor","PI","direction","tangent","tan","offsetAngle","offsetSin","sin","offsetCos","cos","transform","DEFAULT_SCALE_RANGE_MIN","DEFAULT_SCALE_RANGE_MAX","getRenderedLines","renderedEdges","renderedNodes","renderedEdgeMap","renderedNodeMap","relatedNodes","renderedNode","renderedEdge","prepared","_markers$find$offset","_markers$find","_markers$find$offset2","_markers$find2","rest","startMarkerOffset","endMarkerOffset","points","doTwoNodesOverlap","_relatedNodes$get","_relatedNodes$get2","prepareRelatedNodes","addRelatedNodes","from","to","relates","Set","toNode","add","sourceDirection","getDirection","targetDirection","sourceRelates","getOrderedRelates","targetRelates","sourcePosition","indexOf","targetPosition","getPolyLinePoints","getDirectLinePoints","start","end","atan2","curveLine","labelSize","Boolean","sourceAngle","sx","sy","tx","ty","fixedAngle","sort","ax","ay","bx","by","NodeComponentGroup","nodeBricks","onRendered","rendered","setRendered","renderedIds","setRenderedIds","refRepository","handleRenderer","previous","handleUnmount","slice","delete","some","NodeComponent","onUnmount","_ref2","useBrick","_findNodeBrick","nodeType","findNodeBrick","memoizedData","setTimeout","refCallback","ignoredCallback","ReactUseBrick","ConnectLineComponent","connectLineState","connectLineTo","connecting","MarkerComponent","join","handleNodesMouseDown","event","nodesRefRepository","connectNodes","dragNodes","scale","setConnectLineState","setConnectLineTo","setManualLayoutStatus","setNodeMovement","onSwitchActiveTarget","onNodesConnect","findNode","match","contains","sourceType","nodeMatched","clientX","clientY","onMouseMove","onMouseUp","document","removeEventListener","eventTargets","composedPath","addEventListener","moved","movement","move","adjustNodesSize","nodePaddings","_element$offsetWidth","_element$offsetHeight","max","adjustNodesPosition","_nodesRefRepository$g","nodeContainer","parentElement","getRenderedEdges","_edges$map","getDummyNodes","count","Array","v","i","dummy","getDummyEdges","useRenderedDiagram","layout","originalLayout","manualLayoutStatus","nodeMovement","nodesRenderId","lineLabelsRenderId","layoutOptions","graph","setGraph","renderedDiagram","setRenderedDiagram","previousGraph","dagreLayoutOptions","nodePadding","dagreGraphOptions","rankdir","ranksep","edgesep","nodesep","pick","extractPartialRectTuple","dagre","Graph","setDefaultEdgeLabel","previousNode","getNode","setNode","setEdge","applyLayout","_edge$labelSize","labelpos","getDagreGraph","forceLayoutOptions","dummyNodesOnEdges","collide","dummyRadius","radiusDiff","strength","iterations","userViewNode","fx","fy","forceNodes","forceLinks","linkSimulation","forceLink","distance","l","simulation","forceSimulation","force","forceX","forceY","forceManyBody","forceCollide","radius","sqrt","stop","tick","ceil","log","alphaMin","alphaDecay","manuallyTickToTheEnd","getForceGraph","x0","y0","movedNode","_movedNode$x","_movedNode$y","getManualGraph","handleKeyboard","activeTarget","activeNode","activeEdge","keyCode","which","action","moveOnAxis","_node","axis","oppositeAxis","diff","candidates","abs","minBy","transformToCenter","canvasWidth","canvasHeight","scaleRange","Infinity","right","bottom","hw","hh","r","t","min","k","LineLabelComponentGroup","labels","text","LineLabelComponent","LineTextComponent","_ref3","content","_ref4","getRenderedLineLabels","renderedLines","flatMap","path","getAttribute","getBBox","pathLength","getTotalLength","_item$placement","point","getPointAtLength"],"sourceRoot":""}