vizcraft 1.11.0 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/README.md +26 -26
- package/dist/chunk-46IHGFPN.mjs +44 -0
- package/dist/chunk-TVRPABD2.js +44 -0
- package/dist/index.js +5 -5
- package/dist/index.mjs +1 -1
- package/dist/interaction.js +1 -1
- package/dist/interaction.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunk-4QBUPKXK.mjs +0 -44
- package/dist/chunk-XOBMAQC3.js +0 -44
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# vizcraft
|
|
2
2
|
|
|
3
|
+
## 1.12.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#128](https://github.com/ChipiKaf/vizcraft/pull/128) [`61da7de`](https://github.com/ChipiKaf/vizcraft/commit/61da7de14763e16d93cb4677e734bf70fd7f3133) Thanks [@ChipiKaf](https://github.com/ChipiKaf)! - Waypoint-aware edge endpoint anchoring: when an edge has waypoints, the source boundary anchor now aims toward the first waypoint and the target anchor aims toward the last waypoint, instead of toward the other node's center. This enables clean edge bundling where multiple edges sharing the same convergence waypoint anchor at the exact same perimeter point on the target node.
|
|
8
|
+
|
|
3
9
|
## 1.11.0
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -412,32 +412,32 @@ if (geo.isSelfLoop) {
|
|
|
412
412
|
} // self-loop flag
|
|
413
413
|
```
|
|
414
414
|
|
|
415
|
-
| Method | Description
|
|
416
|
-
| ------------------------ |
|
|
417
|
-
| `.straight()` | Direct line (default). With waypoints → polyline.
|
|
418
|
-
| `.curved()` | Smooth bezier curve. With waypoints → Catmull-Rom spline.
|
|
419
|
-
| `.orthogonal()` | Right-angle elbows.
|
|
420
|
-
| `.routing(mode)` | Set mode programmatically.
|
|
421
|
-
| `.via(x, y)` | Add an intermediate waypoint (chainable).
|
|
422
|
-
| `.label(text, opts?)` | Add a text label. Chain multiple calls for multi-position labels. `opts.position` can be `'start'`, `'mid'` (default), or `'end'`.
|
|
423
|
-
| `.richLabel(cb, opts?)` | Add a rich / mixed-format label (nested SVG `<tspan>`s). Use `.newline()` in the callback to control line breaks.
|
|
424
|
-
| `.arrow([enabled])` | Shorthand for arrow markers. `true`/no-arg → markerEnd arrow. `'both'` → both ends. `'start'`/`'end'` → specific end. `false` → none.
|
|
425
|
-
| `.markerEnd(type)` | Set marker type at the target end. See `EdgeMarkerType`.
|
|
426
|
-
| `.markerStart(type)` | Set marker type at the source end. See `EdgeMarkerType`.
|
|
427
|
-
| `.fromPort(portId)` | Connect from a specific named port on the source node.
|
|
428
|
-
| `.toPort(portId)` | Connect to a specific named port on the target node.
|
|
429
|
-
| `.fromAngle(deg)` | Set a fixed perimeter angle (degrees, 0 = right, 90 = down) on the source node.
|
|
430
|
-
| `.toAngle(deg)` | Set a fixed perimeter angle (degrees, 0 = right, 90 = down) on the target node.
|
|
431
|
-
| `.from(nodeId)` | Attach the source end to an existing node (useful with `danglingEdge()`).
|
|
432
|
-
| `.to(nodeId)` | Attach the target end to an existing node (useful with `danglingEdge()`).
|
|
433
|
-
| `.fromAt(pos)` | Set the free-endpoint coordinate for the source end (`{ x, y }`).
|
|
434
|
-
| `.toAt(pos)` | Set the free-endpoint coordinate for the target end (`{ x, y }`).
|
|
435
|
-
| `.stroke(color, width?)` | Set stroke color and optional width.
|
|
436
|
-
| `.fill(color)` | Set fill color.
|
|
437
|
-
| `.opacity(value)` | Set opacity (0–1).
|
|
438
|
-
| `.dashed()` | Dashed stroke (`8, 4`).
|
|
439
|
-
| `.dotted()` | Dotted stroke (`2, 4`).
|
|
440
|
-
| `.dash(pattern)` | Custom SVG dasharray or preset (`'dashed'`, `'dotted'`, `'dash-dot'`, `'solid'`).
|
|
415
|
+
| Method | Description |
|
|
416
|
+
| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
417
|
+
| `.straight()` | Direct line (default). With waypoints → polyline. |
|
|
418
|
+
| `.curved()` | Smooth bezier curve. With waypoints → Catmull-Rom spline. |
|
|
419
|
+
| `.orthogonal()` | Right-angle elbows. |
|
|
420
|
+
| `.routing(mode)` | Set mode programmatically. |
|
|
421
|
+
| `.via(x, y)` | Add an intermediate waypoint (chainable). Waypoints also influence endpoint anchoring — the source boundary anchor aims toward the first waypoint and the target anchor aims toward the last, enabling clean edge bundling. |
|
|
422
|
+
| `.label(text, opts?)` | Add a text label. Chain multiple calls for multi-position labels. `opts.position` can be `'start'`, `'mid'` (default), or `'end'`. |
|
|
423
|
+
| `.richLabel(cb, opts?)` | Add a rich / mixed-format label (nested SVG `<tspan>`s). Use `.newline()` in the callback to control line breaks. |
|
|
424
|
+
| `.arrow([enabled])` | Shorthand for arrow markers. `true`/no-arg → markerEnd arrow. `'both'` → both ends. `'start'`/`'end'` → specific end. `false` → none. |
|
|
425
|
+
| `.markerEnd(type)` | Set marker type at the target end. See `EdgeMarkerType`. |
|
|
426
|
+
| `.markerStart(type)` | Set marker type at the source end. See `EdgeMarkerType`. |
|
|
427
|
+
| `.fromPort(portId)` | Connect from a specific named port on the source node. |
|
|
428
|
+
| `.toPort(portId)` | Connect to a specific named port on the target node. |
|
|
429
|
+
| `.fromAngle(deg)` | Set a fixed perimeter angle (degrees, 0 = right, 90 = down) on the source node. |
|
|
430
|
+
| `.toAngle(deg)` | Set a fixed perimeter angle (degrees, 0 = right, 90 = down) on the target node. |
|
|
431
|
+
| `.from(nodeId)` | Attach the source end to an existing node (useful with `danglingEdge()`). |
|
|
432
|
+
| `.to(nodeId)` | Attach the target end to an existing node (useful with `danglingEdge()`). |
|
|
433
|
+
| `.fromAt(pos)` | Set the free-endpoint coordinate for the source end (`{ x, y }`). |
|
|
434
|
+
| `.toAt(pos)` | Set the free-endpoint coordinate for the target end (`{ x, y }`). |
|
|
435
|
+
| `.stroke(color, width?)` | Set stroke color and optional width. |
|
|
436
|
+
| `.fill(color)` | Set fill color. |
|
|
437
|
+
| `.opacity(value)` | Set opacity (0–1). |
|
|
438
|
+
| `.dashed()` | Dashed stroke (`8, 4`). |
|
|
439
|
+
| `.dotted()` | Dotted stroke (`2, 4`). |
|
|
440
|
+
| `.dash(pattern)` | Custom SVG dasharray or preset (`'dashed'`, `'dotted'`, `'dash-dot'`, `'solid'`). |
|
|
441
441
|
|
|
442
442
|
**`EdgeMarkerType`** values: `'none'`, `'arrow'`, `'arrowOpen'`, `'diamond'`, `'diamondOpen'`, `'circle'`, `'circleOpen'`, `'square'`, `'bar'`, `'halfArrow'`.
|
|
443
443
|
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import {d,o,e,j as j$1,n,i}from'./chunk-I5FQBS5N.mjs';function vt(t,e,o,n={}){let r=n.minZoom??.1,i=n.maxZoom??5,l=n.zoomOnWheel??true,s=n.panOnDrag??true,c=1,u={x:0,y:0},a=false,y={x:0,y:0},v=[],E=()=>{v.forEach(d=>d({zoom:c,pan:u}));},b=()=>{e.setAttribute("transform",`translate(${u.x}, ${u.y}) scale(${c})`),E();},x=(d,m)=>{let P=Math.max(r,Math.min(i,d));if(P!==c){if(m){let w=P/c;u.x=m.x-(m.x-u.x)*w,u.y=m.y-(m.y-u.y)*w;}c=P,b();}},p=d=>{u={...d},b();},g=(d=20)=>{if(!o.viewBox)return null;let m=t.getBoundingClientRect();if(m.width===0||m.height===0)return null;let P=m.width-d*2,w=m.height-d*2,C=P/o.viewBox.w,N=w/o.viewBox.h,A=Math.min(C,N);A=Math.max(r,Math.min(i,A));let H=o.viewBox.w*A,tt=o.viewBox.h*A,et={x:(m.width-H)/2,y:(m.height-tt)/2};return {zoom:A,pan:et}},h=(d=20)=>{let m=g(d);m&&(c=m.zoom,u=m.pan,b());},V=()=>{n.initialZoom==="fit"||n.initialZoom===void 0?h():(x(n.initialZoom),p({x:0,y:0}));},z=d=>{let m=o.nodes.find(A=>A.id===d);if(!m)return;let P=t.getBoundingClientRect();if(P.width===0||P.height===0)return;let w=Math.max(r,Math.min(i,2)),C=P.width/2-m.pos.x*w,N=P.height/2-m.pos.y*w;c=w,u={x:C,y:N},b();},T=d=>{if(!l)return;d.preventDefault();let m=.002,P=-d.deltaY;d.deltaMode===1&&(P*=15);let w=Math.exp(P*m),C=c*w,N=t.getBoundingClientRect(),A={x:d.clientX-N.left,y:d.clientY-N.top};x(C,A);},S=d=>{if(!s)return;let m=d.target;(m.closest("[data-viz-role]")||m.closest(".viz-node")||m.closest(".viz-edge"))&&m!==t&&m!==e||(d.preventDefault(),a=true,y={x:d.clientX,y:d.clientY},t.setPointerCapture(d.pointerId),t.style.cursor="grabbing");},R=d=>{if(!a||!s)return;d.preventDefault();let m=d.clientX-y.x,P=d.clientY-y.y;u.x+=m,u.y+=P,y={x:d.clientX,y:d.clientY},b();},$=d=>{!a||!s||(a=false,t.releasePointerCapture(d.pointerId),t.style.cursor="");},f=d=>{let m=d.target;m.closest("[data-viz-role]")||m.closest(".viz-node")||m.closest(".viz-edge")||h();},L={passive:false};t.addEventListener("wheel",T,L),t.addEventListener("pointerdown",S),t.addEventListener("pointermove",R),t.addEventListener("pointerup",$),t.addEventListener("pointercancel",$),t.addEventListener("dblclick",f);let M=()=>{t.removeEventListener("wheel",T),t.removeEventListener("pointerdown",S),t.removeEventListener("pointermove",R),t.removeEventListener("pointerup",$),t.removeEventListener("pointercancel",$),t.removeEventListener("dblclick",f),v.length=0;};return requestAnimationFrame(()=>{V();}),{get zoom(){return c},get pan(){return {...u}},setZoom:x,setPan:p,fitToContent:h,zoomToNode:z,reset:V,onChange(d){return v.push(d),()=>{let m=v.indexOf(d);m!==-1&&v.splice(m,1);}},destroy:M}}var nt=`
|
|
2
|
+
.viz-tooltip {
|
|
3
|
+
position: absolute;
|
|
4
|
+
pointer-events: none;
|
|
5
|
+
z-index: 9999;
|
|
6
|
+
max-width: 320px;
|
|
7
|
+
padding: 8px 12px;
|
|
8
|
+
border-radius: 6px;
|
|
9
|
+
font-size: 13px;
|
|
10
|
+
line-height: 1.4;
|
|
11
|
+
background: var(--viz-tooltip-bg, #1a1a2e);
|
|
12
|
+
color: var(--viz-tooltip-fg, #e2e8f0);
|
|
13
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
|
|
14
|
+
opacity: 0;
|
|
15
|
+
transition: opacity 0.15s ease-out;
|
|
16
|
+
white-space: pre-wrap;
|
|
17
|
+
word-break: break-word;
|
|
18
|
+
box-sizing: border-box;
|
|
19
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
20
|
+
}
|
|
21
|
+
.viz-tooltip[data-visible="true"] {
|
|
22
|
+
opacity: 1;
|
|
23
|
+
}
|
|
24
|
+
.viz-tooltip-title {
|
|
25
|
+
font-weight: 600;
|
|
26
|
+
margin-bottom: 4px;
|
|
27
|
+
font-size: 14px;
|
|
28
|
+
}
|
|
29
|
+
.viz-tooltip-section {
|
|
30
|
+
display: flex;
|
|
31
|
+
gap: 6px;
|
|
32
|
+
padding: 2px 0;
|
|
33
|
+
}
|
|
34
|
+
.viz-tooltip-section-label {
|
|
35
|
+
color: var(--viz-tooltip-label, #94a3b8);
|
|
36
|
+
flex-shrink: 0;
|
|
37
|
+
}
|
|
38
|
+
.viz-tooltip-section-label::after {
|
|
39
|
+
content: ':';
|
|
40
|
+
}
|
|
41
|
+
.viz-tooltip-section-value {
|
|
42
|
+
color: var(--viz-tooltip-fg, #e2e8f0);
|
|
43
|
+
}
|
|
44
|
+
`;function W(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function ot(t){if(typeof t=="string")return `<span>${W(t)}</span>`;let e="";t.title&&(e+=`<div class="viz-tooltip-title">${W(t.title)}</div>`);for(let o of t.sections)e+=`<div class="viz-tooltip-section"><span class="viz-tooltip-section-label">${W(o.label)}</span><span class="viz-tooltip-section-value">${W(o.value)}</span></div>`;return e}function it(t,e,o){let n=e.getBoundingClientRect(),r=o.getBoundingClientRect(),i=8,l=t.offsetWidth,s=t.offsetHeight,c=n.left-r.left+n.width/2-l/2,u=n.top-r.top-s-i;u<0&&(u=n.bottom-r.top+i),c<0&&(c=4),c+l>o.clientWidth&&(c=o.clientWidth-l-4),t.style.left=`${c}px`,t.style.top=`${u}px`;}function $t(t,e,o,n,r){let i=r?.delay??300,l=o,s=n,c=t.querySelector("style[data-viz-tooltip-css]");c||(c=document.createElement("style"),c.setAttribute("data-viz-tooltip-css",""),c.textContent=nt,t.appendChild(c));let u=document.createElement("div");u.className="viz-tooltip",u.setAttribute("role","tooltip"),u.setAttribute("aria-hidden","true"),t.appendChild(u),getComputedStyle(t).position==="static"&&(t.style.position="relative");let y=null,v=null;function E($,f){u.innerHTML=ot(f),u.style.display="block",u.setAttribute("data-visible","false"),requestAnimationFrame(()=>{it(u,$,t),u.setAttribute("data-visible","true"),u.setAttribute("aria-hidden","false");});}function b(){y!==null&&(clearTimeout(y),y=null),u.setAttribute("data-visible","false"),u.setAttribute("aria-hidden","true"),v=null;}function x($){let f=$ instanceof Element?$:null;for(;f&&f!==e;){let L=f.getAttribute("data-viz-role");if(L==="compartment-entry"){let d=f.getAttribute("data-entry"),m=f.parentElement;for(;m&&m!==e&&!(m.getAttribute("data-viz-role")==="node-group"&&m.getAttribute("data-id"));)m=m.parentElement;if(m&&d){let P=m.getAttribute("data-id"),w=f.getAttribute("data-compartment");if(P&&w){let A=l.get(P)?.compartments?.find(H=>H.id===w)?.entries?.find(H=>H.id===d);if(A?.tooltip)return {content:A.tooltip,group:f}}}}let M=f.getAttribute("data-id");if(L==="node-group"&&M){let d=l.get(M);return d?.tooltip?{content:d.tooltip,group:f}:null}if(L==="edge-group"&&M){let d=s.get(M);return d?.tooltip?{content:d.tooltip,group:f}:null}f=f.parentElement;}return null}let p=null;function g($){let f=$ instanceof Element?$:null,L=null;for(;f&&f!==e;){if(f.getAttribute("data-viz-role")==="compartment-entry"){L=f;break}f=f.parentElement;}L!==p&&(p&&p.classList.remove("viz-entry-hover"),p=L,p&&p.classList.add("viz-entry-hover"));}function h($){g($.target);let f=x($.target);if(!f)return;let{content:L,group:M}=f;M!==v&&(b(),v=M,y=setTimeout(()=>{E(M,L);},i));}function V($){g(null);let f=x($.target);f&&f.group===v&&b();}function z($){g($.target);let f=x($.target);(!f||f.group!==v)&&b();}function T($){let f=x($.target);f&&(b(),v=f.group,E(f.group,f.content));}function S(){b();}function R($){$.key==="Escape"&&b();}return e.addEventListener("pointerenter",h,true),e.addEventListener("pointerleave",V,true),e.addEventListener("pointermove",z,true),e.addEventListener("focusin",T,true),e.addEventListener("focusout",S,true),e.addEventListener("keydown",R,true),{destroy(){b(),e.removeEventListener("pointerenter",h,true),e.removeEventListener("pointerleave",V,true),e.removeEventListener("pointermove",z,true),e.removeEventListener("focusin",T,true),e.removeEventListener("focusout",S,true),e.removeEventListener("keydown",R,true),u.remove(),c?.remove();},updateData($,f){l=$,s=f;}}}function rt(t,e){let o=e.x-t.x,n=e.y-t.y;return Math.atan2(n,o)*180/Math.PI}function Q(t,e$1,o$1){let n$1=o$1.anchor??"boundary",r=o$1.fromAt,i$1=o$1.toAt,l=o$1.waypoints,s=l&&l.length>0?l[0]:e$1?d(e$1):i$1??{x:0,y:0},c=l&&l.length>0?l[l.length-1]:t?d(t):r??{x:0,y:0},u=o$1.fromAngle,a=o$1.toAngle;if(o$1.straightLine&&t&&e$1){let E=d(t),b=d(e$1),x=o(e(t)),p=o(e(e$1)),g=x.width/2,h=x.height/2,V=p.width/2,z=p.height/2,T=Math.max(E.x-g,b.x-V),S=Math.min(E.x+g,b.x+V),R=Math.max(E.y-h,b.y-z),$=Math.min(E.y+h,b.y+z);if(T<S){let f=(T+S)/2,L=E.y<=b.y,M=Math.atan2(L?h:-h,f-E.x)*180/Math.PI,d=Math.atan2(L?-z:z,f-b.x)*180/Math.PI;(o$1.straightLine===true||o$1.straightLine==="from")&&u===void 0&&(u=M),(o$1.straightLine===true||o$1.straightLine==="to")&&a===void 0&&(a=d);}else if(R<$){let f=(R+$)/2,L=E.x<=b.x,M=Math.atan2(f-E.y,L?g:-g)*180/Math.PI,d=Math.atan2(f-b.y,L?-V:V)*180/Math.PI;(o$1.straightLine===true||o$1.straightLine==="from")&&u===void 0&&(u=M),(o$1.straightLine===true||o$1.straightLine==="to")&&a===void 0&&(a=d);}else {let f=rt(E,b);(o$1.straightLine===true||o$1.straightLine==="from")&&u===void 0&&(u=f),(o$1.straightLine===true||o$1.straightLine==="to")&&a===void 0&&(a=f+180);}}let y;t?u!==void 0?y=j$1(t,u):y=o$1.fromPort?n(t,o$1.fromPort)??i(t,s,n$1):i(t,s,n$1):y=r??{x:0,y:0};let v;return e$1?a!==void 0?v=j$1(e$1,a):v=o$1.toPort?n(e$1,o$1.toPort)??i(e$1,c,n$1):i(e$1,c,n$1):v=i$1??{x:0,y:0},{start:y,end:v}}function U(t,e,o="straight",n){switch(o){case "curved":return ct(t,e,n);case "orthogonal":return ut(t,e,n);default:return st(t,e,n)}}function st(t,e,o){let n=[t,...o??[],e],r=n.map((l,s)=>s===0?`M ${l.x} ${l.y}`:`L ${l.x} ${l.y}`),i=j(n);return {d:r.join(" "),...i}}function ct(t,e,o){if(o&&o.length>0)return lt(t,e,o);let n=K(t,e),r=`M ${t.x} ${t.y} Q ${n.x} ${n.y} ${e.x} ${e.y}`,i=k(t,n,e,.5),l=k(t,n,e,O),s=k(t,n,e,Z);return {d:r,mid:i,start:l,end:s}}function K(t,e){let o=(t.x+e.x)/2,n=(t.y+e.y)/2,r=e.x-t.x,i=e.y-t.y,l=Math.sqrt(r*r+i*i)||1,s=l*.2;return {x:o+-i/l*s,y:n+r/l*s}}function k(t,e,o,n){let r=1-n;return {x:r*r*t.x+2*r*n*e.x+n*n*o.x,y:r*r*t.y+2*r*n*e.y+n*n*o.y}}function lt(t,e,o){let n=[t,...o,e];if(n.length===2){let s=K(t,e);return {d:`M ${t.x} ${t.y} Q ${s.x} ${s.y} ${e.x} ${e.y}`,mid:k(t,s,e,.5),start:k(t,s,e,O),end:k(t,s,e,Z)}}let r=`M ${n[0].x} ${n[0].y}`,i=.3;for(let s=0;s<n.length-1;s++){let c=n[Math.max(s-1,0)],u=n[s],a=n[s+1],y=n[Math.min(s+2,n.length-1)],v=u.x+(a.x-c.x)*i,E=u.y+(a.y-c.y)*i,b=a.x-(y.x-u.x)*i,x=a.y-(y.y-u.y)*i;r+=` C ${v} ${E}, ${b} ${x}, ${a.x} ${a.y}`;}let l=j(n);return {d:r,...l}}function ut(t,e,o){return o&&o.length>0?dt(t,e,o):at(t,e)}function at(t,e){let o=Math.abs(e.x-t.x),n=Math.abs(e.y-t.y),r,i,l,s;if(o>=n){let c=(t.x+e.x)/2;r=`M ${t.x} ${t.y} L ${c} ${t.y} L ${c} ${e.y} L ${e.x} ${e.y}`;let u=[t,{x:c,y:t.y},{x:c,y:e.y},e];i=I(u,.5),l=I(u,O),s=I(u,Z);}else {let c=(t.y+e.y)/2;r=`M ${t.x} ${t.y} L ${t.x} ${c} L ${e.x} ${c} L ${e.x} ${e.y}`;let u=[t,{x:t.x,y:c},{x:e.x,y:c},e];i=I(u,.5),l=I(u,O),s=I(u,Z);}return {d:r,mid:i,start:l,end:s}}function dt(t,e,o){let n=[t,...o,e],r=`M ${n[0].x} ${n[0].y}`,i=[n[0]];for(let s=1;s<n.length;s++){let c=n[s-1],u=n[s];r+=` L ${u.x} ${c.y} L ${u.x} ${u.y}`,i.push({x:u.x,y:c.y}),i.push(u);}let l=j(i);return {d:r,...l}}var O=.15,Z=.85;function I(t,e){if(t.length===0)return {x:0,y:0};if(t.length===1)return t[0];let o=0;for(let i=1;i<t.length;i++){let l=t[i].x-t[i-1].x,s=t[i].y-t[i-1].y;o+=Math.sqrt(l*l+s*s);}let n=o*e,r=0;for(let i=1;i<t.length;i++){let l=t[i].x-t[i-1].x,s=t[i].y-t[i-1].y,c=Math.sqrt(l*l+s*s);if(r+c>=n){let u=c===0?0:(n-r)/c;return {x:t[i-1].x+l*u,y:t[i-1].y+s*u}}r+=c;}return t[t.length-1]}function j(t){return {start:I(t,O),mid:I(t,.5),end:I(t,Z)}}function ft(t){return t?"w"in t&&"h"in t?{w:t.w,h:t.h}:"r"in t?{w:t.r*2,h:t.r*2}:"rx"in t&&"ry"in t?{w:t.rx*2,h:t.ry*2}:"size"in t?{w:t.size,h:t.size}:{w:60,h:60}:{w:60,h:60}}function Lt(t,e$1){let o=d(t),n=ft(e(t)),r=n.w,i=n.h,l=e$1.loopSide||"top",s=e$1.loopSize||30,c=Math.min(20,(l==="top"||l==="bottom"?r:i)*.8),u="",a,y,v,E,b;switch(l){case "top":{let x=o.x-c/2,p=o.y-i/2,g=o.x+c/2,h=o.y-i/2,V=p-s*1.5;u=`M ${x} ${p} C ${x-c/2} ${V}, ${g+c/2} ${V}, ${g} ${h}`,E={x,y:p},b={x:g,y:h},a={x,y:p-s*.2},y={x:o.x,y:p-s},v={x:g,y:h-s*.2};break}case "bottom":{let x=o.x-c/2,p=o.y+i/2,g=o.x+c/2,h=o.y+i/2,V=p+s*1.5;u=`M ${x} ${p} C ${x-c/2} ${V}, ${g+c/2} ${V}, ${g} ${h}`,E={x,y:p},b={x:g,y:h},a={x,y:p+s*.2},y={x:o.x,y:p+s},v={x:g,y:h+s*.2};break}case "left":{let x=o.x-r/2,p=o.y-c/2,g=o.x-r/2,h=o.y+c/2,V=x-s*1.5;u=`M ${x} ${p} C ${V} ${p-c/2}, ${V} ${h+c/2}, ${g} ${h}`,E={x,y:p},b={x:g,y:h},a={x:x-s*.2,y:p},y={x:x-s,y:o.y},v={x:g-s*.2,y:h};break}case "right":{let x=o.x+r/2,p=o.y-c/2,g=o.x+r/2,h=o.y+c/2,V=x+s*1.5;u=`M ${x} ${p} C ${V} ${p-c/2}, ${V} ${h+c/2}, ${g} ${h}`,E={x,y:p},b={x:g,y:h},a={x:x+s*.2,y:p},y={x:x+s,y:o.y},v={x:g+s*.2,y:h};break}}return {d:u,start:a,mid:y,end:v,exitPoint:E,entryPoint:b}}function yt(t,e){return t.x>=e.x&&t.x<=e.x+e.w&&t.y>=e.y&&t.y<=e.y+e.h}function J(t,e,o){let n=t.x-e.x,r=t.y-e.y;return n*n+r*r<=o*o}function q(t,e){let o=t.x-e.x,n=t.y-e.y;return o*o+n*n}function mt(t,e,o){let n=q(e,o);if(n===0)return q(t,e);let r=((t.x-e.x)*(o.x-e.x)+(t.y-e.y)*(o.y-e.y))/n;return r=Math.max(0,Math.min(1,r)),q(t,{x:e.x+r*(o.x-e.x),y:e.y+r*(o.y-e.y)})}function pt(t,e=10){let o=t.match(/[a-zA-Z][^a-zA-Z]*/g);if(!o)return [];let n=[],r=0,i=0,l=0,s=0;for(let c of o){let u=c[0],a=c.substring(1).trim().split(/[\s,]+/).filter(y=>y!=="").map(parseFloat);switch(u.toUpperCase()){case "M":a.length>=2&&(r=a[0],i=a[1],l=r,s=i,n.push({x:r,y:i}));break;case "L":for(let y=0;y<a.length;y+=2)r=a[y],i=a[y+1],n.push({x:r,y:i});break;case "Q":for(let y=0;y<a.length;y+=4){let v=a[y],E=a[y+1],b=a[y+2],x=a[y+3];for(let p=1;p<=e;p++){let g=p/e,h=1-g,V=h*h*r+2*h*g*v+g*g*b,z=h*h*i+2*h*g*E+g*g*x;n.push({x:V,y:z});}r=b,i=x;}break;case "C":for(let y=0;y<a.length;y+=6){let v=a[y],E=a[y+1],b=a[y+2],x=a[y+3],p=a[y+4],g=a[y+5];for(let h=1;h<=e;h++){let V=h/e,z=1-V,T=z*z*z*r+3*z*z*V*v+3*z*V*V*b+V*V*V*p,S=z*z*z*i+3*z*z*V*E+3*z*V*V*x+V*V*V*g;n.push({x:T,y:S});}r=p,i=g;}break;case "Z":r=l,i=s,n.push({x:r,y:i});break}}return n}function xt(t,e){if(e.length===0)return 1/0;if(e.length===1)return Math.sqrt(q(t,e[0]));let o=1/0;for(let n=0;n<e.length-1;n++){let r=mt(t,e[n],e[n+1]);r<o&&(o=r);}return Math.sqrt(o)}function X(t){let e=0,o=0,n=t.shape,r=t.runtime?.x??t.pos.x,i=t.runtime?.y??t.pos.y;return t.runtime?.width!==void 0?e=t.runtime.width:"w"in n?e=n.w:"r"in n?e=n.r*2:"rx"in n&&"ry"in n?(e=n.rx*2,o=n.ry*2):"size"in n?e=n.size:"outerR"in n&&(e=n.outerR*2),t.runtime?.height!==void 0?o=t.runtime.height:"h"in n?o=n.h:o===0&&(o=e),{x:r-e/2,y:i-o/2,w:e,h:o}}function ht(t,e){let o=X(t);if(!yt(e,o))return false;let n=t.shape,r={x:t.runtime?.x??t.pos.x,y:t.runtime?.y??t.pos.y};if(n.kind==="circle"){let i=t.runtime?.radius??n.r;return J(e,r,i)}if(n.kind==="ellipse"){let i=t.runtime?.width!==void 0?t.runtime.width/2:n.rx,l=t.runtime?.height!==void 0?t.runtime.height/2:n.ry,s=e.x-r.x,c=e.y-r.y;return s*s/(i*i)+c*c/(l*l)<=1}return true}function gt(t,e){if(!t.compartments||t.compartments.length===0)return;let o={x:t.runtime?.x??t.pos.x,y:t.runtime?.y??t.pos.y},n=X(t),r=o.y-n.h/2,i=e.y-r;for(let l of t.compartments)if(i>=l.y&&i<l.y+l.height)return l.id}function Vt(t,e,o){if(!t.compartments)return;let n=t.compartments.find(c=>c.id===e);if(!n?.entries||n.entries.length===0)return;let r={x:t.runtime?.x??t.pos.x,y:t.runtime?.y??t.pos.y},i=X(t),l=r.y-i.h/2,s=o.y-l-n.y;for(let c of n.entries)if(s>=c.y&&s<c.y+c.height)return c.id}function At(t,e,o={}){let{edgeTolerance:n=5,portTolerance:r=10}=o;for(let i of t.nodes){if(!i.ports||i.ports.length===0)continue;let l={x:i.runtime?.x??i.pos.x,y:i.runtime?.y??i.pos.y};for(let s of i.ports){let c={x:l.x+s.offset.x,y:l.y+s.offset.y};if(J(e,c,r))return {type:"port",nodeId:i.id,portId:s.id,position:c}}}for(let i=t.nodes.length-1;i>=0;i--){let l=t.nodes[i];if(ht(l,e)){let s=gt(l,e),c=s!==void 0?Vt(l,s,e):void 0;return {type:"node",id:l.id,compartmentId:s,entryId:c}}}for(let i=t.edges.length-1;i>=0;i--){let l=t.edges[i],s=bt(t,l.id,e),c=l.hitArea??n;if(s<=c)return {type:"edge",id:l.id}}return null}function Tt(t,e){let o=[];for(let n of t.nodes){let r=X(n);!(r.x>e.x+e.w||r.x+r.w<e.x||r.y>e.y+e.h||r.y+r.h<e.y)&&o.push({type:"node",id:n.id});}for(let n of t.edges){let r=n.from?t.nodes.find(E=>E.id===n.from):void 0,i=n.to?t.nodes.find(E=>E.id===n.to):void 0;if(n.from&&!r||n.to&&!i||!r&&!n.fromAt&&!i&&!n.toAt)continue;let l=r?{x:r.runtime?.x??r.pos.x,y:r.runtime?.y??r.pos.y}:n.fromAt??{x:0,y:0},s=i?{x:i.runtime?.x??i.pos.x,y:i.runtime?.y??i.pos.y}:n.toAt??{x:0,y:0},c=Math.min(l.x,s.x)-10,u=Math.max(l.x,s.x)+10,a=Math.min(l.y,s.y)-10,y=Math.max(l.y,s.y)+10;!(c>e.x+e.w||u<e.x||a>e.y+e.h||y<e.y)&&o.push({type:"edge",id:n.id});}return o}function St(t,e,o){let{maxDistance:n}=o,r=null,i=n*n;for(let l of t.nodes){if(!l.ports)continue;let s={x:l.runtime?.x??l.pos.x,y:l.runtime?.y??l.pos.y};for(let c of l.ports){let u={x:s.x+c.offset.x,y:s.y+c.offset.y},a=q(e,u);a<=i&&(i=a,r={nodeId:l.id,portId:c.id,position:u,distance:Math.sqrt(a)});}}return r}function bt(t,e,o){let n=t.edges.find(a=>a.id===e);if(!n)return 1/0;let r=n.from?t.nodes.find(a=>a.id===n.from):null,i=n.to?t.nodes.find(a=>a.id===n.to):null;if(n.from&&!r||n.to&&!i||!r&&!n.fromAt&&!i&&!n.toAt)return 1/0;let{start:l,end:s}=Q(r??null,i??null,n),c=U(l,s,n.routing,n.waypoints),u=pt(c.d,10);return xt(o,u)}export{vt as a,nt as b,$t as c,rt as d,Q as e,U as f,Lt as g,yt as h,q as i,X as j,At as k,Tt as l,St as m,bt as n};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
'use strict';var chunkOZAFCKI7_js=require('./chunk-OZAFCKI7.js');function vt(t,e,o,n={}){let r=n.minZoom??.1,i=n.maxZoom??5,l=n.zoomOnWheel??true,s=n.panOnDrag??true,c=1,u={x:0,y:0},a=false,y={x:0,y:0},v=[],E=()=>{v.forEach(d=>d({zoom:c,pan:u}));},b=()=>{e.setAttribute("transform",`translate(${u.x}, ${u.y}) scale(${c})`),E();},x=(d,m)=>{let P=Math.max(r,Math.min(i,d));if(P!==c){if(m){let w=P/c;u.x=m.x-(m.x-u.x)*w,u.y=m.y-(m.y-u.y)*w;}c=P,b();}},p=d=>{u={...d},b();},g=(d=20)=>{if(!o.viewBox)return null;let m=t.getBoundingClientRect();if(m.width===0||m.height===0)return null;let P=m.width-d*2,w=m.height-d*2,C=P/o.viewBox.w,N=w/o.viewBox.h,A=Math.min(C,N);A=Math.max(r,Math.min(i,A));let H=o.viewBox.w*A,tt=o.viewBox.h*A,et={x:(m.width-H)/2,y:(m.height-tt)/2};return {zoom:A,pan:et}},h=(d=20)=>{let m=g(d);m&&(c=m.zoom,u=m.pan,b());},V=()=>{n.initialZoom==="fit"||n.initialZoom===void 0?h():(x(n.initialZoom),p({x:0,y:0}));},z=d=>{let m=o.nodes.find(A=>A.id===d);if(!m)return;let P=t.getBoundingClientRect();if(P.width===0||P.height===0)return;let w=Math.max(r,Math.min(i,2)),C=P.width/2-m.pos.x*w,N=P.height/2-m.pos.y*w;c=w,u={x:C,y:N},b();},T=d=>{if(!l)return;d.preventDefault();let m=.002,P=-d.deltaY;d.deltaMode===1&&(P*=15);let w=Math.exp(P*m),C=c*w,N=t.getBoundingClientRect(),A={x:d.clientX-N.left,y:d.clientY-N.top};x(C,A);},S=d=>{if(!s)return;let m=d.target;(m.closest("[data-viz-role]")||m.closest(".viz-node")||m.closest(".viz-edge"))&&m!==t&&m!==e||(d.preventDefault(),a=true,y={x:d.clientX,y:d.clientY},t.setPointerCapture(d.pointerId),t.style.cursor="grabbing");},R=d=>{if(!a||!s)return;d.preventDefault();let m=d.clientX-y.x,P=d.clientY-y.y;u.x+=m,u.y+=P,y={x:d.clientX,y:d.clientY},b();},$=d=>{!a||!s||(a=false,t.releasePointerCapture(d.pointerId),t.style.cursor="");},f=d=>{let m=d.target;m.closest("[data-viz-role]")||m.closest(".viz-node")||m.closest(".viz-edge")||h();},L={passive:false};t.addEventListener("wheel",T,L),t.addEventListener("pointerdown",S),t.addEventListener("pointermove",R),t.addEventListener("pointerup",$),t.addEventListener("pointercancel",$),t.addEventListener("dblclick",f);let M=()=>{t.removeEventListener("wheel",T),t.removeEventListener("pointerdown",S),t.removeEventListener("pointermove",R),t.removeEventListener("pointerup",$),t.removeEventListener("pointercancel",$),t.removeEventListener("dblclick",f),v.length=0;};return requestAnimationFrame(()=>{V();}),{get zoom(){return c},get pan(){return {...u}},setZoom:x,setPan:p,fitToContent:h,zoomToNode:z,reset:V,onChange(d){return v.push(d),()=>{let m=v.indexOf(d);m!==-1&&v.splice(m,1);}},destroy:M}}var nt=`
|
|
2
|
+
.viz-tooltip {
|
|
3
|
+
position: absolute;
|
|
4
|
+
pointer-events: none;
|
|
5
|
+
z-index: 9999;
|
|
6
|
+
max-width: 320px;
|
|
7
|
+
padding: 8px 12px;
|
|
8
|
+
border-radius: 6px;
|
|
9
|
+
font-size: 13px;
|
|
10
|
+
line-height: 1.4;
|
|
11
|
+
background: var(--viz-tooltip-bg, #1a1a2e);
|
|
12
|
+
color: var(--viz-tooltip-fg, #e2e8f0);
|
|
13
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
|
|
14
|
+
opacity: 0;
|
|
15
|
+
transition: opacity 0.15s ease-out;
|
|
16
|
+
white-space: pre-wrap;
|
|
17
|
+
word-break: break-word;
|
|
18
|
+
box-sizing: border-box;
|
|
19
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
20
|
+
}
|
|
21
|
+
.viz-tooltip[data-visible="true"] {
|
|
22
|
+
opacity: 1;
|
|
23
|
+
}
|
|
24
|
+
.viz-tooltip-title {
|
|
25
|
+
font-weight: 600;
|
|
26
|
+
margin-bottom: 4px;
|
|
27
|
+
font-size: 14px;
|
|
28
|
+
}
|
|
29
|
+
.viz-tooltip-section {
|
|
30
|
+
display: flex;
|
|
31
|
+
gap: 6px;
|
|
32
|
+
padding: 2px 0;
|
|
33
|
+
}
|
|
34
|
+
.viz-tooltip-section-label {
|
|
35
|
+
color: var(--viz-tooltip-label, #94a3b8);
|
|
36
|
+
flex-shrink: 0;
|
|
37
|
+
}
|
|
38
|
+
.viz-tooltip-section-label::after {
|
|
39
|
+
content: ':';
|
|
40
|
+
}
|
|
41
|
+
.viz-tooltip-section-value {
|
|
42
|
+
color: var(--viz-tooltip-fg, #e2e8f0);
|
|
43
|
+
}
|
|
44
|
+
`;function W(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function ot(t){if(typeof t=="string")return `<span>${W(t)}</span>`;let e="";t.title&&(e+=`<div class="viz-tooltip-title">${W(t.title)}</div>`);for(let o of t.sections)e+=`<div class="viz-tooltip-section"><span class="viz-tooltip-section-label">${W(o.label)}</span><span class="viz-tooltip-section-value">${W(o.value)}</span></div>`;return e}function it(t,e,o){let n=e.getBoundingClientRect(),r=o.getBoundingClientRect(),i=8,l=t.offsetWidth,s=t.offsetHeight,c=n.left-r.left+n.width/2-l/2,u=n.top-r.top-s-i;u<0&&(u=n.bottom-r.top+i),c<0&&(c=4),c+l>o.clientWidth&&(c=o.clientWidth-l-4),t.style.left=`${c}px`,t.style.top=`${u}px`;}function $t(t,e,o,n,r){let i=r?.delay??300,l=o,s=n,c=t.querySelector("style[data-viz-tooltip-css]");c||(c=document.createElement("style"),c.setAttribute("data-viz-tooltip-css",""),c.textContent=nt,t.appendChild(c));let u=document.createElement("div");u.className="viz-tooltip",u.setAttribute("role","tooltip"),u.setAttribute("aria-hidden","true"),t.appendChild(u),getComputedStyle(t).position==="static"&&(t.style.position="relative");let y=null,v=null;function E($,f){u.innerHTML=ot(f),u.style.display="block",u.setAttribute("data-visible","false"),requestAnimationFrame(()=>{it(u,$,t),u.setAttribute("data-visible","true"),u.setAttribute("aria-hidden","false");});}function b(){y!==null&&(clearTimeout(y),y=null),u.setAttribute("data-visible","false"),u.setAttribute("aria-hidden","true"),v=null;}function x($){let f=$ instanceof Element?$:null;for(;f&&f!==e;){let L=f.getAttribute("data-viz-role");if(L==="compartment-entry"){let d=f.getAttribute("data-entry"),m=f.parentElement;for(;m&&m!==e&&!(m.getAttribute("data-viz-role")==="node-group"&&m.getAttribute("data-id"));)m=m.parentElement;if(m&&d){let P=m.getAttribute("data-id"),w=f.getAttribute("data-compartment");if(P&&w){let A=l.get(P)?.compartments?.find(H=>H.id===w)?.entries?.find(H=>H.id===d);if(A?.tooltip)return {content:A.tooltip,group:f}}}}let M=f.getAttribute("data-id");if(L==="node-group"&&M){let d=l.get(M);return d?.tooltip?{content:d.tooltip,group:f}:null}if(L==="edge-group"&&M){let d=s.get(M);return d?.tooltip?{content:d.tooltip,group:f}:null}f=f.parentElement;}return null}let p=null;function g($){let f=$ instanceof Element?$:null,L=null;for(;f&&f!==e;){if(f.getAttribute("data-viz-role")==="compartment-entry"){L=f;break}f=f.parentElement;}L!==p&&(p&&p.classList.remove("viz-entry-hover"),p=L,p&&p.classList.add("viz-entry-hover"));}function h($){g($.target);let f=x($.target);if(!f)return;let{content:L,group:M}=f;M!==v&&(b(),v=M,y=setTimeout(()=>{E(M,L);},i));}function V($){g(null);let f=x($.target);f&&f.group===v&&b();}function z($){g($.target);let f=x($.target);(!f||f.group!==v)&&b();}function T($){let f=x($.target);f&&(b(),v=f.group,E(f.group,f.content));}function S(){b();}function R($){$.key==="Escape"&&b();}return e.addEventListener("pointerenter",h,true),e.addEventListener("pointerleave",V,true),e.addEventListener("pointermove",z,true),e.addEventListener("focusin",T,true),e.addEventListener("focusout",S,true),e.addEventListener("keydown",R,true),{destroy(){b(),e.removeEventListener("pointerenter",h,true),e.removeEventListener("pointerleave",V,true),e.removeEventListener("pointermove",z,true),e.removeEventListener("focusin",T,true),e.removeEventListener("focusout",S,true),e.removeEventListener("keydown",R,true),u.remove(),c?.remove();},updateData($,f){l=$,s=f;}}}function rt(t,e){let o=e.x-t.x,n=e.y-t.y;return Math.atan2(n,o)*180/Math.PI}function Q(t,e,o){let n=o.anchor??"boundary",r=o.fromAt,i=o.toAt,l=o.waypoints,s=l&&l.length>0?l[0]:e?chunkOZAFCKI7_js.d(e):i??{x:0,y:0},c=l&&l.length>0?l[l.length-1]:t?chunkOZAFCKI7_js.d(t):r??{x:0,y:0},u=o.fromAngle,a=o.toAngle;if(o.straightLine&&t&&e){let E=chunkOZAFCKI7_js.d(t),b=chunkOZAFCKI7_js.d(e),x=chunkOZAFCKI7_js.o(chunkOZAFCKI7_js.e(t)),p=chunkOZAFCKI7_js.o(chunkOZAFCKI7_js.e(e)),g=x.width/2,h=x.height/2,V=p.width/2,z=p.height/2,T=Math.max(E.x-g,b.x-V),S=Math.min(E.x+g,b.x+V),R=Math.max(E.y-h,b.y-z),$=Math.min(E.y+h,b.y+z);if(T<S){let f=(T+S)/2,L=E.y<=b.y,M=Math.atan2(L?h:-h,f-E.x)*180/Math.PI,d=Math.atan2(L?-z:z,f-b.x)*180/Math.PI;(o.straightLine===true||o.straightLine==="from")&&u===void 0&&(u=M),(o.straightLine===true||o.straightLine==="to")&&a===void 0&&(a=d);}else if(R<$){let f=(R+$)/2,L=E.x<=b.x,M=Math.atan2(f-E.y,L?g:-g)*180/Math.PI,d=Math.atan2(f-b.y,L?-V:V)*180/Math.PI;(o.straightLine===true||o.straightLine==="from")&&u===void 0&&(u=M),(o.straightLine===true||o.straightLine==="to")&&a===void 0&&(a=d);}else {let f=rt(E,b);(o.straightLine===true||o.straightLine==="from")&&u===void 0&&(u=f),(o.straightLine===true||o.straightLine==="to")&&a===void 0&&(a=f+180);}}let y;t?u!==void 0?y=chunkOZAFCKI7_js.j(t,u):y=o.fromPort?chunkOZAFCKI7_js.n(t,o.fromPort)??chunkOZAFCKI7_js.i(t,s,n):chunkOZAFCKI7_js.i(t,s,n):y=r??{x:0,y:0};let v;return e?a!==void 0?v=chunkOZAFCKI7_js.j(e,a):v=o.toPort?chunkOZAFCKI7_js.n(e,o.toPort)??chunkOZAFCKI7_js.i(e,c,n):chunkOZAFCKI7_js.i(e,c,n):v=i??{x:0,y:0},{start:y,end:v}}function U(t,e,o="straight",n){switch(o){case "curved":return ct(t,e,n);case "orthogonal":return ut(t,e,n);default:return st(t,e,n)}}function st(t,e,o){let n=[t,...o??[],e],r=n.map((l,s)=>s===0?`M ${l.x} ${l.y}`:`L ${l.x} ${l.y}`),i=j(n);return {d:r.join(" "),...i}}function ct(t,e,o){if(o&&o.length>0)return lt(t,e,o);let n=K(t,e),r=`M ${t.x} ${t.y} Q ${n.x} ${n.y} ${e.x} ${e.y}`,i=k(t,n,e,.5),l=k(t,n,e,O),s=k(t,n,e,Z);return {d:r,mid:i,start:l,end:s}}function K(t,e){let o=(t.x+e.x)/2,n=(t.y+e.y)/2,r=e.x-t.x,i=e.y-t.y,l=Math.sqrt(r*r+i*i)||1,s=l*.2;return {x:o+-i/l*s,y:n+r/l*s}}function k(t,e,o,n){let r=1-n;return {x:r*r*t.x+2*r*n*e.x+n*n*o.x,y:r*r*t.y+2*r*n*e.y+n*n*o.y}}function lt(t,e,o){let n=[t,...o,e];if(n.length===2){let s=K(t,e);return {d:`M ${t.x} ${t.y} Q ${s.x} ${s.y} ${e.x} ${e.y}`,mid:k(t,s,e,.5),start:k(t,s,e,O),end:k(t,s,e,Z)}}let r=`M ${n[0].x} ${n[0].y}`,i=.3;for(let s=0;s<n.length-1;s++){let c=n[Math.max(s-1,0)],u=n[s],a=n[s+1],y=n[Math.min(s+2,n.length-1)],v=u.x+(a.x-c.x)*i,E=u.y+(a.y-c.y)*i,b=a.x-(y.x-u.x)*i,x=a.y-(y.y-u.y)*i;r+=` C ${v} ${E}, ${b} ${x}, ${a.x} ${a.y}`;}let l=j(n);return {d:r,...l}}function ut(t,e,o){return o&&o.length>0?dt(t,e,o):at(t,e)}function at(t,e){let o=Math.abs(e.x-t.x),n=Math.abs(e.y-t.y),r,i,l,s;if(o>=n){let c=(t.x+e.x)/2;r=`M ${t.x} ${t.y} L ${c} ${t.y} L ${c} ${e.y} L ${e.x} ${e.y}`;let u=[t,{x:c,y:t.y},{x:c,y:e.y},e];i=I(u,.5),l=I(u,O),s=I(u,Z);}else {let c=(t.y+e.y)/2;r=`M ${t.x} ${t.y} L ${t.x} ${c} L ${e.x} ${c} L ${e.x} ${e.y}`;let u=[t,{x:t.x,y:c},{x:e.x,y:c},e];i=I(u,.5),l=I(u,O),s=I(u,Z);}return {d:r,mid:i,start:l,end:s}}function dt(t,e,o){let n=[t,...o,e],r=`M ${n[0].x} ${n[0].y}`,i=[n[0]];for(let s=1;s<n.length;s++){let c=n[s-1],u=n[s];r+=` L ${u.x} ${c.y} L ${u.x} ${u.y}`,i.push({x:u.x,y:c.y}),i.push(u);}let l=j(i);return {d:r,...l}}var O=.15,Z=.85;function I(t,e){if(t.length===0)return {x:0,y:0};if(t.length===1)return t[0];let o=0;for(let i=1;i<t.length;i++){let l=t[i].x-t[i-1].x,s=t[i].y-t[i-1].y;o+=Math.sqrt(l*l+s*s);}let n=o*e,r=0;for(let i=1;i<t.length;i++){let l=t[i].x-t[i-1].x,s=t[i].y-t[i-1].y,c=Math.sqrt(l*l+s*s);if(r+c>=n){let u=c===0?0:(n-r)/c;return {x:t[i-1].x+l*u,y:t[i-1].y+s*u}}r+=c;}return t[t.length-1]}function j(t){return {start:I(t,O),mid:I(t,.5),end:I(t,Z)}}function ft(t){return t?"w"in t&&"h"in t?{w:t.w,h:t.h}:"r"in t?{w:t.r*2,h:t.r*2}:"rx"in t&&"ry"in t?{w:t.rx*2,h:t.ry*2}:"size"in t?{w:t.size,h:t.size}:{w:60,h:60}:{w:60,h:60}}function Lt(t,e){let o=chunkOZAFCKI7_js.d(t),n=ft(chunkOZAFCKI7_js.e(t)),r=n.w,i=n.h,l=e.loopSide||"top",s=e.loopSize||30,c=Math.min(20,(l==="top"||l==="bottom"?r:i)*.8),u="",a,y,v,E,b;switch(l){case "top":{let x=o.x-c/2,p=o.y-i/2,g=o.x+c/2,h=o.y-i/2,V=p-s*1.5;u=`M ${x} ${p} C ${x-c/2} ${V}, ${g+c/2} ${V}, ${g} ${h}`,E={x,y:p},b={x:g,y:h},a={x,y:p-s*.2},y={x:o.x,y:p-s},v={x:g,y:h-s*.2};break}case "bottom":{let x=o.x-c/2,p=o.y+i/2,g=o.x+c/2,h=o.y+i/2,V=p+s*1.5;u=`M ${x} ${p} C ${x-c/2} ${V}, ${g+c/2} ${V}, ${g} ${h}`,E={x,y:p},b={x:g,y:h},a={x,y:p+s*.2},y={x:o.x,y:p+s},v={x:g,y:h+s*.2};break}case "left":{let x=o.x-r/2,p=o.y-c/2,g=o.x-r/2,h=o.y+c/2,V=x-s*1.5;u=`M ${x} ${p} C ${V} ${p-c/2}, ${V} ${h+c/2}, ${g} ${h}`,E={x,y:p},b={x:g,y:h},a={x:x-s*.2,y:p},y={x:x-s,y:o.y},v={x:g-s*.2,y:h};break}case "right":{let x=o.x+r/2,p=o.y-c/2,g=o.x+r/2,h=o.y+c/2,V=x+s*1.5;u=`M ${x} ${p} C ${V} ${p-c/2}, ${V} ${h+c/2}, ${g} ${h}`,E={x,y:p},b={x:g,y:h},a={x:x+s*.2,y:p},y={x:x+s,y:o.y},v={x:g+s*.2,y:h};break}}return {d:u,start:a,mid:y,end:v,exitPoint:E,entryPoint:b}}function yt(t,e){return t.x>=e.x&&t.x<=e.x+e.w&&t.y>=e.y&&t.y<=e.y+e.h}function J(t,e,o){let n=t.x-e.x,r=t.y-e.y;return n*n+r*r<=o*o}function q(t,e){let o=t.x-e.x,n=t.y-e.y;return o*o+n*n}function mt(t,e,o){let n=q(e,o);if(n===0)return q(t,e);let r=((t.x-e.x)*(o.x-e.x)+(t.y-e.y)*(o.y-e.y))/n;return r=Math.max(0,Math.min(1,r)),q(t,{x:e.x+r*(o.x-e.x),y:e.y+r*(o.y-e.y)})}function pt(t,e=10){let o=t.match(/[a-zA-Z][^a-zA-Z]*/g);if(!o)return [];let n=[],r=0,i=0,l=0,s=0;for(let c of o){let u=c[0],a=c.substring(1).trim().split(/[\s,]+/).filter(y=>y!=="").map(parseFloat);switch(u.toUpperCase()){case "M":a.length>=2&&(r=a[0],i=a[1],l=r,s=i,n.push({x:r,y:i}));break;case "L":for(let y=0;y<a.length;y+=2)r=a[y],i=a[y+1],n.push({x:r,y:i});break;case "Q":for(let y=0;y<a.length;y+=4){let v=a[y],E=a[y+1],b=a[y+2],x=a[y+3];for(let p=1;p<=e;p++){let g=p/e,h=1-g,V=h*h*r+2*h*g*v+g*g*b,z=h*h*i+2*h*g*E+g*g*x;n.push({x:V,y:z});}r=b,i=x;}break;case "C":for(let y=0;y<a.length;y+=6){let v=a[y],E=a[y+1],b=a[y+2],x=a[y+3],p=a[y+4],g=a[y+5];for(let h=1;h<=e;h++){let V=h/e,z=1-V,T=z*z*z*r+3*z*z*V*v+3*z*V*V*b+V*V*V*p,S=z*z*z*i+3*z*z*V*E+3*z*V*V*x+V*V*V*g;n.push({x:T,y:S});}r=p,i=g;}break;case "Z":r=l,i=s,n.push({x:r,y:i});break}}return n}function xt(t,e){if(e.length===0)return 1/0;if(e.length===1)return Math.sqrt(q(t,e[0]));let o=1/0;for(let n=0;n<e.length-1;n++){let r=mt(t,e[n],e[n+1]);r<o&&(o=r);}return Math.sqrt(o)}function X(t){let e=0,o=0,n=t.shape,r=t.runtime?.x??t.pos.x,i=t.runtime?.y??t.pos.y;return t.runtime?.width!==void 0?e=t.runtime.width:"w"in n?e=n.w:"r"in n?e=n.r*2:"rx"in n&&"ry"in n?(e=n.rx*2,o=n.ry*2):"size"in n?e=n.size:"outerR"in n&&(e=n.outerR*2),t.runtime?.height!==void 0?o=t.runtime.height:"h"in n?o=n.h:o===0&&(o=e),{x:r-e/2,y:i-o/2,w:e,h:o}}function ht(t,e){let o=X(t);if(!yt(e,o))return false;let n=t.shape,r={x:t.runtime?.x??t.pos.x,y:t.runtime?.y??t.pos.y};if(n.kind==="circle"){let i=t.runtime?.radius??n.r;return J(e,r,i)}if(n.kind==="ellipse"){let i=t.runtime?.width!==void 0?t.runtime.width/2:n.rx,l=t.runtime?.height!==void 0?t.runtime.height/2:n.ry,s=e.x-r.x,c=e.y-r.y;return s*s/(i*i)+c*c/(l*l)<=1}return true}function gt(t,e){if(!t.compartments||t.compartments.length===0)return;let o={x:t.runtime?.x??t.pos.x,y:t.runtime?.y??t.pos.y},n=X(t),r=o.y-n.h/2,i=e.y-r;for(let l of t.compartments)if(i>=l.y&&i<l.y+l.height)return l.id}function Vt(t,e,o){if(!t.compartments)return;let n=t.compartments.find(c=>c.id===e);if(!n?.entries||n.entries.length===0)return;let r={x:t.runtime?.x??t.pos.x,y:t.runtime?.y??t.pos.y},i=X(t),l=r.y-i.h/2,s=o.y-l-n.y;for(let c of n.entries)if(s>=c.y&&s<c.y+c.height)return c.id}function At(t,e,o={}){let{edgeTolerance:n=5,portTolerance:r=10}=o;for(let i of t.nodes){if(!i.ports||i.ports.length===0)continue;let l={x:i.runtime?.x??i.pos.x,y:i.runtime?.y??i.pos.y};for(let s of i.ports){let c={x:l.x+s.offset.x,y:l.y+s.offset.y};if(J(e,c,r))return {type:"port",nodeId:i.id,portId:s.id,position:c}}}for(let i=t.nodes.length-1;i>=0;i--){let l=t.nodes[i];if(ht(l,e)){let s=gt(l,e),c=s!==void 0?Vt(l,s,e):void 0;return {type:"node",id:l.id,compartmentId:s,entryId:c}}}for(let i=t.edges.length-1;i>=0;i--){let l=t.edges[i],s=bt(t,l.id,e),c=l.hitArea??n;if(s<=c)return {type:"edge",id:l.id}}return null}function Tt(t,e){let o=[];for(let n of t.nodes){let r=X(n);!(r.x>e.x+e.w||r.x+r.w<e.x||r.y>e.y+e.h||r.y+r.h<e.y)&&o.push({type:"node",id:n.id});}for(let n of t.edges){let r=n.from?t.nodes.find(E=>E.id===n.from):void 0,i=n.to?t.nodes.find(E=>E.id===n.to):void 0;if(n.from&&!r||n.to&&!i||!r&&!n.fromAt&&!i&&!n.toAt)continue;let l=r?{x:r.runtime?.x??r.pos.x,y:r.runtime?.y??r.pos.y}:n.fromAt??{x:0,y:0},s=i?{x:i.runtime?.x??i.pos.x,y:i.runtime?.y??i.pos.y}:n.toAt??{x:0,y:0},c=Math.min(l.x,s.x)-10,u=Math.max(l.x,s.x)+10,a=Math.min(l.y,s.y)-10,y=Math.max(l.y,s.y)+10;!(c>e.x+e.w||u<e.x||a>e.y+e.h||y<e.y)&&o.push({type:"edge",id:n.id});}return o}function St(t,e,o){let{maxDistance:n}=o,r=null,i=n*n;for(let l of t.nodes){if(!l.ports)continue;let s={x:l.runtime?.x??l.pos.x,y:l.runtime?.y??l.pos.y};for(let c of l.ports){let u={x:s.x+c.offset.x,y:s.y+c.offset.y},a=q(e,u);a<=i&&(i=a,r={nodeId:l.id,portId:c.id,position:u,distance:Math.sqrt(a)});}}return r}function bt(t,e,o){let n=t.edges.find(a=>a.id===e);if(!n)return 1/0;let r=n.from?t.nodes.find(a=>a.id===n.from):null,i=n.to?t.nodes.find(a=>a.id===n.to):null;if(n.from&&!r||n.to&&!i||!r&&!n.fromAt&&!i&&!n.toAt)return 1/0;let{start:l,end:s}=Q(r??null,i??null,n),c=U(l,s,n.routing,n.waypoints),u=pt(c.d,10);return xt(o,u)}exports.a=vt;exports.b=nt;exports.c=$t;exports.d=rt;exports.e=Q;exports.f=U;exports.g=Lt;exports.h=yt;exports.i=q;exports.j=X;exports.k=At;exports.l=Tt;exports.m=St;exports.n=bt;
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';var chunkRTJM66N2_js=require('./chunk-RTJM66N2.js'),
|
|
1
|
+
'use strict';var chunkRTJM66N2_js=require('./chunk-RTJM66N2.js'),chunkTVRPABD2_js=require('./chunk-TVRPABD2.js'),chunkNHGHIK6R_js=require('./chunk-NHGHIK6R.js'),chunkE3Z7QMXI_js=require('./chunk-E3Z7QMXI.js'),chunkT5O2PDL6_js=require('./chunk-T5O2PDL6.js'),chunkOZAFCKI7_js=require('./chunk-OZAFCKI7.js');var Ze=`
|
|
2
2
|
.viz-canvas {
|
|
3
3
|
width: 100%;
|
|
4
4
|
height: 100%;
|
|
@@ -110,9 +110,9 @@
|
|
|
110
110
|
<circle r="${g}" class="viz-signal-shape" />
|
|
111
111
|
</g>
|
|
112
112
|
</g>
|
|
113
|
-
`}},Tt={render:({spec:r,scene:e})=>{let t=e.grid;if(!t)return "";let{w:i,h:l}=e.viewBox,{colLabels:a,rowLabels:d,yOffset:c=20,xOffset:n=20}=r.params,u=(i-t.padding.x*2)/t.cols,g=(l-t.padding.y*2)/t.rows,f="";return a&&Object.entries(a).forEach(([p,h])=>{let m=parseInt(p,10),z=t.padding.x+m*u+u/2,$=r.className||"viz-grid-label";f+=`<text x="${z}" y="${c}" class="${$}" text-anchor="middle">${h}</text>`;}),d&&Object.entries(d).forEach(([p,h])=>{let m=parseInt(p,10),z=t.padding.y+m*g+g/2,$=r.className||"viz-grid-label";f+=`<text x="${n}" y="${z}" dy=".35em" class="${$}" text-anchor="middle">${h}</text>`;}),f}},Dt={render:({spec:r,nodesById:e})=>{let{points:t}=r.params,i="";return t.forEach(l=>{let a=e.get(l.currentNodeId);if(!a)return;let d=parseInt(l.id.split("-")[1]||"0",10),c=(d%5-2)*10,n=(d%3-1)*10,u=a.pos.x+c,g=a.pos.y+n,f=r.className??"viz-data-point";i+=`<circle data-id="${l.id}" cx="${u}" cy="${g}" r="6" class="${f}" />`;}),i},update:({spec:r,nodesById:e},t)=>{let{points:i}=r.params,l="http://www.w3.org/2000/svg",a=new Map;Array.from(t.children).forEach(c=>{if(c.tagName==="circle"){let n=c.getAttribute("data-id");n&&a.set(n,c);}});let d=new Set;i.forEach(c=>{let n=e.get(c.currentNodeId);if(!n)return;d.add(c.id);let u=parseInt(c.id.split("-")[1]||"0",10),g=(u%5-2)*10,f=(u%3-1)*10,p=n.pos.x+g,h=n.pos.y+f,m=a.get(c.id);m||(m=document.createElementNS(l,"circle"),m.setAttribute("data-id",c.id),m.setAttribute("r","6"),t.appendChild(m)),m.setAttribute("cx",String(p)),m.setAttribute("cy",String(h));let z=r.className??"viz-data-point";m.getAttribute("class")!==z&&m.setAttribute("class",z);}),a.forEach((c,n)=>{d.has(n)||c.remove();});}},Gt={render:({spec:r})=>{let{x:e,y:t,w:i,h:l,rx:a,ry:d,opacity:c,fill:n,stroke:u,strokeWidth:g}=r.params,f=r.className??"viz-overlay-rect",p=a!==void 0?` rx="${a}"`:"",h=d!==void 0?` ry="${d}"`:"",m=c!==void 0?` opacity="${c}"`:"";return `<rect x="${e}" y="${t}" width="${i}" height="${l}" fill="${n??"#3b82f6"}"${n===void 0?' fill-opacity="0.12"':""} stroke="${u??"#3b82f6"}"${u===void 0?' stroke-opacity="0.9"':""} stroke-width="${g??3}"${p}${h}${m} class="${f}" />`},update:({spec:r},e)=>{let t="http://www.w3.org/2000/svg",{x:i,y:l,w:a,h:d,rx:c,ry:n,opacity:u,fill:g,stroke:f,strokeWidth:p}=r.params,h=r.className??"viz-overlay-rect",m=e.querySelector("rect");m||(m=document.createElementNS(t,"rect"),e.appendChild(m)),m.setAttribute("x",String(i)),m.setAttribute("y",String(l)),m.setAttribute("width",String(a)),m.setAttribute("height",String(d)),g===void 0?(m.setAttribute("fill","#3b82f6"),m.setAttribute("fill-opacity","0.12")):(m.setAttribute("fill",g),m.removeAttribute("fill-opacity")),f===void 0?(m.setAttribute("stroke","#3b82f6"),m.setAttribute("stroke-opacity","0.9")):(m.setAttribute("stroke",f),m.removeAttribute("stroke-opacity")),m.setAttribute("stroke-width",String(p??3)),c!==void 0?m.setAttribute("rx",String(c)):m.removeAttribute("rx"),n!==void 0?m.setAttribute("ry",String(n)):m.removeAttribute("ry"),u!==void 0?m.setAttribute("opacity",String(u)):m.removeAttribute("opacity"),m.setAttribute("class",h);}},Mt={render:({spec:r})=>{let{x:e,y:t,r:i,opacity:l,fill:a,stroke:d,strokeWidth:c}=r.params,n=r.className??"viz-overlay-circle",u=l!==void 0?` opacity="${l}"`:"";return `<circle cx="${e}" cy="${t}" r="${i}" fill="${a??"#3b82f6"}"${a===void 0?' fill-opacity="0.12"':""} stroke="${d??"#3b82f6"}"${d===void 0?' stroke-opacity="0.9"':""} stroke-width="${c??3}"${u} class="${n}" />`},update:({spec:r},e)=>{let t="http://www.w3.org/2000/svg",{x:i,y:l,r:a,opacity:d,fill:c,stroke:n,strokeWidth:u}=r.params,g=r.className??"viz-overlay-circle",f=e.querySelector("circle");f||(f=document.createElementNS(t,"circle"),e.appendChild(f)),f.setAttribute("cx",String(i)),f.setAttribute("cy",String(l)),f.setAttribute("r",String(a)),c===void 0?(f.setAttribute("fill","#3b82f6"),f.setAttribute("fill-opacity","0.12")):(f.setAttribute("fill",c),f.removeAttribute("fill-opacity")),n===void 0?(f.setAttribute("stroke","#3b82f6"),f.setAttribute("stroke-opacity","0.9")):(f.setAttribute("stroke",n),f.removeAttribute("stroke-opacity")),f.setAttribute("stroke-width",String(u??3)),d!==void 0?f.setAttribute("opacity",String(d)):f.removeAttribute("opacity"),f.setAttribute("class",g);}},It={render:({spec:r})=>{let{x:e,y:t,text:i,opacity:l,fill:a,fontSize:d,fontWeight:c,textAnchor:n,dominantBaseline:u}=r.params,g=r.className??"viz-overlay-text",f=l!==void 0?` opacity="${l}"`:"",p=d!==void 0?` font-size="${d}"`:"",h=c!==void 0?` font-weight="${c}"`:"",m=n!==void 0?` text-anchor="${n}"`:"",z=u!==void 0?` dominant-baseline="${u}"`:"";return `<text x="${e}" y="${t}" fill="${a??"#111"}"${f}${p}${h}${m}${z} class="${g}">${i}</text>`},update:({spec:r},e)=>{let t="http://www.w3.org/2000/svg",{x:i,y:l,text:a,opacity:d,fill:c,fontSize:n,fontWeight:u,textAnchor:g,dominantBaseline:f}=r.params,p=r.className??"viz-overlay-text",h=e.querySelector("text");h||(h=document.createElementNS(t,"text"),e.appendChild(h)),h.setAttribute("x",String(i)),h.setAttribute("y",String(l)),h.setAttribute("fill",c??"#111"),d!==void 0?h.setAttribute("opacity",String(d)):h.removeAttribute("opacity"),n!==void 0?h.setAttribute("font-size",String(n)):h.removeAttribute("font-size"),u!==void 0?h.setAttribute("font-weight",String(u)):h.removeAttribute("font-weight"),g!==void 0?h.setAttribute("text-anchor",g):h.removeAttribute("text-anchor"),f!==void 0?h.setAttribute("dominant-baseline",f):h.removeAttribute("dominant-baseline"),h.setAttribute("class",p),h.textContent=a;}};function bt(r){let e=r.x??0,t=r.y??0,i=r.scale??1,l=r.rotation??0,a=[`translate(${e}, ${t})`];return l&&a.push(`rotate(${l})`),i!==1&&a.push(`scale(${i})`),a.join(" ")}function vt(r){return r<0?0:r>1?1:r}function xt(r){return {x:r.runtime?.x??r.pos.x,y:r.runtime?.y??r.pos.y}}function St(r,e){let t=r.x??0,i=r.y??0,l=t,a=i;if(r.from&&r.to){let g=e.get(r.from),f=e.get(r.to);if(g&&f){let p=vt(r.progress??0),h=xt(g),m=xt(f);l=h.x+(m.x-h.x)*p+t,a=h.y+(m.y-h.y)*p+i;}}let d=r.scale??1,c=r.magnitude,n=c===void 0?1:.85+.3*vt(Math.abs(c)),u=d*n;return {x:l,y:a,scale:u,rotation:r.rotation??0}}var Ht={render:({spec:r,nodesById:e,edgesById:t,scene:i,registry:l})=>{let{children:a,opacity:d}=r.params,c=St(r.params,e),n=bt(c),u=d!==void 0?` opacity="${d}"`:"",g=l;if(!g)return `<g transform="${n}"${u}></g>`;let f=`<g transform="${n}"${u}>`;return a.forEach((p,h)=>{let m=g.get(p.id);if(!m)return;let z={spec:p,nodesById:e,edgesById:t,scene:i,registry:g},$=p.key?`key:${p.key}`:`idx:${h}:${p.id}`;f+=`<g data-viz-role="overlay-child" data-overlay-child-id="${$}">`,f+=m.render(z),f+="</g>";}),f+="</g>",f},update:({spec:r,nodesById:e,edgesById:t,scene:i,registry:l},a)=>{let d=l;if(!d)return;let{children:c,opacity:n}=r.params,u=St(r.params,e);a.setAttribute("transform",bt(u)),n!==void 0?a.setAttribute("opacity",String(n)):a.removeAttribute("opacity");let g="http://www.w3.org/2000/svg",f=new Map;Array.from(a.children).forEach(h=>{if(h instanceof SVGGElement){let m=h.getAttribute("data-overlay-child-id");m&&f.set(m,h);}});let p=new Set;c.forEach((h,m)=>{let z=d.get(h.id);if(!z)return;let $=h.key?`key:${h.key}`:`idx:${m}:${h.id}`;p.add($);let v=f.get($);v||(v=document.createElementNS(g,"g"),v.setAttribute("data-viz-role","overlay-child"),v.setAttribute("data-overlay-child-id",$),a.appendChild(v));let w={spec:h,nodesById:e,edgesById:t,scene:i,registry:d};z.update?z.update(w,v):v.innerHTML=z.render(w);}),f.forEach((h,m)=>{p.has(m)||h.remove();});}},ye=new Xe().register("signal",Rt).register("grid-labels",Tt).register("data-points",Dt).register("rect",Gt).register("circle",Mt).register("text",It).register("group",Ht);var ze=class r{specs=[];keyCounters=new Map;add(e,t,i){let l=i?.className,a=i?.key;if(!a&&this.specs.some(c=>c.id===e&&(c.key===void 0||c.key===""))){let c=(this.keyCounters.get(e)??0)+1;this.keyCounters.set(e,c),a=`${e}#${c}`;}return this.specs.push({id:e,params:t,key:a,className:l}),this}remove(e){for(let t=this.specs.length-1;t>=0;t--){let i=this.specs[t];if(!i)continue;let l=i.key===e,a=!i.key&&i.id===e;(l||a)&&this.specs.splice(t,1);}return this}clear(){return this.specs.length=0,this.keyCounters.clear(),this}build(){return [...this.specs]}rect(e,t){return this.add("rect",e,t)}circle(e,t){return this.add("circle",e,t)}text(e,t){return this.add("text",e,t)}group(e,t,i){let l=new r;t(l);let a=l.build();return this.add("group",{...e,children:a},i)}};function Tr(r){let e=new ze;return r(e),e.build()}var Wt={solid:"",dashed:"8, 4",dotted:"2, 4","dash-dot":"8, 4, 2, 4"};function be(r){return !r||r==="solid"?"":Wt[r]??r}function we(r,e){let t=r.position==="start"?e.start:r.position==="end"?e.end:e.mid;return {x:t.x+(r.dx||0),y:t.y+(r.dy||0)}}function Be(r){return r.labels&&r.labels.length>0?r.labels:r.label?[r.label]:[]}var X="http://www.w3.org/2000/svg",Ge={dx:2,dy:2,blur:4,color:"rgba(0,0,0,0.2)"};function qt(r){return {dx:r.dx??Ge.dx,dy:r.dy??Ge.dy,blur:r.blur??Ge.blur,color:r.color??Ge.color}}function Ft(r){let e=r.color.replace(/[^a-zA-Z0-9]/g,"_");return `viz-shadow-${r.dx}-${r.dy}-${r.blur}-${e}`}function Kt(r,e){let t=qt(e),i=Ft(t);if(!r.querySelector(`#${CSS.escape(i)}`)){let l=r.querySelector("defs");if(l){let a=document.createElementNS(X,"filter");a.setAttribute("id",i),a.setAttribute("x","-50%"),a.setAttribute("y","-50%"),a.setAttribute("width","200%"),a.setAttribute("height","200%");let d=document.createElementNS(X,"feDropShadow");d.setAttribute("dx",String(t.dx)),d.setAttribute("dy",String(t.dy)),d.setAttribute("stdDeviation",String(t.blur)),d.setAttribute("flood-color",t.color),d.setAttribute("flood-opacity","1"),a.appendChild(d),l.appendChild(a);}}return i}function jt(r){return `viz-sketch-${r}`}function Ut(r,e){let t=(r^e*2654435761)>>>0|1;return t^=t<<13,t^=t>>>17,t^=t<<5,(t>>>0)/4294967296}function Ne(r,e,t,i){return t+Ut(r,e)*(i-t)}function Et(r,e){let t=jt(e);if(!r.querySelector(`#${CSS.escape(t)}`)){let i=r.querySelector("defs");if(i){let l=document.createElementNS(X,"filter");l.setAttribute("id",t),l.setAttribute("filterUnits","userSpaceOnUse"),l.setAttribute("x","-10000"),l.setAttribute("y","-10000"),l.setAttribute("width","20000"),l.setAttribute("height","20000");let a=e+37,d=Ne(e,1,.009,.015).toFixed(4),c=Ne(e,2,2.5,4).toFixed(1),n=Ne(e,3,3,5).toFixed(1),u=Ne(e,4,.3,1.6).toFixed(2),g=Ne(e,5,.2,1.3).toFixed(2),f=document.createElementNS(X,"feTurbulence");f.setAttribute("type","fractalNoise"),f.setAttribute("baseFrequency","0.008"),f.setAttribute("numOctaves","2"),f.setAttribute("seed",String(e)),f.setAttribute("result","n1"),l.appendChild(f);let p=document.createElementNS(X,"feTurbulence");p.setAttribute("type","fractalNoise"),p.setAttribute("baseFrequency",d),p.setAttribute("numOctaves","2"),p.setAttribute("seed",String(a)),p.setAttribute("result","n2"),l.appendChild(p);let h=document.createElementNS(X,"feDisplacementMap");h.setAttribute("in","SourceGraphic"),h.setAttribute("in2","n1"),h.setAttribute("scale",c),h.setAttribute("xChannelSelector","R"),h.setAttribute("yChannelSelector","G"),h.setAttribute("result","s1"),l.appendChild(h);let m=document.createElementNS(X,"feDisplacementMap");m.setAttribute("in","SourceGraphic"),m.setAttribute("in2","n2"),m.setAttribute("scale",n),m.setAttribute("xChannelSelector","G"),m.setAttribute("yChannelSelector","R"),m.setAttribute("result","s2"),l.appendChild(m);let z=document.createElementNS(X,"feOffset");z.setAttribute("in","s2"),z.setAttribute("dx",u),z.setAttribute("dy",g),z.setAttribute("result","s2off"),l.appendChild(z);let $=document.createElementNS(X,"feComposite");$.setAttribute("in","s1"),$.setAttribute("in2","s2off"),$.setAttribute("operator","over"),l.appendChild($),i.appendChild(l);}}return t}function Zt(r,e){if(r?.sketchSeed!==void 0)return r.sketchSeed;let t=0;for(let i=0;i<e.length;i++)t=Math.imul(31,t)+e.charCodeAt(i)|0;return Math.abs(t)}function Yt(r){return r.replace(/[^a-zA-Z0-9]/g,"_")}function Qe(r,e,t="end"){if(r==="none")return "";let i=`viz-${r}`,l=t==="start"?"-start":"";return e?`${i}${l}-${Yt(e)}`:`${i}${l}`}function Xt(r,e){switch(r){case "arrow":{let t=document.createElementNS(X,"polygon");return t.setAttribute("points","0,2 10,5 0,8"),t.setAttribute("fill",e),t}case "arrowOpen":{let t=document.createElementNS(X,"polyline");return t.setAttribute("points","0,2 10,5 0,8"),t.setAttribute("fill","white"),t.setAttribute("stroke",e),t.setAttribute("stroke-width","1.5"),t.setAttribute("stroke-linejoin","miter"),t}case "diamond":{let t=document.createElementNS(X,"polygon");return t.setAttribute("points","0,5 5,2 10,5 5,8"),t.setAttribute("fill",e),t}case "diamondOpen":{let t=document.createElementNS(X,"polygon");return t.setAttribute("points","0,5 5,2 10,5 5,8"),t.setAttribute("fill","white"),t.setAttribute("stroke",e),t.setAttribute("stroke-width","1.5"),t}case "circle":{let t=document.createElementNS(X,"circle");return t.setAttribute("cx","5"),t.setAttribute("cy","5"),t.setAttribute("r","3"),t.setAttribute("fill",e),t}case "circleOpen":{let t=document.createElementNS(X,"circle");return t.setAttribute("cx","5"),t.setAttribute("cy","5"),t.setAttribute("r","3"),t.setAttribute("fill","white"),t.setAttribute("stroke",e),t.setAttribute("stroke-width","1.5"),t}case "square":{let t=document.createElementNS(X,"rect");return t.setAttribute("x","2"),t.setAttribute("y","2"),t.setAttribute("width","6"),t.setAttribute("height","6"),t.setAttribute("fill",e),t}case "bar":{let t=document.createElementNS(X,"line");return t.setAttribute("x1","5"),t.setAttribute("y1","1"),t.setAttribute("x2","5"),t.setAttribute("y2","9"),t.setAttribute("stroke",e),t.setAttribute("stroke-width","2"),t.setAttribute("stroke-linecap","round"),t}case "halfArrow":{let t=document.createElementNS(X,"polygon");return t.setAttribute("points","0,2 10,5 0,5"),t.setAttribute("fill",e),t}default:return null}}function At(r,e,t="arrow",i="end"){let l=Qe(t,e,i);if(!l)return "";if(!r.querySelector(`#${CSS.escape(l)}`)){let a=r.querySelector("defs");if(a){let d=document.createElementNS(X,"marker");d.setAttribute("id",l),d.setAttribute("viewBox","0 0 10 10"),d.setAttribute("markerWidth","10"),d.setAttribute("markerHeight","10"),d.setAttribute("refX","9"),d.setAttribute("refY","5"),d.setAttribute("orient",i==="start"?"auto-start-reverse":"auto");let c=Xt(t,e);c&&d.appendChild(c),a.appendChild(d);}}return l}function Ce(r,e){let t=new Map,i=new Map,l=new Map,a=new Map,d=new Map,c=new Map,n=new Map,u=new Map,g=new Map,f=new Map,p=r.querySelector('[data-viz-layer="nodes"]')||r.querySelector(".viz-layer-nodes");if(p){let m=Array.from(p.querySelectorAll("g[data-id]"));for(let z of m){let $=z.getAttribute("data-id");if(!$)continue;t.set($,z);let v=z.querySelector('[data-viz-role="node-shape"]')||z.querySelector(".viz-node-shape");v&&i.set($,v);let w=z.querySelector('[data-viz-role="node-label"]')||z.querySelector(".viz-node-label");w&&l.set($,w);let _=z.querySelector('[data-viz-role="node-image"]')||z.querySelector(".viz-node-image");_&&a.set($,_);let B=z.querySelector('[data-viz-role="node-icon"]')||z.querySelector(".viz-node-icon");B&&d.set($,B);let s=z.querySelector('[data-viz-role="node-svg"]')||z.querySelector(".viz-node-svg");s&&c.set($,s);}}let h=r.querySelector('[data-viz-layer="edges"]')||r.querySelector(".viz-layer-edges");if(h){let m=Array.from(h.querySelectorAll("g[data-id]"));for(let z of m){let $=z.getAttribute("data-id");if(!$)continue;n.set($,z);let v=z.querySelector('[data-viz-role="edge-line"]')||z.querySelector(".viz-edge");v&&u.set($,v);let w=z.querySelector('[data-viz-role="edge-hit"]')||z.querySelector(".viz-edge-hit");w&&g.set($,w);let _=Array.from(z.querySelectorAll('[data-viz-role="edge-label"],.viz-edge-label'));_.length>0&&f.set($,_);}}return {svg:r,edgePathResolver:e?.edgePathResolver??null,nodeGroupsById:t,nodeShapesById:i,nodeLabelsById:l,nodeImagesById:a,nodeIconsById:d,nodeSvgsById:c,edgeGroupsById:n,edgeLinesById:u,edgeHitsById:g,edgeLabelsById:f}}function Jt(r){let e=0,t=0;if(r&&typeof r=="object"){let i=r;typeof i.w=="number"?e=i.w:typeof i.r=="number"?e=i.r*2:typeof i.rx=="number"&&typeof i.ry=="number"?(e=i.rx*2,t=i.ry*2):typeof i.size=="number"?e=i.size:typeof i.outerR=="number"&&(e=i.outerR*2),typeof i.h=="number"?t=i.h:t===0&&(t=e);}return {w:e,h:t}}function Je(r,e,t,i,l,a,d){let c=d?.position??"center",n=d?.dx??0,u=d?.dy??0,g=0,f=0;switch(c){case "above":f=-i/2-a/2;break;case "below":f=i/2+a/2;break;case "left":g=-t/2-l/2;break;case "right":g=t/2+l/2;break;}return {x:r+g-l/2+n,y:e+f-a/2+u}}function et(r,e){let t=new Map(r.nodes.map(n=>[n.id,n])),i=new Map;for(let n of r.nodes)if(n.container){let u=(n.runtime?.x??n.pos.x)-n.pos.x,g=(n.runtime?.y??n.pos.y)-n.pos.y;(u!==0||g!==0)&&i.set(n.id,{dx:u,dy:g});}for(let n of r.nodes){let u=e.nodeGroupsById.get(n.id),g=e.nodeShapesById.get(n.id);if(!u||!g)continue;let{x:f,y:p}=chunkOZAFCKI7_js.d(n);if(n.parentId){let B=i.get(n.parentId);B&&(f+=B.dx,p+=B.dy);}let h=chunkOZAFCKI7_js.e(n);chunkOZAFCKI7_js.g(g,h,{x:f,y:p});let{w:m,h:z}=Jt(h);if(m>0&&z>0){let B=e.nodeImagesById.get(n.id);if(B&&n.image){let S=Je(f,p,m,z,n.image.width,n.image.height,{position:n.image.position,dx:n.image.dx,dy:n.image.dy});B.setAttribute("x",String(S.x)),B.setAttribute("y",String(S.y));}let s=e.nodeIconsById.get(n.id);if(s&&n.icon){let S=Je(f,p,m,z,n.icon.size,n.icon.size,{position:n.icon.position,dx:n.icon.dx,dy:n.icon.dy});s.setAttribute("transform",`translate(${S.x} ${S.y})`);}let x=e.nodeSvgsById.get(n.id);if(x&&n.svgContent){let S=Je(f,p,m,z,n.svgContent.width,n.svgContent.height,{position:n.svgContent.position,dx:n.svgContent.dx,dy:n.svgContent.dy});x.setAttribute("transform",`translate(${S.x} ${S.y})`);}}if(n.container?.headerHeight&&"w"in h&&"h"in h){let B=u.querySelector('[data-viz-role="container-header"]');if(B){let s=h.w,x=h.h,S=p-x/2+n.container.headerHeight;B.setAttribute("x1",String(f-s/2)),B.setAttribute("y1",String(S)),B.setAttribute("x2",String(f+s/2)),B.setAttribute("y2",String(S));}}let $=e.nodeLabelsById.get(n.id);if($&&n.label){let B=f+(n.label.dx||0),s=p+(n.label.dy||0);if(n.container?.headerHeight&&"h"in h&&!n.label.dy){let S=h.h;s=p-S/2+n.container.headerHeight/2,B=f+(n.label.dx||0);}$.setAttribute("x",String(B)),$.setAttribute("y",String(s));let x=$.querySelectorAll('tspan[data-viz-role="text-line"]');for(let S=0;S<x.length;S++)x[S]?.setAttribute("x",String(B));}if(n.runtime?.opacity!==void 0?(u.style.opacity=String(n.runtime.opacity),g.removeAttribute("opacity")):(u.style.removeProperty("opacity"),n.style?.opacity!==void 0?g.setAttribute("opacity",String(n.style.opacity)):g.removeAttribute("opacity")),n.style?.shadow){let B=Kt(e.svg,n.style.shadow);g.setAttribute("filter",`url(#${B})`);}else g.removeAttribute("filter");if(n.style?.sketch||r.sketch?.enabled){let B=Zt(n.style,n.id),s=Et(e.svg,B);u.setAttribute("filter",`url(#${s})`),u.classList.contains("viz-sketch")||u.classList.add("viz-sketch");}else {u.classList.contains("viz-sketch")&&u.classList.remove("viz-sketch");let B=u.getAttribute("filter");B&&B.startsWith("url(#viz-sketch-")&&u.removeAttribute("filter");}let w=n.runtime?.scale,_=n.runtime?.rotation;if(w!==void 0||_!==void 0){let B=w??1,s=_??0;u.setAttribute("transform",`translate(${f} ${p}) rotate(${s}) scale(${B}) translate(${-f} ${-p})`);}else u.removeAttribute("transform");n.ports&&u.querySelectorAll('[data-viz-role="port"]').forEach(s=>{let x=s.getAttribute("data-port"),S=n.ports.find(G=>G.id===x);S&&(s.setAttribute("cx",String(f+S.offset.x)),s.setAttribute("cy",String(p+S.offset.y)));});}let l=e.edgePathResolver;for(let n of r.edges){let u=e.edgeGroupsById.get(n.id),g=e.edgeLinesById.get(n.id);if(!u||!g)continue;let f=n.from?t.get(n.from)??null:null,p=n.to?t.get(n.to)??null:null;if(n.from&&!f||n.to&&!p||!f&&!n.fromAt&&!p&&!n.toAt)continue;let h;if(f&&p&&f===p)h=chunkXOBMAQC3_js.g(f,n);else {let v=chunkXOBMAQC3_js.e(f,p,n);h=chunkXOBMAQC3_js.f(v.start,v.end,n.routing,n.waypoints);}if(l){let v=w=>{let _=w.from?t.get(w.from)??null:null,B=w.to?t.get(w.to)??null:null;if(w.from&&!_||w.to&&!B||!_&&!w.fromAt&&!B&&!w.toAt)return "";if(_&&B&&_===B)return chunkXOBMAQC3_js.g(_,w).d;let s=chunkXOBMAQC3_js.e(_,B,w);return chunkXOBMAQC3_js.f(s.start,s.end,w.routing,w.waypoints).d};try{let w=l(n,r,v);typeof w=="string"&&w&&(h.d=w);}catch(w){console.warn(`RuntimePatcher: edge path resolver threw for edge ${n.id}`,w);}}if(g.setAttribute("d",h.d),n.style?.stroke!==void 0&&(g.style.stroke=n.style.stroke),n.style?.strokeWidth!==void 0&&(g.style.strokeWidth=String(n.style.strokeWidth)),n.style?.fill!==void 0&&(g.style.fill=n.style.fill),n.style?.opacity!==void 0&&(g.style.opacity=String(n.style.opacity)),n.style?.strokeDasharray!==void 0&&(g.style.strokeDasharray=be(n.style.strokeDasharray)),n.markerEnd&&n.markerEnd!=="none"){let v=n.style?.stroke?At(e.svg,n.style.stroke,n.markerEnd,"end"):Qe(n.markerEnd,void 0,"end");g.setAttribute("marker-end",`url(#${v})`);}else g.removeAttribute("marker-end");if(n.markerStart&&n.markerStart!=="none"){let v=n.style?.stroke?At(e.svg,n.style.stroke,n.markerStart,"start"):Qe(n.markerStart,void 0,"start");g.setAttribute("marker-start",`url(#${v})`);}else g.removeAttribute("marker-start");let m=e.edgeHitsById.get(n.id);m&&m.setAttribute("d",h.d);let z=e.edgeLabelsById.get(n.id);if(z){let v=Be(n);z.forEach((w,_)=>{let B=v[_];if(!B)return;let s=we(B,h);w.setAttribute("x",String(s.x)),w.setAttribute("y",String(s.y));let x=w.querySelectorAll('tspan[data-viz-role="text-line"]');for(let S=0;S<x.length;S++)x[S]?.setAttribute("x",String(s.x));});}if(n.runtime?.opacity!==void 0?u.style.opacity=String(n.runtime.opacity):u.style.removeProperty("opacity"),n.runtime?.strokeDashoffset!==void 0?(g.style.strokeDashoffset=String(n.runtime.strokeDashoffset),g.setAttribute("stroke-dashoffset",String(n.runtime.strokeDashoffset))):(g.style.removeProperty("stroke-dashoffset"),g.removeAttribute("stroke-dashoffset")),n.style?.sketch||r.sketch?.enabled){let v=0;for(let B=0;B<n.id.length;B++)v=Math.imul(31,v)+n.id.charCodeAt(B)|0;let w=Math.abs(v),_=Et(e.svg,w);g.setAttribute("filter",`url(#${_})`),u.classList.contains("viz-sketch")||u.classList.add("viz-sketch");}else {let v=g.getAttribute("filter");v&&v.startsWith("url(#viz-sketch-")&&g.removeAttribute("filter"),u.classList.contains("viz-sketch")&&u.classList.remove("viz-sketch");}}let a=[],d=new Map;for(let n of r.nodes)if(n.parentId){let u=d.get(n.parentId);u||(u=[],d.set(n.parentId,u)),u.push(n);}else a.push(n);a.sort((n,u)=>(n.zIndex||0)-(u.zIndex||0));let c=e.svg.querySelector('[data-viz-layer="nodes"]')||e.svg.querySelector(".viz-layer-nodes");if(c){let n=c.firstElementChild;for(let u of a){let g=e.nodeGroupsById.get(u.id);g&&(n!==g?c.insertBefore(g,n):n=n.nextElementSibling);}}for(let[n,u]of d.entries()){u.sort((p,h)=>(p.zIndex||0)-(h.zIndex||0));let g=e.nodeGroupsById.get(n);if(!g)continue;let f=g.querySelector(':scope > [data-viz-role="container-children"]');if(f){let p=f.firstElementChild;for(let h of u){let m=e.nodeGroupsById.get(h.id);m&&(p!==m?f.insertBefore(m,p):p=p.nextElementSibling);}}}}function tt(r,e,t=12){let i=r.split(`
|
|
114
|
-
`);if(!e)return i;let l=[],a=Math.max(1,Math.floor(e/(t*.6)));for(let d of i){if(d.length<=a){l.push(d);continue}let c=d.split(" "),n="";for(let u of c){let g=n?`${n} ${u}`:u;g.length<=a?n=g:n?(l.push(n),n=u):(l.push(u),n="");}n&&l.push(n);}return l}var Qt=1.2;function ge(r,e,t,i={}){let{className:l="",fill:a,fontSize:d,fontWeight:c,fontFamily:n,textAnchor:u="middle",dominantBaseline:g="middle",maxWidth:f,lineHeight:p=Qt,verticalAlign:h="middle",overflow:m}=i,z=12;if(typeof d=="number")z=d;else if(typeof d=="string"){let G=parseFloat(d);isNaN(G)||(z=G);}let $=typeof t!="string",v=[],w=[];if($)w=er(t.tokens);else if(v=tt(t,f,z),f&&m&&m!=="visible")if(m==="ellipsis"&&v.length>2){let G=v[1];G&&(v=[v[0],G.substring(0,Math.max(0,G.length-3))+"..."]);}else m==="clip"&&v.length>2&&(v=[v[0],v[1]]);let _=[];a!==void 0&&_.push(`fill="${a}"`),d!==void 0&&_.push(`font-size="${d}"`),c!==void 0&&_.push(`font-weight="${c}"`),n!==void 0&&_.push(`font-family="${$e(n)}"`),_.push(`text-anchor="${u}"`),g&&_.push(`dominant-baseline="${g}"`);let B=_.length>0?" "+_.join(" "):"",s=$?w.length:v.length,x=0;h==="middle"?x=-((s-1)*p)/2:h==="bottom"?x=-((s-1)*p):h==="top"&&(x=0);let S=$?w.map((G,o)=>{let N=kt(o,x,p),E=G.map(F=>tr(F)).join("");return `<tspan data-viz-role="text-line" x="${r}" dy="${N}">${E}</tspan>`}):v.map((G,o)=>{let N=kt(o,x,p);return `<tspan data-viz-role="text-line" x="${r}" dy="${N}">${rt(G)}</tspan>`});return `<text x="${r}" y="${e}" class="${l}"${B}>${S.join("")}</text>`}function kt(r,e,t){return r===0?e===0?"0":`${e}em`:`${t}em`}function er(r){let e=[[]];for(let t of r){if(t.kind==="newline"){e.push([]);continue}t.kind==="span"&&e[e.length-1].push(t);}return e.length===0?[[]]:e}function tr(r){let e=[];r.className&&e.push(`class="${$e(r.className)}"`),r.fill!==void 0&&e.push(`fill="${$e(r.fill)}"`),r.fontSize!==void 0&&e.push(`font-size="${r.fontSize}"`),r.fontFamily?e.push(`font-family="${$e(r.fontFamily)}"`):r.code&&e.push('font-family="monospace"');let t=r.fontWeight??(r.bold?"bold":void 0);t!==void 0&&e.push(`font-weight="${t}"`),r.italic&&e.push('font-style="italic"'),r.underline&&e.push('text-decoration="underline"'),r.baselineShift&&(e.push(`baseline-shift="${r.baselineShift}"`),r.fontSize===void 0&&e.push('font-size="0.8em"'));let l=`<tspan${e.length?" "+e.join(" "):""}>${rt(r.text)}</tspan>`;return r.href?`<a href="${$e(r.href)}">${l}</a>`:l}function $e(r){return rt(r)}function rt(r){return r.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function zt(r,e){if(e.at&&r.at(e.at.x,e.at.y),e.cell&&r.cell(e.cell.col,e.cell.row,e.cell.align),e.circle?r.circle(e.circle.r):e.rect?r.rect(e.rect.w,e.rect.h,e.rect.rx):e.diamond?r.diamond(e.diamond.w,e.diamond.h):e.cylinder?r.cylinder(e.cylinder.w,e.cylinder.h,e.cylinder.arcHeight):e.hexagon?r.hexagon(e.hexagon.r,e.hexagon.orientation):e.ellipse?r.ellipse(e.ellipse.rx,e.ellipse.ry):e.arc?r.arc(e.arc.r,e.arc.startAngle,e.arc.endAngle,e.arc.closed):e.blockArrow?r.blockArrow(e.blockArrow.length,e.blockArrow.bodyWidth,e.blockArrow.headWidth,e.blockArrow.headLength,e.blockArrow.direction):e.callout?r.callout(e.callout.w,e.callout.h,{rx:e.callout.rx,pointerSide:e.callout.pointerSide,pointerHeight:e.callout.pointerHeight,pointerWidth:e.callout.pointerWidth,pointerPosition:e.callout.pointerPosition}):e.cloud?r.cloud(e.cloud.w,e.cloud.h):e.cross?r.cross(e.cross.size,e.cross.barWidth):e.cube?r.cube(e.cube.w,e.cube.h,e.cube.depth):e.path?r.path(e.path.d,e.path.w,e.path.h):e.document?r.document(e.document.w,e.document.h,e.document.waveHeight):e.note?r.note(e.note.w,e.note.h,e.note.foldSize):e.parallelogram?r.parallelogram(e.parallelogram.w,e.parallelogram.h,e.parallelogram.skew):e.star?r.star(e.star.points,e.star.outerR,e.star.innerR):e.trapezoid?r.trapezoid(e.trapezoid.topW,e.trapezoid.bottomW,e.trapezoid.h):e.triangle&&r.triangle(e.triangle.w,e.triangle.h,e.triangle.direction),e.fill&&r.fill(e.fill),e.stroke&&(typeof e.stroke=="string"?r.stroke(e.stroke):r.stroke(e.stroke.color,e.stroke.width)),e.opacity!==void 0&&r.opacity(e.opacity),e.dash&&r.dash(e.dash),e.shadow!==void 0&&e.shadow!==false&&r.shadow(e.shadow===true?{}:e.shadow),e.sketch!==void 0&&e.sketch!==false&&r.sketch(e.sketch===true?{}:e.sketch),e.className&&r.class(e.className),e.zIndex!==void 0&&r.zIndex(e.zIndex),e.label)if(typeof e.label=="string")r.label(e.label);else {let t="text"in e.label&&typeof e.label.text=="string"?e.label.text:"";r.label(t,e.label);}if(e.image&&r.image(e.image.href,e.image.w,e.image.h,{dx:e.image.dx,dy:e.image.dy,position:e.image.position,preserveAspectRatio:e.image.preserveAspectRatio}),e.icon&&r.icon(e.icon.id,{size:e.icon.size,color:e.icon.color,dx:e.icon.dx,dy:e.icon.dy,position:e.icon.position}),e.svgContent&&r.svgContent(e.svgContent.content,e.svgContent.w,e.svgContent.h,{dx:e.svgContent.dx,dy:e.svgContent.dy,position:e.svgContent.position}),e.data!==void 0&&r.data(e.data),e.onClick&&r.onClick(e.onClick),e.tooltip!==void 0&&r.tooltip(e.tooltip),e.badges)for(let t of e.badges)r.badge(t.text,{position:t.position,fill:t.fill,background:t.background,fontSize:t.fontSize});if(e.ports)for(let t of e.ports)r.port(t.id,t.offset,t.direction);if(e.container&&r.container(e.container),e.parent&&r.parent(e.parent),e.compartments)for(let t of e.compartments)r.compartment(t.id,i=>{if(t.label)if(typeof t.label=="string")i.label(t.label);else {let{text:l,...a}=t.label;i.label(l,a);}if(t.entries)for(let l of t.entries)i.entry(l.id,l.text,{onClick:l.onClick,style:l.style,tooltip:l.tooltip,maxWidth:l.maxWidth,overflow:l.overflow,padding:l.padding,className:l.className});t.height!==void 0&&i.height(t.height);});}var rr=30,wt=16,it=10;function Bt(r){let e=r.label&&typeof r.label.fontSize=="number"?r.label.fontSize:wt,t=e*(r.label?.lineHeight??1.2),i=tt(r.text,r.label?.maxWidth,e);return t*i.length+r.paddingTop+r.paddingBottom}function ir(r){if(r.explicitHeight!==void 0)return r.explicitHeight;if(r.entries&&r.entries.length>0){let i=it*2;for(let l of r.entries)i+=Bt(l);return i}if(!r.label)return rr;let e=(r.label.text.match(/\n/g)?.length??0)+1,t=typeof r.label.fontSize=="number"?r.label.fontSize:wt;return e*t*(r.label.lineHeight??1.2)+it*2}function nr(r,e){let t=r.filter(d=>d.label||d.explicitHeight!==void 0||d.entries&&d.entries.length>0);if(t.length===0)return [];let i=0,l=t.map(d=>{let c=ir(d),n={id:d.id,y:i,height:c};if(d.label&&(n.label=d.label),d.entries&&d.entries.length>0){let u=it;n.entries=d.entries.map(g=>{let f=Bt(g),p={id:g.id,y:u,height:f,text:g.text};return g.label&&(p.label=g.label),g.onClick&&(p.onClick=g.onClick),g.tooltip&&(p.tooltip=g.tooltip),g.className&&(p.className=g.className),g.paddingTop&&(p.paddingTop=g.paddingTop),g.paddingBottom&&(p.paddingBottom=g.paddingBottom),u+=f,p});}return i+=c,n}),a=i;if(e.shape&&"h"in e.shape){let d=e.shape;(d.h===0||a>d.h)&&(d.h=a);}return l}function sr(r){return r===void 0?{top:0,bottom:0}:typeof r=="number"?{top:r,bottom:r}:{top:r.top??0,bottom:r.bottom??0}}var nt=class{_pending;constructor(e){this._pending={id:e};}label(e,t){return this._pending.entries&&this._pending.entries.length>0&&(console.warn(`[vizcraft] Compartment "${this._pending.id}": label() replaces existing entries. Use entry() or label(), not both.`),this._pending.entries=void 0),this._pending.label={text:e,...t,textAnchor:t?.textAnchor??"start"},this}height(e){return this._pending.explicitHeight=e,this}entry(e,t,i){this._pending.label&&(console.warn(`[vizcraft] Compartment "${this._pending.id}": entry() replaces existing label. Use entry() or label(), not both.`),this._pending.label=void 0),this._pending.entries||(this._pending.entries=[]);let l={text:t,textAnchor:"start",...i?.style&&{fill:i.style.fill,fontSize:i.style.fontSize,fontWeight:i.style.fontWeight??i.style.fontStyle,fontFamily:i.style.fontFamily},...i?.maxWidth!==void 0&&{maxWidth:i.maxWidth},...i?.overflow!==void 0&&{overflow:i.overflow}},{top:a,bottom:d}=sr(i?.padding);return this._pending.entries.push({id:e,text:t,label:l,onClick:i?.onClick,tooltip:i?.tooltip,className:i?.className,paddingTop:a,paddingBottom:d}),this}},Me=class{_builder;nodeDef;_pendingCompartments=[];constructor(e,t){this._builder=e,this.nodeDef=t;}at(e,t){return this.nodeDef.pos={x:e,y:t},this}cell(e,t,i="center"){let l=this._builder._getGridConfig();if(!l)return console.warn("VizBuilder: .cell() called but no grid configured. Use .grid() first."),this;let a=this._builder._getViewBox(),d=a.w-l.padding.x*2,c=a.h-l.padding.y*2,n=d/l.cols,u=c/l.rows,g=l.padding.x+e*n,f=l.padding.y+t*u;return i==="center"?(g+=n/2,f+=u/2):i==="end"&&(g+=n,f+=u),this.nodeDef.pos={x:g,y:f},this}circle(e){return this.nodeDef.shape={kind:"circle",r:e},this}rect(e,t,i){return this.nodeDef.shape={kind:"rect",w:e,h:t,rx:i},this}diamond(e,t){return this.nodeDef.shape={kind:"diamond",w:e,h:t},this}cylinder(e,t,i){return this.nodeDef.shape={kind:"cylinder",w:e,h:t,arcHeight:i},this}hexagon(e,t){return this.nodeDef.shape={kind:"hexagon",r:e,orientation:t},this}ellipse(e,t){return this.nodeDef.shape={kind:"ellipse",rx:e,ry:t},this}arc(e,t,i,l){return this.nodeDef.shape={kind:"arc",r:e,startAngle:t,endAngle:i,closed:l},this}blockArrow(e,t,i,l,a){return this.nodeDef.shape={kind:"blockArrow",length:e,bodyWidth:t,headWidth:i,headLength:l,direction:a},this}callout(e,t,i){return this.nodeDef.shape={kind:"callout",w:e,h:t,rx:i?.rx,pointerSide:i?.pointerSide,pointerHeight:i?.pointerHeight,pointerWidth:i?.pointerWidth,pointerPosition:i?.pointerPosition},this}cloud(e,t){return this.nodeDef.shape={kind:"cloud",w:e,h:t},this}cross(e,t){return this.nodeDef.shape={kind:"cross",size:e,barWidth:t},this}cube(e,t,i){return this.nodeDef.shape={kind:"cube",w:e,h:t,depth:i},this}path(e,t,i){return this.nodeDef.shape={kind:"path",d:e,w:t,h:i},this}document(e,t,i){return this.nodeDef.shape={kind:"document",w:e,h:t,waveHeight:i},this}note(e,t,i){return this.nodeDef.shape={kind:"note",w:e,h:t,foldSize:i},this}parallelogram(e,t,i){return this.nodeDef.shape={kind:"parallelogram",w:e,h:t,skew:i},this}star(e,t,i){return this.nodeDef.shape={kind:"star",points:e,outerR:t,innerR:i},this}trapezoid(e,t,i){return this.nodeDef.shape={kind:"trapezoid",topW:e,bottomW:t,h:i},this}triangle(e,t,i){return this.nodeDef.shape={kind:"triangle",w:e,h:t,direction:i},this}image(e,t,i,l){let a=typeof t=="number"?{width:t,height:i??t,dx:l?.dx,dy:l?.dy,position:l?.position,preserveAspectRatio:l?.preserveAspectRatio}:{width:t.w,height:t.h,dx:t.dx,dy:t.dy,position:t.position,preserveAspectRatio:t.preserveAspectRatio},d={href:e,width:a.width,height:a.height};return a.dx!==void 0&&(d.dx=a.dx),a.dy!==void 0&&(d.dy=a.dy),a.position!==void 0&&(d.position=a.position),a.preserveAspectRatio!==void 0&&(d.preserveAspectRatio=a.preserveAspectRatio),this.nodeDef.image=d,this}icon(e,t){let i={id:e,size:t.size};return t.color!==void 0&&(i.color=t.color),t.dx!==void 0&&(i.dx=t.dx),t.dy!==void 0&&(i.dy=t.dy),t.position!==void 0&&(i.position=t.position),this.nodeDef.icon=i,this}svgContent(e,t,i,l){let a=typeof t=="number"?{width:t,height:i??t,dx:l?.dx,dy:l?.dy,position:l?.position}:{width:t.w,height:t.h,dx:t.dx,dy:t.dy,position:t.position},d={content:e,width:a.width,height:a.height};return a.dx!==void 0&&(d.dx=a.dx),a.dy!==void 0&&(d.dy=a.dy),a.position!==void 0&&(d.position=a.position),this.nodeDef.svgContent=d,this}label(e,t){return this.nodeDef.label={text:e,...t},this}richLabel(e,t){let i=new Se;return e(i),this.nodeDef.label={text:"",...t,rich:i.build()},this}fill(e){return this.nodeDef.style={...this.nodeDef.style||{},fill:e},this}stroke(e,t){return this.nodeDef.style={...this.nodeDef.style||{},stroke:e,strokeWidth:t??this.nodeDef.style?.strokeWidth},this}opacity(e){return this.nodeDef.style={...this.nodeDef.style||{},opacity:e},this}dashed(){return this.nodeDef.style={...this.nodeDef.style||{},strokeDasharray:"dashed"},this}dotted(){return this.nodeDef.style={...this.nodeDef.style||{},strokeDasharray:"dotted"},this}dash(e){return this.nodeDef.style={...this.nodeDef.style||{},strokeDasharray:e},this}shadow(e){return this.nodeDef.style={...this.nodeDef.style||{},shadow:e??{}},this}sketch(e){return this.nodeDef.style={...this.nodeDef.style||{},sketch:true,sketchSeed:e?.seed},this}class(e){return this.nodeDef.className?this.nodeDef.className+=` ${e}`:this.nodeDef.className=e,this}zIndex(e){return this.nodeDef.zIndex=e,this}animate(e,t){if(typeof e=="string")return this.nodeDef.animations||(this.nodeDef.animations=[]),this.nodeDef.animations.push({id:e,params:t}),this;let i=this.nodeDef.id;if(!i)throw new Error("NodeBuilder.animate(cb): node has no id");return this._builder.animate(l=>{l.node(i),e(l);}),this}animateTo(e,t){return this.animate(i=>{i.to(e,t);})}data(e){return this.nodeDef.data=e,this}onClick(e){return this.nodeDef.onClick=e,this}container(e){return this.nodeDef.container=e??{layout:"free"},this}compartment(e,t){let i=new nt(e);return t&&t(i),this._pendingCompartments.push(i._pending),this}port(e,t,i){return this.nodeDef.ports||(this.nodeDef.ports=[]),this.nodeDef.ports.push({id:e,offset:t,direction:i}),this}parent(e){return this.nodeDef.parentId=e,this}tooltip(e){return this.nodeDef.tooltip=e,this}badge(e,t){return this.nodeDef.badges||(this.nodeDef.badges=[]),this.nodeDef.badges.push({text:e,position:t?.position??"top-left",fill:t?.fill,background:t?.background,fontSize:t?.fontSize}),this}_resolveCompartments(){this._pendingCompartments.length!==0&&(this.nodeDef.compartments=nr(this._pendingCompartments,this.nodeDef));}done(){return this._resolveCompartments(),this._builder}node(e,t){return this._resolveCompartments(),this._builder.node(e,t)}edge(e,t,i){return this._resolveCompartments(),this._builder.edge(e,t,i)}danglingEdge(e,t){return this._resolveCompartments(),this._builder.danglingEdge(e,t)}overlay(e,t,i){return this._resolveCompartments(),typeof e=="function"?this._builder.overlay(e):this._builder.overlay(e,t,i)}build(){return this._resolveCompartments(),this._builder.build()}svg(e){return this._resolveCompartments(),this._builder.svg(e)}};function st(r,e){if(e.from&&r.from(e.from),e.to&&r.to(e.to),e.fromAt&&r.fromAt(e.fromAt),e.toAt&&r.toAt(e.toAt),e.routing&&r.routing(e.routing),e.waypoints)for(let t of e.waypoints)r.via(t.x,t.y);if(e.arrow!==void 0&&r.arrow(e.arrow),e.markerStart&&r.markerStart(e.markerStart),e.markerEnd&&r.markerEnd(e.markerEnd),e.loopSide&&r.loopSide(e.loopSide),e.loopSize&&r.loopSize(e.loopSize),e.stroke&&(typeof e.stroke=="string"?r.stroke(e.stroke):r.stroke(e.stroke.color,e.stroke.width)),e.fill&&r.fill(e.fill),e.opacity!==void 0&&r.opacity(e.opacity),e.dash&&r.dash(e.dash),e.sketch&&r.sketch(),e.className&&r.class(e.className),e.anchor&&r.connect(e.anchor),e.fromPort&&r.fromPort(e.fromPort),e.toPort&&r.toPort(e.toPort),e.fromAngle!==void 0&&r.fromAngle(e.fromAngle),e.toAngle!==void 0&&r.toAngle(e.toAngle),e.straightLine!==void 0&&(e.straightLine===true?r.straightLine():e.straightLine==="from"?r.straightLineFrom():e.straightLine==="to"&&r.straightLineTo()),e.label)if(typeof e.label=="string")r.label(e.label);else if(Array.isArray(e.label))for(let t of e.label){let i=typeof t.text=="string"?t.text:"";r.label(i,t);}else {let t="text"in e.label&&typeof e.label.text=="string"?e.label.text:"";r.label(t,e.label);}e.hitArea!==void 0&&r.hitArea(e.hitArea),e.meta!==void 0&&r.meta(e.meta),e.data!==void 0&&r.data(e.data),e.onClick&&r.onClick(e.onClick),e.tooltip!==void 0&&r.tooltip(e.tooltip);}var Ve=class{parent;edgeDef;constructor(e,t){this.parent=e,this.edgeDef=t;}straight(){return this.edgeDef.routing="straight",this}curved(){return this.edgeDef.routing="curved",this}orthogonal(){return this.edgeDef.routing="orthogonal",this}routing(e){return this.edgeDef.routing=e,this}via(e,t){return this.edgeDef.waypoints||(this.edgeDef.waypoints=[]),this.edgeDef.waypoints.push({x:e,y:t}),this}from(e){return this.edgeDef.from=e,this}to(e){return this.edgeDef.to=e,this}fromAt(e){return this.edgeDef.fromAt=e,this}toAt(e){return this.edgeDef.toAt=e,this}label(e,t){let i={position:"mid",text:e,dy:-10,...t};return this.edgeDef.labels||(this.edgeDef.labels=[]),this.edgeDef.labels.push(i),i.position==="mid"&&!this.edgeDef.label&&(this.edgeDef.label=i),this}richLabel(e,t){let i=new Se;e(i);let l={position:"mid",text:"",dy:-10,...t,rich:i.build()};return this.edgeDef.labels||(this.edgeDef.labels=[]),this.edgeDef.labels.push(l),l.position==="mid"&&!this.edgeDef.label&&(this.edgeDef.label=l),this}arrow(e=true){return e==="both"?(this.edgeDef.markerStart="arrow",this.edgeDef.markerEnd="arrow"):e==="start"?this.edgeDef.markerStart="arrow":e==="end"?this.edgeDef.markerEnd="arrow":e===true?this.edgeDef.markerEnd="arrow":this.edgeDef.markerEnd="none",this}markerEnd(e){return this.edgeDef.markerEnd=e,this}markerStart(e){return this.edgeDef.markerStart=e,this}connect(e){return this.edgeDef.anchor=e,this}fromPort(e){return this.edgeDef.fromPort=e,this}toPort(e){return this.edgeDef.toPort=e,this}fromAngle(e){return this.edgeDef.fromAngle=e,this}toAngle(e){return this.edgeDef.toAngle=e,this}straightLine(){return this.edgeDef.straightLine=true,this}straightLineFrom(){return this.edgeDef.straightLine="from",this}straightLineTo(){return this.edgeDef.straightLine="to",this}fill(e){return this.edgeDef.style={...this.edgeDef.style||{},fill:e},this}stroke(e,t){return this.edgeDef.style={...this.edgeDef.style||{},stroke:e,strokeWidth:t??this.edgeDef.style?.strokeWidth},this}opacity(e){return this.edgeDef.style={...this.edgeDef.style||{},opacity:e},this}dashed(){return this.edgeDef.style={...this.edgeDef.style||{},strokeDasharray:"dashed"},this}dotted(){return this.edgeDef.style={...this.edgeDef.style||{},strokeDasharray:"dotted"},this}dash(e){return this.edgeDef.style={...this.edgeDef.style||{},strokeDasharray:e},this}sketch(){return this.edgeDef.style={...this.edgeDef.style||{},sketch:true},this}class(e){return this.edgeDef.className?this.edgeDef.className+=` ${e}`:this.edgeDef.className=e,this}animate(e,t){if(typeof e=="string")return this.edgeDef.animations||(this.edgeDef.animations=[]),this.edgeDef.animations.push({id:e,params:t}),this;let i=this.edgeDef.id||`${this.edgeDef.from}->${this.edgeDef.to}`;if(!i)throw new Error("EdgeBuilder.animate(cb): edge has no id");return this.parent.animate(l=>{l.edge(i),e(l);}),this}animateTo(e,t){return this.animate(i=>{i.to(e,t);})}hitArea(e){return this.edgeDef.hitArea=e,this}meta(e){return this.edgeDef.meta=e,this}data(e){return this.edgeDef.data=e,this}onClick(e){return this.edgeDef.onClick=e,this}loopSide(e){return this.edgeDef.loopSide=e,this}loopSize(e){return this.edgeDef.loopSize=e,this}tooltip(e){return this.edgeDef.tooltip=e,this}done(){return this.parent}node(e,t){return this.parent.node(e,t)}edge(e,t,i){return this.parent.edge(e,t,i)}danglingEdge(e,t){return this.parent.danglingEdge(e,t)}overlay(e,t,i){return typeof e=="function"?this.parent.overlay(e):this.parent.overlay(e,t,i)}build(){return this.parent.build()}svg(e){return this.parent.svg(e)}};var Ie={dx:2,dy:2,blur:4,color:"rgba(0,0,0,0.2)"};function Oe(r){return {dx:r.dx??Ie.dx,dy:r.dy??Ie.dy,blur:r.blur??Ie.blur,color:r.color??Ie.color}}function Pe(r){let e=r.color.replace(/[^a-zA-Z0-9]/g,"_");return `viz-shadow-${r.dx}-${r.dy}-${r.blur}-${e}`}function or(r){return r.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function ot(r,e){return `<filter id="${r}" x="-50%" y="-50%" width="200%" height="200%"><feDropShadow dx="${e.dx}" dy="${e.dy}" stdDeviation="${e.blur}" flood-color="${or(e.color)}" flood-opacity="1"/></filter>`}function ve(r){return `viz-sketch-${r}`}function lr(r,e){let t=(r^e*2654435761)>>>0|1;return t^=t<<13,t^=t>>>17,t^=t<<5,(t>>>0)/4294967296}function _e(r,e,t,i){return t+lr(r,e)*(i-t)}function lt(r,e){let t=e+37,i=_e(e,1,.009,.015).toFixed(4),l=_e(e,2,2.5,4).toFixed(1),a=_e(e,3,3,5).toFixed(1),d=_e(e,4,.3,1.6).toFixed(2),c=_e(e,5,.2,1.3).toFixed(2);return `<filter id="${r}" filterUnits="userSpaceOnUse" x="-10000" y="-10000" width="20000" height="20000"><feTurbulence type="fractalNoise" baseFrequency="0.008" numOctaves="2" seed="${e}" result="n1"/><feTurbulence type="fractalNoise" baseFrequency="${i}" numOctaves="2" seed="${t}" result="n2"/><feDisplacementMap in="SourceGraphic" in2="n1" scale="${l}" xChannelSelector="R" yChannelSelector="G" result="s1"/><feDisplacementMap in="SourceGraphic" in2="n2" scale="${a}" xChannelSelector="G" yChannelSelector="R" result="s2"/><feOffset in="s2" dx="${d}" dy="${c}" result="s2off"/><feComposite in="s1" in2="s2off" operator="over"/></filter>`}function Le(r,e){if(r?.sketchSeed!==void 0)return r.sketchSeed;let t=0;for(let i=0;i<e.length;i++)t=Math.imul(31,t)+e.charCodeAt(i)|0;return Math.abs(t)}function ar(r){return typeof r=="object"&&r!==null&&"then"in r&&typeof r.then=="function"}function dr(r){return r.replace(/[^a-zA-Z0-9]/g,"_")}function fe(r,e,t="end"){if(r==="none")return "";let i=`viz-${r}`,l=t==="start"?"-start":"";return e?`${i}${l}-${dr(e)}`:`${i}${l}`}function He(r,e){let t=r.from?e.get(r.from)??null:null,i=r.to?e.get(r.to)??null:null;return r.from&&!t||r.to&&!i||!t&&!r.fromAt&&!i&&!r.toAt?null:{start:t,end:i}}function me(r){return r.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}var ur={arrow:r=>`<polygon points="0,2 10,5 0,8" fill="${r}" />`,arrowOpen:r=>`<polyline points="0,2 10,5 0,8" fill="white" stroke="${r}" stroke-width="1.5" stroke-linejoin="miter" />`,diamond:r=>`<polygon points="0,5 5,2 10,5 5,8" fill="${r}" />`,diamondOpen:r=>`<polygon points="0,5 5,2 10,5 5,8" fill="white" stroke="${r}" stroke-width="1.5" />`,circle:r=>`<circle cx="5" cy="5" r="3" fill="${r}" />`,circleOpen:r=>`<circle cx="5" cy="5" r="3" fill="white" stroke="${r}" stroke-width="1.5" />`,square:r=>`<rect x="2" y="2" width="6" height="6" fill="${r}" />`,bar:r=>`<line x1="5" y1="1" x2="5" y2="9" stroke="${r}" stroke-width="2" stroke-linecap="round" />`,halfArrow:r=>`<polygon points="0,2 10,5 0,5" fill="${r}" />`};function We(r,e,t,i="end"){if(r==="none")return "";let l=ur[r];if(!l)return "";let a=me(e);return `<marker id="${t}" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="10" markerHeight="10" orient="${i==="start"?"auto-start-reverse":"auto"}">${l(a)}</marker>`}function Ee(r,e,t,i){let{x:l,y:a}=chunkOZAFCKI7_js.d(r),d=chunkXOBMAQC3_js.j(r),c=i?.position??"center",n=i?.dx??0,u=i?.dy??0,g=0,f=0;switch(c){case "above":f=-d.h/2-t/2;break;case "below":f=d.h/2+t/2;break;case "left":g=-d.w/2-e/2;break;case "right":g=d.w/2+e/2;break;}return {x:l+g-e/2+n,y:a+f-t/2+u}}function at(r,e,t){let i=r.trim();return i.startsWith("<svg")?i.replace(/<svg\b([^>]*)>/,(l,a)=>`<svg${a.replace(/\swidth="[^"]*"/g,"").replace(/\sheight="[^"]*"/g,"")} width="${e}" height="${t}">`):r}function Nt(r,e,t){let i=r.trim();return i.startsWith("<svg")?at(i,e,t):`<svg width="${e}" height="${t}" viewBox="0 0 ${e} ${t}" xmlns="http://www.w3.org/2000/svg">${r}</svg>`}var Ae=new WeakMap,qe=new WeakMap;function cr(r,e){Object.entries(e).forEach(([t,i])=>{i===void 0?r.removeAttribute(t):r.setAttribute(t,String(i));});}function gr(r){return Object.entries(r).filter(([,e])=>e!==void 0).map(([e,t])=>` ${e}="${String(t)}"`).join("")}function Fe(r){return `viz-anim-${r}`}function Ke(r){return !r||typeof r!="object"?[]:Object.entries(r).filter(([,e])=>e!==void 0).map(([e,t])=>[`--viz-anim-${e}`,String(t)])}var Se=class{_tokens=[];text(e,t){return this._tokens.push({kind:"span",text:e,...t??{}}),this}bold(e,t){return this.text(e,{...t??{},bold:true})}italic(e,t){return this.text(e,{...t??{},italic:true})}code(e,t){return this.text(e,{...t??{},code:true})}color(e,t,i){return this.text(e,{...i??{},fill:t})}link(e,t,i){return this.text(e,{...i??{},href:t})}sup(e,t){return this.text(e,{...t??{},baselineShift:"super"})}sub(e,t){return this.text(e,{...t??{},baselineShift:"sub"})}newline(){return this._tokens.push({kind:"newline"}),this}build(){return {kind:"rich",tokens:[...this._tokens]}}},dt=class{_viewBox={w:800,h:600};_nodes=new Map;_edges=new Map;_overlays=[];_nodeOrder=[];_edgeOrder=[];_gridConfig=null;_sketch=null;_animationSpecs=[];_mountedContainer=null;_panZoomController;_tooltipController;_edgePathResolver=null;_changes={added:{nodes:[],edges:[]},removed:{nodes:[],edges:[]},updated:{nodes:[],edges:[]}};_changeListeners=[];_eventListeners={build:[],mount:[]};on(e,t){return this._eventListeners[e]||(this._eventListeners[e]=[]),this._eventListeners[e].push(t),()=>{this._eventListeners[e]=this._eventListeners[e].filter(i=>i!==t);}}_dispatchEvent(e,t){let i=this._eventListeners[e];i&&i.forEach(l=>l(t));}addNode(e){if(this._nodes.has(e.id)){console.warn(`VizBuilder.addNode: Node ${e.id} already exists`);return}this._nodes.set(e.id,{...e}),this._nodeOrder.push(e.id),this._changes.added.nodes.push(e.id);}removeNode(e){if(!this._nodes.has(e))return;this._nodes.delete(e),this._nodeOrder=this._nodeOrder.filter(i=>i!==e),this._changes.removed.nodes.push(e);let t=[];this._edges.forEach(i=>{(i.from===e||i.to===e)&&t.push(i.id);}),t.forEach(i=>this.removeEdge(i));}updateNode(e,t){let i=this._nodes.get(e);if(!i){console.warn(`VizBuilder.updateNode: Node ${e} not found`);return}let l={...i,...t};t.pos&&i.pos&&(l.pos={...i.pos,...t.pos}),t.style&&i.style&&(l.style={...i.style,...t.style}),t.shape&&i.shape&&(l.shape={...i.shape,...t.shape}),this._nodes.set(e,l),this._changes.added.nodes.includes(e)||this._changes.updated.nodes.includes(e)||this._changes.updated.nodes.push(e);}addEdge(e){if(this._edges.has(e.id)){console.warn(`VizBuilder.addEdge: Edge ${e.id} already exists`);return}this._edges.set(e.id,{...e}),this._edgeOrder.push(e.id),this._changes.added.edges.push(e.id);}removeEdge(e){this._edges.has(e)&&(this._edges.delete(e),this._edgeOrder=this._edgeOrder.filter(t=>t!==e),this._changes.removed.edges.push(e));}updateEdge(e,t){let i=this._edges.get(e);if(!i){console.warn(`VizBuilder.updateEdge: Edge ${e} not found`);return}this._edges.set(e,{...i,...t}),this._changes.added.edges.includes(e)||this._changes.updated.edges.includes(e)||this._changes.updated.edges.push(e);}onChange(e){return this._changeListeners.push(e),()=>{this._changeListeners=this._changeListeners.filter(t=>t!==e);}}commit(e){let t=this._changes;if(this._changeListeners.length>0){let d={added:{nodes:[...t.added.nodes],edges:[...t.added.edges]},removed:{nodes:[...t.removed.nodes],edges:[...t.removed.edges]},updated:{nodes:[...t.updated.nodes],edges:[...t.updated.edges]}};this._changeListeners.forEach(c=>c(d));}if(this._changes={added:{nodes:[],edges:[]},removed:{nodes:[],edges:[]},updated:{nodes:[],edges:[]}},!e)return;let i=e.querySelector("svg");if(!i){console.warn("VizBuilder.commit: No mounted SVG found in container. Need to call .mount() first.");return}let l=this.build();if(this._renderSceneToDOM(l,e),this._tooltipController){let d=new Map(l.nodes.map(n=>[n.id,n])),c=new Map(l.edges.map(n=>[n.id,n]));this._tooltipController.updateData(d,c),this._addTooltipA11y(i,l);}let a=Ce(i,{edgePathResolver:this._edgePathResolver});Ae.set(i,a),et(l,a);}use(e,t){return e(this,t),this}layout(e,t){let i=this.build(),l={nodes:i.nodes,edges:i.edges},a=e(l,t);if(ar(a))throw new Error("VizBuilder.layout: received a Promise from the layout algorithm. Use .layoutAsync() for async layout engines.");return this._applyLayoutResult(a),this}async layoutAsync(e,t){let i=this.build(),l={nodes:i.nodes,edges:i.edges},a=await e(l,t);return this._applyLayoutResult(a),this}_applyLayoutResult(e){for(let[t,i]of Object.entries(e.nodes))this.updateNode(t,{pos:i});if(e.edges)for(let[t,i]of Object.entries(e.edges))i.waypoints!==void 0&&this.updateEdge(t,{waypoints:i.waypoints});}setEdgePathResolver(e){this._edgePathResolver=e;let t=this._mountedContainer;if(t){let i=t.querySelector("svg");if(i){let l=Ae.get(i);l?l.edgePathResolver=e:Ae.set(i,Ce(i,{edgePathResolver:e}));}}return this}view(e,t){return this._viewBox={w:e,h:t},this}grid(e,t,i={x:20,y:20}){return this._gridConfig={cols:e,rows:t,padding:i},this}sketch(e=true,t){return this._sketch=e?{enabled:true,seed:t}:null,this}overlay(e,t,i){if(typeof e=="function"){let c=new ze;return e(c),this._overlays.push(...c.build()),this}let l=e,a=t,d=i;return this._overlays.push({id:l,params:a,key:d}),this}animate(e){let t=chunkRTJM66N2_js.d(e);return this._animationSpecs.push(t),t}node(e,t){this._nodes.has(e)||(this._nodes.set(e,{id:e,pos:{x:0,y:0},shape:{kind:"circle",r:10}}),this._nodeOrder.push(e));let i=new Me(this,this._nodes.get(e));return t?(zt(i,t),i.done(),this):i}edge(e,t,i){let l=i!==void 0&&typeof i!="string",a=l?i.id||`${e}->${t}`:i||`${e}->${t}`;this._edges.has(a)||(this._edges.set(a,{id:a,from:e,to:t}),this._edgeOrder.push(a));let d=new Ve(this,this._edges.get(a));return l?(st(d,i),this):d}danglingEdge(e,t){if(!this._edges.has(e)){let l={id:e};t?.fromAt&&(l.fromAt=t.fromAt),t?.toAt&&(l.toAt=t.toAt),this._edges.set(e,l),this._edgeOrder.push(e);}let i=new Ve(this,this._edges.get(e));return t?(st(i,t),this):i}fromScene(e){return e.viewBox&&this.view(e.viewBox.w,e.viewBox.h),e.grid&&this.grid(e.grid.cols,e.grid.rows,e.grid.padding),this._nodes.clear(),this._nodeOrder=[],this._edges.clear(),this._edgeOrder=[],this._overlays=[],this._animationSpecs=[],e.nodes&&e.nodes.forEach(t=>{this._nodes.set(t.id,{...t}),this._nodeOrder.push(t.id);}),e.edges&&e.edges.forEach(t=>{this._edges.set(t.id,{...t}),this._edgeOrder.push(t.id);}),e.overlays&&(this._overlays=[...e.overlays]),e.animationSpecs&&(this._animationSpecs=[...e.animationSpecs]),this._sketch=e.sketch?{...e.sketch,enabled:e.sketch.enabled??true}:null,this}build(){this._edges.forEach(l=>{l.from&&!this._nodes.has(l.from)&&console.warn(`VizBuilder: Edge ${l.id} references missing source node ${l.from}`),l.to&&!this._nodes.has(l.to)&&console.warn(`VizBuilder: Edge ${l.id} references missing target node ${l.to}`);});let e=this._nodeOrder.map(l=>this._nodes.get(l)),t=this._edgeOrder.map(l=>this._edges.get(l)),i={viewBox:this._viewBox,grid:this._gridConfig??void 0,nodes:e,edges:t,overlays:this._overlays,animationSpecs:this._animationSpecs.length>0?[...this._animationSpecs]:void 0,sketch:this._sketch??void 0};return this._dispatchEvent("build",{scene:i}),i}_getGridConfig(){return this._gridConfig}_getViewBox(){return this._viewBox}svg(e){let t=this.build();return this._renderSceneToSvg(t,e)}mount(e,t){let i=this.build();this._renderSceneToDOM(i,e),this._mountedContainer=e;let l=e.querySelector("svg");if(l&&t?.css&&this._injectCssIntoMountedSvg(l,t.css),l&&t?.autoplay&&this.play(e,i.animationSpecs??[]),l&&(i.nodes.some(c=>c.tooltip!=null)||i.edges.some(c=>c.tooltip!=null))){this._tooltipController&&this._tooltipController.destroy();let c=new Map(i.nodes.map(u=>[u.id,u])),n=new Map(i.edges.map(u=>[u.id,u]));this._tooltipController=chunkXOBMAQC3_js.c(e,l,c,n),this._addTooltipA11y(l,i);}let a;if(l&&t?.panZoom){let d=l.querySelector(".viz-viewport");d&&(a=chunkXOBMAQC3_js.a(l,d,i,t));}return this._panZoomController=a,this._dispatchEvent("mount",{container:e,controller:a}),a}destroy(){if(this._panZoomController&&(this._panZoomController.destroy(),this._panZoomController=void 0),this._tooltipController&&(this._tooltipController.destroy(),this._tooltipController=void 0),this._mountedContainer){let e=qe.get(this._mountedContainer);e&&(e.stop(),qe.delete(this._mountedContainer));let t=this._mountedContainer.querySelector("svg");t&&t.remove(),this._mountedContainer=null;}}_addTooltipA11y(e,t){let i=e.querySelectorAll('g[data-viz-role="node-group"]'),l=new Set(t.nodes.filter(c=>c.tooltip!=null).map(c=>c.id));i.forEach(c=>{let n=c.getAttribute("data-id");n&&l.has(n)&&!c.hasAttribute("tabindex")&&c.setAttribute("tabindex","0");});let a=e.querySelectorAll('g[data-viz-role="edge-group"]'),d=new Set(t.edges.filter(c=>c.tooltip!=null).map(c=>c.id));a.forEach(c=>{let n=c.getAttribute("data-id");n&&d.has(n)&&!c.hasAttribute("tabindex")&&c.setAttribute("tabindex","0");});}_injectCssIntoMountedSvg(e,t){let i=(Array.isArray(t)?t.join(`
|
|
113
|
+
`}},Tt={render:({spec:r,scene:e})=>{let t=e.grid;if(!t)return "";let{w:i,h:l}=e.viewBox,{colLabels:a,rowLabels:d,yOffset:c=20,xOffset:n=20}=r.params,u=(i-t.padding.x*2)/t.cols,g=(l-t.padding.y*2)/t.rows,f="";return a&&Object.entries(a).forEach(([p,h])=>{let m=parseInt(p,10),z=t.padding.x+m*u+u/2,$=r.className||"viz-grid-label";f+=`<text x="${z}" y="${c}" class="${$}" text-anchor="middle">${h}</text>`;}),d&&Object.entries(d).forEach(([p,h])=>{let m=parseInt(p,10),z=t.padding.y+m*g+g/2,$=r.className||"viz-grid-label";f+=`<text x="${n}" y="${z}" dy=".35em" class="${$}" text-anchor="middle">${h}</text>`;}),f}},Dt={render:({spec:r,nodesById:e})=>{let{points:t}=r.params,i="";return t.forEach(l=>{let a=e.get(l.currentNodeId);if(!a)return;let d=parseInt(l.id.split("-")[1]||"0",10),c=(d%5-2)*10,n=(d%3-1)*10,u=a.pos.x+c,g=a.pos.y+n,f=r.className??"viz-data-point";i+=`<circle data-id="${l.id}" cx="${u}" cy="${g}" r="6" class="${f}" />`;}),i},update:({spec:r,nodesById:e},t)=>{let{points:i}=r.params,l="http://www.w3.org/2000/svg",a=new Map;Array.from(t.children).forEach(c=>{if(c.tagName==="circle"){let n=c.getAttribute("data-id");n&&a.set(n,c);}});let d=new Set;i.forEach(c=>{let n=e.get(c.currentNodeId);if(!n)return;d.add(c.id);let u=parseInt(c.id.split("-")[1]||"0",10),g=(u%5-2)*10,f=(u%3-1)*10,p=n.pos.x+g,h=n.pos.y+f,m=a.get(c.id);m||(m=document.createElementNS(l,"circle"),m.setAttribute("data-id",c.id),m.setAttribute("r","6"),t.appendChild(m)),m.setAttribute("cx",String(p)),m.setAttribute("cy",String(h));let z=r.className??"viz-data-point";m.getAttribute("class")!==z&&m.setAttribute("class",z);}),a.forEach((c,n)=>{d.has(n)||c.remove();});}},Gt={render:({spec:r})=>{let{x:e,y:t,w:i,h:l,rx:a,ry:d,opacity:c,fill:n,stroke:u,strokeWidth:g}=r.params,f=r.className??"viz-overlay-rect",p=a!==void 0?` rx="${a}"`:"",h=d!==void 0?` ry="${d}"`:"",m=c!==void 0?` opacity="${c}"`:"";return `<rect x="${e}" y="${t}" width="${i}" height="${l}" fill="${n??"#3b82f6"}"${n===void 0?' fill-opacity="0.12"':""} stroke="${u??"#3b82f6"}"${u===void 0?' stroke-opacity="0.9"':""} stroke-width="${g??3}"${p}${h}${m} class="${f}" />`},update:({spec:r},e)=>{let t="http://www.w3.org/2000/svg",{x:i,y:l,w:a,h:d,rx:c,ry:n,opacity:u,fill:g,stroke:f,strokeWidth:p}=r.params,h=r.className??"viz-overlay-rect",m=e.querySelector("rect");m||(m=document.createElementNS(t,"rect"),e.appendChild(m)),m.setAttribute("x",String(i)),m.setAttribute("y",String(l)),m.setAttribute("width",String(a)),m.setAttribute("height",String(d)),g===void 0?(m.setAttribute("fill","#3b82f6"),m.setAttribute("fill-opacity","0.12")):(m.setAttribute("fill",g),m.removeAttribute("fill-opacity")),f===void 0?(m.setAttribute("stroke","#3b82f6"),m.setAttribute("stroke-opacity","0.9")):(m.setAttribute("stroke",f),m.removeAttribute("stroke-opacity")),m.setAttribute("stroke-width",String(p??3)),c!==void 0?m.setAttribute("rx",String(c)):m.removeAttribute("rx"),n!==void 0?m.setAttribute("ry",String(n)):m.removeAttribute("ry"),u!==void 0?m.setAttribute("opacity",String(u)):m.removeAttribute("opacity"),m.setAttribute("class",h);}},Mt={render:({spec:r})=>{let{x:e,y:t,r:i,opacity:l,fill:a,stroke:d,strokeWidth:c}=r.params,n=r.className??"viz-overlay-circle",u=l!==void 0?` opacity="${l}"`:"";return `<circle cx="${e}" cy="${t}" r="${i}" fill="${a??"#3b82f6"}"${a===void 0?' fill-opacity="0.12"':""} stroke="${d??"#3b82f6"}"${d===void 0?' stroke-opacity="0.9"':""} stroke-width="${c??3}"${u} class="${n}" />`},update:({spec:r},e)=>{let t="http://www.w3.org/2000/svg",{x:i,y:l,r:a,opacity:d,fill:c,stroke:n,strokeWidth:u}=r.params,g=r.className??"viz-overlay-circle",f=e.querySelector("circle");f||(f=document.createElementNS(t,"circle"),e.appendChild(f)),f.setAttribute("cx",String(i)),f.setAttribute("cy",String(l)),f.setAttribute("r",String(a)),c===void 0?(f.setAttribute("fill","#3b82f6"),f.setAttribute("fill-opacity","0.12")):(f.setAttribute("fill",c),f.removeAttribute("fill-opacity")),n===void 0?(f.setAttribute("stroke","#3b82f6"),f.setAttribute("stroke-opacity","0.9")):(f.setAttribute("stroke",n),f.removeAttribute("stroke-opacity")),f.setAttribute("stroke-width",String(u??3)),d!==void 0?f.setAttribute("opacity",String(d)):f.removeAttribute("opacity"),f.setAttribute("class",g);}},It={render:({spec:r})=>{let{x:e,y:t,text:i,opacity:l,fill:a,fontSize:d,fontWeight:c,textAnchor:n,dominantBaseline:u}=r.params,g=r.className??"viz-overlay-text",f=l!==void 0?` opacity="${l}"`:"",p=d!==void 0?` font-size="${d}"`:"",h=c!==void 0?` font-weight="${c}"`:"",m=n!==void 0?` text-anchor="${n}"`:"",z=u!==void 0?` dominant-baseline="${u}"`:"";return `<text x="${e}" y="${t}" fill="${a??"#111"}"${f}${p}${h}${m}${z} class="${g}">${i}</text>`},update:({spec:r},e)=>{let t="http://www.w3.org/2000/svg",{x:i,y:l,text:a,opacity:d,fill:c,fontSize:n,fontWeight:u,textAnchor:g,dominantBaseline:f}=r.params,p=r.className??"viz-overlay-text",h=e.querySelector("text");h||(h=document.createElementNS(t,"text"),e.appendChild(h)),h.setAttribute("x",String(i)),h.setAttribute("y",String(l)),h.setAttribute("fill",c??"#111"),d!==void 0?h.setAttribute("opacity",String(d)):h.removeAttribute("opacity"),n!==void 0?h.setAttribute("font-size",String(n)):h.removeAttribute("font-size"),u!==void 0?h.setAttribute("font-weight",String(u)):h.removeAttribute("font-weight"),g!==void 0?h.setAttribute("text-anchor",g):h.removeAttribute("text-anchor"),f!==void 0?h.setAttribute("dominant-baseline",f):h.removeAttribute("dominant-baseline"),h.setAttribute("class",p),h.textContent=a;}};function bt(r){let e=r.x??0,t=r.y??0,i=r.scale??1,l=r.rotation??0,a=[`translate(${e}, ${t})`];return l&&a.push(`rotate(${l})`),i!==1&&a.push(`scale(${i})`),a.join(" ")}function vt(r){return r<0?0:r>1?1:r}function xt(r){return {x:r.runtime?.x??r.pos.x,y:r.runtime?.y??r.pos.y}}function St(r,e){let t=r.x??0,i=r.y??0,l=t,a=i;if(r.from&&r.to){let g=e.get(r.from),f=e.get(r.to);if(g&&f){let p=vt(r.progress??0),h=xt(g),m=xt(f);l=h.x+(m.x-h.x)*p+t,a=h.y+(m.y-h.y)*p+i;}}let d=r.scale??1,c=r.magnitude,n=c===void 0?1:.85+.3*vt(Math.abs(c)),u=d*n;return {x:l,y:a,scale:u,rotation:r.rotation??0}}var Ht={render:({spec:r,nodesById:e,edgesById:t,scene:i,registry:l})=>{let{children:a,opacity:d}=r.params,c=St(r.params,e),n=bt(c),u=d!==void 0?` opacity="${d}"`:"",g=l;if(!g)return `<g transform="${n}"${u}></g>`;let f=`<g transform="${n}"${u}>`;return a.forEach((p,h)=>{let m=g.get(p.id);if(!m)return;let z={spec:p,nodesById:e,edgesById:t,scene:i,registry:g},$=p.key?`key:${p.key}`:`idx:${h}:${p.id}`;f+=`<g data-viz-role="overlay-child" data-overlay-child-id="${$}">`,f+=m.render(z),f+="</g>";}),f+="</g>",f},update:({spec:r,nodesById:e,edgesById:t,scene:i,registry:l},a)=>{let d=l;if(!d)return;let{children:c,opacity:n}=r.params,u=St(r.params,e);a.setAttribute("transform",bt(u)),n!==void 0?a.setAttribute("opacity",String(n)):a.removeAttribute("opacity");let g="http://www.w3.org/2000/svg",f=new Map;Array.from(a.children).forEach(h=>{if(h instanceof SVGGElement){let m=h.getAttribute("data-overlay-child-id");m&&f.set(m,h);}});let p=new Set;c.forEach((h,m)=>{let z=d.get(h.id);if(!z)return;let $=h.key?`key:${h.key}`:`idx:${m}:${h.id}`;p.add($);let v=f.get($);v||(v=document.createElementNS(g,"g"),v.setAttribute("data-viz-role","overlay-child"),v.setAttribute("data-overlay-child-id",$),a.appendChild(v));let w={spec:h,nodesById:e,edgesById:t,scene:i,registry:d};z.update?z.update(w,v):v.innerHTML=z.render(w);}),f.forEach((h,m)=>{p.has(m)||h.remove();});}},ye=new Xe().register("signal",Rt).register("grid-labels",Tt).register("data-points",Dt).register("rect",Gt).register("circle",Mt).register("text",It).register("group",Ht);var ze=class r{specs=[];keyCounters=new Map;add(e,t,i){let l=i?.className,a=i?.key;if(!a&&this.specs.some(c=>c.id===e&&(c.key===void 0||c.key===""))){let c=(this.keyCounters.get(e)??0)+1;this.keyCounters.set(e,c),a=`${e}#${c}`;}return this.specs.push({id:e,params:t,key:a,className:l}),this}remove(e){for(let t=this.specs.length-1;t>=0;t--){let i=this.specs[t];if(!i)continue;let l=i.key===e,a=!i.key&&i.id===e;(l||a)&&this.specs.splice(t,1);}return this}clear(){return this.specs.length=0,this.keyCounters.clear(),this}build(){return [...this.specs]}rect(e,t){return this.add("rect",e,t)}circle(e,t){return this.add("circle",e,t)}text(e,t){return this.add("text",e,t)}group(e,t,i){let l=new r;t(l);let a=l.build();return this.add("group",{...e,children:a},i)}};function Tr(r){let e=new ze;return r(e),e.build()}var Wt={solid:"",dashed:"8, 4",dotted:"2, 4","dash-dot":"8, 4, 2, 4"};function be(r){return !r||r==="solid"?"":Wt[r]??r}function we(r,e){let t=r.position==="start"?e.start:r.position==="end"?e.end:e.mid;return {x:t.x+(r.dx||0),y:t.y+(r.dy||0)}}function Be(r){return r.labels&&r.labels.length>0?r.labels:r.label?[r.label]:[]}var X="http://www.w3.org/2000/svg",Ge={dx:2,dy:2,blur:4,color:"rgba(0,0,0,0.2)"};function qt(r){return {dx:r.dx??Ge.dx,dy:r.dy??Ge.dy,blur:r.blur??Ge.blur,color:r.color??Ge.color}}function Ft(r){let e=r.color.replace(/[^a-zA-Z0-9]/g,"_");return `viz-shadow-${r.dx}-${r.dy}-${r.blur}-${e}`}function Kt(r,e){let t=qt(e),i=Ft(t);if(!r.querySelector(`#${CSS.escape(i)}`)){let l=r.querySelector("defs");if(l){let a=document.createElementNS(X,"filter");a.setAttribute("id",i),a.setAttribute("x","-50%"),a.setAttribute("y","-50%"),a.setAttribute("width","200%"),a.setAttribute("height","200%");let d=document.createElementNS(X,"feDropShadow");d.setAttribute("dx",String(t.dx)),d.setAttribute("dy",String(t.dy)),d.setAttribute("stdDeviation",String(t.blur)),d.setAttribute("flood-color",t.color),d.setAttribute("flood-opacity","1"),a.appendChild(d),l.appendChild(a);}}return i}function jt(r){return `viz-sketch-${r}`}function Ut(r,e){let t=(r^e*2654435761)>>>0|1;return t^=t<<13,t^=t>>>17,t^=t<<5,(t>>>0)/4294967296}function Ne(r,e,t,i){return t+Ut(r,e)*(i-t)}function Et(r,e){let t=jt(e);if(!r.querySelector(`#${CSS.escape(t)}`)){let i=r.querySelector("defs");if(i){let l=document.createElementNS(X,"filter");l.setAttribute("id",t),l.setAttribute("filterUnits","userSpaceOnUse"),l.setAttribute("x","-10000"),l.setAttribute("y","-10000"),l.setAttribute("width","20000"),l.setAttribute("height","20000");let a=e+37,d=Ne(e,1,.009,.015).toFixed(4),c=Ne(e,2,2.5,4).toFixed(1),n=Ne(e,3,3,5).toFixed(1),u=Ne(e,4,.3,1.6).toFixed(2),g=Ne(e,5,.2,1.3).toFixed(2),f=document.createElementNS(X,"feTurbulence");f.setAttribute("type","fractalNoise"),f.setAttribute("baseFrequency","0.008"),f.setAttribute("numOctaves","2"),f.setAttribute("seed",String(e)),f.setAttribute("result","n1"),l.appendChild(f);let p=document.createElementNS(X,"feTurbulence");p.setAttribute("type","fractalNoise"),p.setAttribute("baseFrequency",d),p.setAttribute("numOctaves","2"),p.setAttribute("seed",String(a)),p.setAttribute("result","n2"),l.appendChild(p);let h=document.createElementNS(X,"feDisplacementMap");h.setAttribute("in","SourceGraphic"),h.setAttribute("in2","n1"),h.setAttribute("scale",c),h.setAttribute("xChannelSelector","R"),h.setAttribute("yChannelSelector","G"),h.setAttribute("result","s1"),l.appendChild(h);let m=document.createElementNS(X,"feDisplacementMap");m.setAttribute("in","SourceGraphic"),m.setAttribute("in2","n2"),m.setAttribute("scale",n),m.setAttribute("xChannelSelector","G"),m.setAttribute("yChannelSelector","R"),m.setAttribute("result","s2"),l.appendChild(m);let z=document.createElementNS(X,"feOffset");z.setAttribute("in","s2"),z.setAttribute("dx",u),z.setAttribute("dy",g),z.setAttribute("result","s2off"),l.appendChild(z);let $=document.createElementNS(X,"feComposite");$.setAttribute("in","s1"),$.setAttribute("in2","s2off"),$.setAttribute("operator","over"),l.appendChild($),i.appendChild(l);}}return t}function Zt(r,e){if(r?.sketchSeed!==void 0)return r.sketchSeed;let t=0;for(let i=0;i<e.length;i++)t=Math.imul(31,t)+e.charCodeAt(i)|0;return Math.abs(t)}function Yt(r){return r.replace(/[^a-zA-Z0-9]/g,"_")}function Qe(r,e,t="end"){if(r==="none")return "";let i=`viz-${r}`,l=t==="start"?"-start":"";return e?`${i}${l}-${Yt(e)}`:`${i}${l}`}function Xt(r,e){switch(r){case "arrow":{let t=document.createElementNS(X,"polygon");return t.setAttribute("points","0,2 10,5 0,8"),t.setAttribute("fill",e),t}case "arrowOpen":{let t=document.createElementNS(X,"polyline");return t.setAttribute("points","0,2 10,5 0,8"),t.setAttribute("fill","white"),t.setAttribute("stroke",e),t.setAttribute("stroke-width","1.5"),t.setAttribute("stroke-linejoin","miter"),t}case "diamond":{let t=document.createElementNS(X,"polygon");return t.setAttribute("points","0,5 5,2 10,5 5,8"),t.setAttribute("fill",e),t}case "diamondOpen":{let t=document.createElementNS(X,"polygon");return t.setAttribute("points","0,5 5,2 10,5 5,8"),t.setAttribute("fill","white"),t.setAttribute("stroke",e),t.setAttribute("stroke-width","1.5"),t}case "circle":{let t=document.createElementNS(X,"circle");return t.setAttribute("cx","5"),t.setAttribute("cy","5"),t.setAttribute("r","3"),t.setAttribute("fill",e),t}case "circleOpen":{let t=document.createElementNS(X,"circle");return t.setAttribute("cx","5"),t.setAttribute("cy","5"),t.setAttribute("r","3"),t.setAttribute("fill","white"),t.setAttribute("stroke",e),t.setAttribute("stroke-width","1.5"),t}case "square":{let t=document.createElementNS(X,"rect");return t.setAttribute("x","2"),t.setAttribute("y","2"),t.setAttribute("width","6"),t.setAttribute("height","6"),t.setAttribute("fill",e),t}case "bar":{let t=document.createElementNS(X,"line");return t.setAttribute("x1","5"),t.setAttribute("y1","1"),t.setAttribute("x2","5"),t.setAttribute("y2","9"),t.setAttribute("stroke",e),t.setAttribute("stroke-width","2"),t.setAttribute("stroke-linecap","round"),t}case "halfArrow":{let t=document.createElementNS(X,"polygon");return t.setAttribute("points","0,2 10,5 0,5"),t.setAttribute("fill",e),t}default:return null}}function At(r,e,t="arrow",i="end"){let l=Qe(t,e,i);if(!l)return "";if(!r.querySelector(`#${CSS.escape(l)}`)){let a=r.querySelector("defs");if(a){let d=document.createElementNS(X,"marker");d.setAttribute("id",l),d.setAttribute("viewBox","0 0 10 10"),d.setAttribute("markerWidth","10"),d.setAttribute("markerHeight","10"),d.setAttribute("refX","9"),d.setAttribute("refY","5"),d.setAttribute("orient",i==="start"?"auto-start-reverse":"auto");let c=Xt(t,e);c&&d.appendChild(c),a.appendChild(d);}}return l}function Ce(r,e){let t=new Map,i=new Map,l=new Map,a=new Map,d=new Map,c=new Map,n=new Map,u=new Map,g=new Map,f=new Map,p=r.querySelector('[data-viz-layer="nodes"]')||r.querySelector(".viz-layer-nodes");if(p){let m=Array.from(p.querySelectorAll("g[data-id]"));for(let z of m){let $=z.getAttribute("data-id");if(!$)continue;t.set($,z);let v=z.querySelector('[data-viz-role="node-shape"]')||z.querySelector(".viz-node-shape");v&&i.set($,v);let w=z.querySelector('[data-viz-role="node-label"]')||z.querySelector(".viz-node-label");w&&l.set($,w);let _=z.querySelector('[data-viz-role="node-image"]')||z.querySelector(".viz-node-image");_&&a.set($,_);let B=z.querySelector('[data-viz-role="node-icon"]')||z.querySelector(".viz-node-icon");B&&d.set($,B);let s=z.querySelector('[data-viz-role="node-svg"]')||z.querySelector(".viz-node-svg");s&&c.set($,s);}}let h=r.querySelector('[data-viz-layer="edges"]')||r.querySelector(".viz-layer-edges");if(h){let m=Array.from(h.querySelectorAll("g[data-id]"));for(let z of m){let $=z.getAttribute("data-id");if(!$)continue;n.set($,z);let v=z.querySelector('[data-viz-role="edge-line"]')||z.querySelector(".viz-edge");v&&u.set($,v);let w=z.querySelector('[data-viz-role="edge-hit"]')||z.querySelector(".viz-edge-hit");w&&g.set($,w);let _=Array.from(z.querySelectorAll('[data-viz-role="edge-label"],.viz-edge-label'));_.length>0&&f.set($,_);}}return {svg:r,edgePathResolver:e?.edgePathResolver??null,nodeGroupsById:t,nodeShapesById:i,nodeLabelsById:l,nodeImagesById:a,nodeIconsById:d,nodeSvgsById:c,edgeGroupsById:n,edgeLinesById:u,edgeHitsById:g,edgeLabelsById:f}}function Jt(r){let e=0,t=0;if(r&&typeof r=="object"){let i=r;typeof i.w=="number"?e=i.w:typeof i.r=="number"?e=i.r*2:typeof i.rx=="number"&&typeof i.ry=="number"?(e=i.rx*2,t=i.ry*2):typeof i.size=="number"?e=i.size:typeof i.outerR=="number"&&(e=i.outerR*2),typeof i.h=="number"?t=i.h:t===0&&(t=e);}return {w:e,h:t}}function Je(r,e,t,i,l,a,d){let c=d?.position??"center",n=d?.dx??0,u=d?.dy??0,g=0,f=0;switch(c){case "above":f=-i/2-a/2;break;case "below":f=i/2+a/2;break;case "left":g=-t/2-l/2;break;case "right":g=t/2+l/2;break;}return {x:r+g-l/2+n,y:e+f-a/2+u}}function et(r,e){let t=new Map(r.nodes.map(n=>[n.id,n])),i=new Map;for(let n of r.nodes)if(n.container){let u=(n.runtime?.x??n.pos.x)-n.pos.x,g=(n.runtime?.y??n.pos.y)-n.pos.y;(u!==0||g!==0)&&i.set(n.id,{dx:u,dy:g});}for(let n of r.nodes){let u=e.nodeGroupsById.get(n.id),g=e.nodeShapesById.get(n.id);if(!u||!g)continue;let{x:f,y:p}=chunkOZAFCKI7_js.d(n);if(n.parentId){let B=i.get(n.parentId);B&&(f+=B.dx,p+=B.dy);}let h=chunkOZAFCKI7_js.e(n);chunkOZAFCKI7_js.g(g,h,{x:f,y:p});let{w:m,h:z}=Jt(h);if(m>0&&z>0){let B=e.nodeImagesById.get(n.id);if(B&&n.image){let S=Je(f,p,m,z,n.image.width,n.image.height,{position:n.image.position,dx:n.image.dx,dy:n.image.dy});B.setAttribute("x",String(S.x)),B.setAttribute("y",String(S.y));}let s=e.nodeIconsById.get(n.id);if(s&&n.icon){let S=Je(f,p,m,z,n.icon.size,n.icon.size,{position:n.icon.position,dx:n.icon.dx,dy:n.icon.dy});s.setAttribute("transform",`translate(${S.x} ${S.y})`);}let x=e.nodeSvgsById.get(n.id);if(x&&n.svgContent){let S=Je(f,p,m,z,n.svgContent.width,n.svgContent.height,{position:n.svgContent.position,dx:n.svgContent.dx,dy:n.svgContent.dy});x.setAttribute("transform",`translate(${S.x} ${S.y})`);}}if(n.container?.headerHeight&&"w"in h&&"h"in h){let B=u.querySelector('[data-viz-role="container-header"]');if(B){let s=h.w,x=h.h,S=p-x/2+n.container.headerHeight;B.setAttribute("x1",String(f-s/2)),B.setAttribute("y1",String(S)),B.setAttribute("x2",String(f+s/2)),B.setAttribute("y2",String(S));}}let $=e.nodeLabelsById.get(n.id);if($&&n.label){let B=f+(n.label.dx||0),s=p+(n.label.dy||0);if(n.container?.headerHeight&&"h"in h&&!n.label.dy){let S=h.h;s=p-S/2+n.container.headerHeight/2,B=f+(n.label.dx||0);}$.setAttribute("x",String(B)),$.setAttribute("y",String(s));let x=$.querySelectorAll('tspan[data-viz-role="text-line"]');for(let S=0;S<x.length;S++)x[S]?.setAttribute("x",String(B));}if(n.runtime?.opacity!==void 0?(u.style.opacity=String(n.runtime.opacity),g.removeAttribute("opacity")):(u.style.removeProperty("opacity"),n.style?.opacity!==void 0?g.setAttribute("opacity",String(n.style.opacity)):g.removeAttribute("opacity")),n.style?.shadow){let B=Kt(e.svg,n.style.shadow);g.setAttribute("filter",`url(#${B})`);}else g.removeAttribute("filter");if(n.style?.sketch||r.sketch?.enabled){let B=Zt(n.style,n.id),s=Et(e.svg,B);u.setAttribute("filter",`url(#${s})`),u.classList.contains("viz-sketch")||u.classList.add("viz-sketch");}else {u.classList.contains("viz-sketch")&&u.classList.remove("viz-sketch");let B=u.getAttribute("filter");B&&B.startsWith("url(#viz-sketch-")&&u.removeAttribute("filter");}let w=n.runtime?.scale,_=n.runtime?.rotation;if(w!==void 0||_!==void 0){let B=w??1,s=_??0;u.setAttribute("transform",`translate(${f} ${p}) rotate(${s}) scale(${B}) translate(${-f} ${-p})`);}else u.removeAttribute("transform");n.ports&&u.querySelectorAll('[data-viz-role="port"]').forEach(s=>{let x=s.getAttribute("data-port"),S=n.ports.find(G=>G.id===x);S&&(s.setAttribute("cx",String(f+S.offset.x)),s.setAttribute("cy",String(p+S.offset.y)));});}let l=e.edgePathResolver;for(let n of r.edges){let u=e.edgeGroupsById.get(n.id),g=e.edgeLinesById.get(n.id);if(!u||!g)continue;let f=n.from?t.get(n.from)??null:null,p=n.to?t.get(n.to)??null:null;if(n.from&&!f||n.to&&!p||!f&&!n.fromAt&&!p&&!n.toAt)continue;let h;if(f&&p&&f===p)h=chunkTVRPABD2_js.g(f,n);else {let v=chunkTVRPABD2_js.e(f,p,n);h=chunkTVRPABD2_js.f(v.start,v.end,n.routing,n.waypoints);}if(l){let v=w=>{let _=w.from?t.get(w.from)??null:null,B=w.to?t.get(w.to)??null:null;if(w.from&&!_||w.to&&!B||!_&&!w.fromAt&&!B&&!w.toAt)return "";if(_&&B&&_===B)return chunkTVRPABD2_js.g(_,w).d;let s=chunkTVRPABD2_js.e(_,B,w);return chunkTVRPABD2_js.f(s.start,s.end,w.routing,w.waypoints).d};try{let w=l(n,r,v);typeof w=="string"&&w&&(h.d=w);}catch(w){console.warn(`RuntimePatcher: edge path resolver threw for edge ${n.id}`,w);}}if(g.setAttribute("d",h.d),n.style?.stroke!==void 0&&(g.style.stroke=n.style.stroke),n.style?.strokeWidth!==void 0&&(g.style.strokeWidth=String(n.style.strokeWidth)),n.style?.fill!==void 0&&(g.style.fill=n.style.fill),n.style?.opacity!==void 0&&(g.style.opacity=String(n.style.opacity)),n.style?.strokeDasharray!==void 0&&(g.style.strokeDasharray=be(n.style.strokeDasharray)),n.markerEnd&&n.markerEnd!=="none"){let v=n.style?.stroke?At(e.svg,n.style.stroke,n.markerEnd,"end"):Qe(n.markerEnd,void 0,"end");g.setAttribute("marker-end",`url(#${v})`);}else g.removeAttribute("marker-end");if(n.markerStart&&n.markerStart!=="none"){let v=n.style?.stroke?At(e.svg,n.style.stroke,n.markerStart,"start"):Qe(n.markerStart,void 0,"start");g.setAttribute("marker-start",`url(#${v})`);}else g.removeAttribute("marker-start");let m=e.edgeHitsById.get(n.id);m&&m.setAttribute("d",h.d);let z=e.edgeLabelsById.get(n.id);if(z){let v=Be(n);z.forEach((w,_)=>{let B=v[_];if(!B)return;let s=we(B,h);w.setAttribute("x",String(s.x)),w.setAttribute("y",String(s.y));let x=w.querySelectorAll('tspan[data-viz-role="text-line"]');for(let S=0;S<x.length;S++)x[S]?.setAttribute("x",String(s.x));});}if(n.runtime?.opacity!==void 0?u.style.opacity=String(n.runtime.opacity):u.style.removeProperty("opacity"),n.runtime?.strokeDashoffset!==void 0?(g.style.strokeDashoffset=String(n.runtime.strokeDashoffset),g.setAttribute("stroke-dashoffset",String(n.runtime.strokeDashoffset))):(g.style.removeProperty("stroke-dashoffset"),g.removeAttribute("stroke-dashoffset")),n.style?.sketch||r.sketch?.enabled){let v=0;for(let B=0;B<n.id.length;B++)v=Math.imul(31,v)+n.id.charCodeAt(B)|0;let w=Math.abs(v),_=Et(e.svg,w);g.setAttribute("filter",`url(#${_})`),u.classList.contains("viz-sketch")||u.classList.add("viz-sketch");}else {let v=g.getAttribute("filter");v&&v.startsWith("url(#viz-sketch-")&&g.removeAttribute("filter"),u.classList.contains("viz-sketch")&&u.classList.remove("viz-sketch");}}let a=[],d=new Map;for(let n of r.nodes)if(n.parentId){let u=d.get(n.parentId);u||(u=[],d.set(n.parentId,u)),u.push(n);}else a.push(n);a.sort((n,u)=>(n.zIndex||0)-(u.zIndex||0));let c=e.svg.querySelector('[data-viz-layer="nodes"]')||e.svg.querySelector(".viz-layer-nodes");if(c){let n=c.firstElementChild;for(let u of a){let g=e.nodeGroupsById.get(u.id);g&&(n!==g?c.insertBefore(g,n):n=n.nextElementSibling);}}for(let[n,u]of d.entries()){u.sort((p,h)=>(p.zIndex||0)-(h.zIndex||0));let g=e.nodeGroupsById.get(n);if(!g)continue;let f=g.querySelector(':scope > [data-viz-role="container-children"]');if(f){let p=f.firstElementChild;for(let h of u){let m=e.nodeGroupsById.get(h.id);m&&(p!==m?f.insertBefore(m,p):p=p.nextElementSibling);}}}}function tt(r,e,t=12){let i=r.split(`
|
|
114
|
+
`);if(!e)return i;let l=[],a=Math.max(1,Math.floor(e/(t*.6)));for(let d of i){if(d.length<=a){l.push(d);continue}let c=d.split(" "),n="";for(let u of c){let g=n?`${n} ${u}`:u;g.length<=a?n=g:n?(l.push(n),n=u):(l.push(u),n="");}n&&l.push(n);}return l}var Qt=1.2;function ge(r,e,t,i={}){let{className:l="",fill:a,fontSize:d,fontWeight:c,fontFamily:n,textAnchor:u="middle",dominantBaseline:g="middle",maxWidth:f,lineHeight:p=Qt,verticalAlign:h="middle",overflow:m}=i,z=12;if(typeof d=="number")z=d;else if(typeof d=="string"){let G=parseFloat(d);isNaN(G)||(z=G);}let $=typeof t!="string",v=[],w=[];if($)w=er(t.tokens);else if(v=tt(t,f,z),f&&m&&m!=="visible")if(m==="ellipsis"&&v.length>2){let G=v[1];G&&(v=[v[0],G.substring(0,Math.max(0,G.length-3))+"..."]);}else m==="clip"&&v.length>2&&(v=[v[0],v[1]]);let _=[];a!==void 0&&_.push(`fill="${a}"`),d!==void 0&&_.push(`font-size="${d}"`),c!==void 0&&_.push(`font-weight="${c}"`),n!==void 0&&_.push(`font-family="${$e(n)}"`),_.push(`text-anchor="${u}"`),g&&_.push(`dominant-baseline="${g}"`);let B=_.length>0?" "+_.join(" "):"",s=$?w.length:v.length,x=0;h==="middle"?x=-((s-1)*p)/2:h==="bottom"?x=-((s-1)*p):h==="top"&&(x=0);let S=$?w.map((G,o)=>{let N=kt(o,x,p),E=G.map(F=>tr(F)).join("");return `<tspan data-viz-role="text-line" x="${r}" dy="${N}">${E}</tspan>`}):v.map((G,o)=>{let N=kt(o,x,p);return `<tspan data-viz-role="text-line" x="${r}" dy="${N}">${rt(G)}</tspan>`});return `<text x="${r}" y="${e}" class="${l}"${B}>${S.join("")}</text>`}function kt(r,e,t){return r===0?e===0?"0":`${e}em`:`${t}em`}function er(r){let e=[[]];for(let t of r){if(t.kind==="newline"){e.push([]);continue}t.kind==="span"&&e[e.length-1].push(t);}return e.length===0?[[]]:e}function tr(r){let e=[];r.className&&e.push(`class="${$e(r.className)}"`),r.fill!==void 0&&e.push(`fill="${$e(r.fill)}"`),r.fontSize!==void 0&&e.push(`font-size="${r.fontSize}"`),r.fontFamily?e.push(`font-family="${$e(r.fontFamily)}"`):r.code&&e.push('font-family="monospace"');let t=r.fontWeight??(r.bold?"bold":void 0);t!==void 0&&e.push(`font-weight="${t}"`),r.italic&&e.push('font-style="italic"'),r.underline&&e.push('text-decoration="underline"'),r.baselineShift&&(e.push(`baseline-shift="${r.baselineShift}"`),r.fontSize===void 0&&e.push('font-size="0.8em"'));let l=`<tspan${e.length?" "+e.join(" "):""}>${rt(r.text)}</tspan>`;return r.href?`<a href="${$e(r.href)}">${l}</a>`:l}function $e(r){return rt(r)}function rt(r){return r.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function zt(r,e){if(e.at&&r.at(e.at.x,e.at.y),e.cell&&r.cell(e.cell.col,e.cell.row,e.cell.align),e.circle?r.circle(e.circle.r):e.rect?r.rect(e.rect.w,e.rect.h,e.rect.rx):e.diamond?r.diamond(e.diamond.w,e.diamond.h):e.cylinder?r.cylinder(e.cylinder.w,e.cylinder.h,e.cylinder.arcHeight):e.hexagon?r.hexagon(e.hexagon.r,e.hexagon.orientation):e.ellipse?r.ellipse(e.ellipse.rx,e.ellipse.ry):e.arc?r.arc(e.arc.r,e.arc.startAngle,e.arc.endAngle,e.arc.closed):e.blockArrow?r.blockArrow(e.blockArrow.length,e.blockArrow.bodyWidth,e.blockArrow.headWidth,e.blockArrow.headLength,e.blockArrow.direction):e.callout?r.callout(e.callout.w,e.callout.h,{rx:e.callout.rx,pointerSide:e.callout.pointerSide,pointerHeight:e.callout.pointerHeight,pointerWidth:e.callout.pointerWidth,pointerPosition:e.callout.pointerPosition}):e.cloud?r.cloud(e.cloud.w,e.cloud.h):e.cross?r.cross(e.cross.size,e.cross.barWidth):e.cube?r.cube(e.cube.w,e.cube.h,e.cube.depth):e.path?r.path(e.path.d,e.path.w,e.path.h):e.document?r.document(e.document.w,e.document.h,e.document.waveHeight):e.note?r.note(e.note.w,e.note.h,e.note.foldSize):e.parallelogram?r.parallelogram(e.parallelogram.w,e.parallelogram.h,e.parallelogram.skew):e.star?r.star(e.star.points,e.star.outerR,e.star.innerR):e.trapezoid?r.trapezoid(e.trapezoid.topW,e.trapezoid.bottomW,e.trapezoid.h):e.triangle&&r.triangle(e.triangle.w,e.triangle.h,e.triangle.direction),e.fill&&r.fill(e.fill),e.stroke&&(typeof e.stroke=="string"?r.stroke(e.stroke):r.stroke(e.stroke.color,e.stroke.width)),e.opacity!==void 0&&r.opacity(e.opacity),e.dash&&r.dash(e.dash),e.shadow!==void 0&&e.shadow!==false&&r.shadow(e.shadow===true?{}:e.shadow),e.sketch!==void 0&&e.sketch!==false&&r.sketch(e.sketch===true?{}:e.sketch),e.className&&r.class(e.className),e.zIndex!==void 0&&r.zIndex(e.zIndex),e.label)if(typeof e.label=="string")r.label(e.label);else {let t="text"in e.label&&typeof e.label.text=="string"?e.label.text:"";r.label(t,e.label);}if(e.image&&r.image(e.image.href,e.image.w,e.image.h,{dx:e.image.dx,dy:e.image.dy,position:e.image.position,preserveAspectRatio:e.image.preserveAspectRatio}),e.icon&&r.icon(e.icon.id,{size:e.icon.size,color:e.icon.color,dx:e.icon.dx,dy:e.icon.dy,position:e.icon.position}),e.svgContent&&r.svgContent(e.svgContent.content,e.svgContent.w,e.svgContent.h,{dx:e.svgContent.dx,dy:e.svgContent.dy,position:e.svgContent.position}),e.data!==void 0&&r.data(e.data),e.onClick&&r.onClick(e.onClick),e.tooltip!==void 0&&r.tooltip(e.tooltip),e.badges)for(let t of e.badges)r.badge(t.text,{position:t.position,fill:t.fill,background:t.background,fontSize:t.fontSize});if(e.ports)for(let t of e.ports)r.port(t.id,t.offset,t.direction);if(e.container&&r.container(e.container),e.parent&&r.parent(e.parent),e.compartments)for(let t of e.compartments)r.compartment(t.id,i=>{if(t.label)if(typeof t.label=="string")i.label(t.label);else {let{text:l,...a}=t.label;i.label(l,a);}if(t.entries)for(let l of t.entries)i.entry(l.id,l.text,{onClick:l.onClick,style:l.style,tooltip:l.tooltip,maxWidth:l.maxWidth,overflow:l.overflow,padding:l.padding,className:l.className});t.height!==void 0&&i.height(t.height);});}var rr=30,wt=16,it=10;function Bt(r){let e=r.label&&typeof r.label.fontSize=="number"?r.label.fontSize:wt,t=e*(r.label?.lineHeight??1.2),i=tt(r.text,r.label?.maxWidth,e);return t*i.length+r.paddingTop+r.paddingBottom}function ir(r){if(r.explicitHeight!==void 0)return r.explicitHeight;if(r.entries&&r.entries.length>0){let i=it*2;for(let l of r.entries)i+=Bt(l);return i}if(!r.label)return rr;let e=(r.label.text.match(/\n/g)?.length??0)+1,t=typeof r.label.fontSize=="number"?r.label.fontSize:wt;return e*t*(r.label.lineHeight??1.2)+it*2}function nr(r,e){let t=r.filter(d=>d.label||d.explicitHeight!==void 0||d.entries&&d.entries.length>0);if(t.length===0)return [];let i=0,l=t.map(d=>{let c=ir(d),n={id:d.id,y:i,height:c};if(d.label&&(n.label=d.label),d.entries&&d.entries.length>0){let u=it;n.entries=d.entries.map(g=>{let f=Bt(g),p={id:g.id,y:u,height:f,text:g.text};return g.label&&(p.label=g.label),g.onClick&&(p.onClick=g.onClick),g.tooltip&&(p.tooltip=g.tooltip),g.className&&(p.className=g.className),g.paddingTop&&(p.paddingTop=g.paddingTop),g.paddingBottom&&(p.paddingBottom=g.paddingBottom),u+=f,p});}return i+=c,n}),a=i;if(e.shape&&"h"in e.shape){let d=e.shape;(d.h===0||a>d.h)&&(d.h=a);}return l}function sr(r){return r===void 0?{top:0,bottom:0}:typeof r=="number"?{top:r,bottom:r}:{top:r.top??0,bottom:r.bottom??0}}var nt=class{_pending;constructor(e){this._pending={id:e};}label(e,t){return this._pending.entries&&this._pending.entries.length>0&&(console.warn(`[vizcraft] Compartment "${this._pending.id}": label() replaces existing entries. Use entry() or label(), not both.`),this._pending.entries=void 0),this._pending.label={text:e,...t,textAnchor:t?.textAnchor??"start"},this}height(e){return this._pending.explicitHeight=e,this}entry(e,t,i){this._pending.label&&(console.warn(`[vizcraft] Compartment "${this._pending.id}": entry() replaces existing label. Use entry() or label(), not both.`),this._pending.label=void 0),this._pending.entries||(this._pending.entries=[]);let l={text:t,textAnchor:"start",...i?.style&&{fill:i.style.fill,fontSize:i.style.fontSize,fontWeight:i.style.fontWeight??i.style.fontStyle,fontFamily:i.style.fontFamily},...i?.maxWidth!==void 0&&{maxWidth:i.maxWidth},...i?.overflow!==void 0&&{overflow:i.overflow}},{top:a,bottom:d}=sr(i?.padding);return this._pending.entries.push({id:e,text:t,label:l,onClick:i?.onClick,tooltip:i?.tooltip,className:i?.className,paddingTop:a,paddingBottom:d}),this}},Me=class{_builder;nodeDef;_pendingCompartments=[];constructor(e,t){this._builder=e,this.nodeDef=t;}at(e,t){return this.nodeDef.pos={x:e,y:t},this}cell(e,t,i="center"){let l=this._builder._getGridConfig();if(!l)return console.warn("VizBuilder: .cell() called but no grid configured. Use .grid() first."),this;let a=this._builder._getViewBox(),d=a.w-l.padding.x*2,c=a.h-l.padding.y*2,n=d/l.cols,u=c/l.rows,g=l.padding.x+e*n,f=l.padding.y+t*u;return i==="center"?(g+=n/2,f+=u/2):i==="end"&&(g+=n,f+=u),this.nodeDef.pos={x:g,y:f},this}circle(e){return this.nodeDef.shape={kind:"circle",r:e},this}rect(e,t,i){return this.nodeDef.shape={kind:"rect",w:e,h:t,rx:i},this}diamond(e,t){return this.nodeDef.shape={kind:"diamond",w:e,h:t},this}cylinder(e,t,i){return this.nodeDef.shape={kind:"cylinder",w:e,h:t,arcHeight:i},this}hexagon(e,t){return this.nodeDef.shape={kind:"hexagon",r:e,orientation:t},this}ellipse(e,t){return this.nodeDef.shape={kind:"ellipse",rx:e,ry:t},this}arc(e,t,i,l){return this.nodeDef.shape={kind:"arc",r:e,startAngle:t,endAngle:i,closed:l},this}blockArrow(e,t,i,l,a){return this.nodeDef.shape={kind:"blockArrow",length:e,bodyWidth:t,headWidth:i,headLength:l,direction:a},this}callout(e,t,i){return this.nodeDef.shape={kind:"callout",w:e,h:t,rx:i?.rx,pointerSide:i?.pointerSide,pointerHeight:i?.pointerHeight,pointerWidth:i?.pointerWidth,pointerPosition:i?.pointerPosition},this}cloud(e,t){return this.nodeDef.shape={kind:"cloud",w:e,h:t},this}cross(e,t){return this.nodeDef.shape={kind:"cross",size:e,barWidth:t},this}cube(e,t,i){return this.nodeDef.shape={kind:"cube",w:e,h:t,depth:i},this}path(e,t,i){return this.nodeDef.shape={kind:"path",d:e,w:t,h:i},this}document(e,t,i){return this.nodeDef.shape={kind:"document",w:e,h:t,waveHeight:i},this}note(e,t,i){return this.nodeDef.shape={kind:"note",w:e,h:t,foldSize:i},this}parallelogram(e,t,i){return this.nodeDef.shape={kind:"parallelogram",w:e,h:t,skew:i},this}star(e,t,i){return this.nodeDef.shape={kind:"star",points:e,outerR:t,innerR:i},this}trapezoid(e,t,i){return this.nodeDef.shape={kind:"trapezoid",topW:e,bottomW:t,h:i},this}triangle(e,t,i){return this.nodeDef.shape={kind:"triangle",w:e,h:t,direction:i},this}image(e,t,i,l){let a=typeof t=="number"?{width:t,height:i??t,dx:l?.dx,dy:l?.dy,position:l?.position,preserveAspectRatio:l?.preserveAspectRatio}:{width:t.w,height:t.h,dx:t.dx,dy:t.dy,position:t.position,preserveAspectRatio:t.preserveAspectRatio},d={href:e,width:a.width,height:a.height};return a.dx!==void 0&&(d.dx=a.dx),a.dy!==void 0&&(d.dy=a.dy),a.position!==void 0&&(d.position=a.position),a.preserveAspectRatio!==void 0&&(d.preserveAspectRatio=a.preserveAspectRatio),this.nodeDef.image=d,this}icon(e,t){let i={id:e,size:t.size};return t.color!==void 0&&(i.color=t.color),t.dx!==void 0&&(i.dx=t.dx),t.dy!==void 0&&(i.dy=t.dy),t.position!==void 0&&(i.position=t.position),this.nodeDef.icon=i,this}svgContent(e,t,i,l){let a=typeof t=="number"?{width:t,height:i??t,dx:l?.dx,dy:l?.dy,position:l?.position}:{width:t.w,height:t.h,dx:t.dx,dy:t.dy,position:t.position},d={content:e,width:a.width,height:a.height};return a.dx!==void 0&&(d.dx=a.dx),a.dy!==void 0&&(d.dy=a.dy),a.position!==void 0&&(d.position=a.position),this.nodeDef.svgContent=d,this}label(e,t){return this.nodeDef.label={text:e,...t},this}richLabel(e,t){let i=new Se;return e(i),this.nodeDef.label={text:"",...t,rich:i.build()},this}fill(e){return this.nodeDef.style={...this.nodeDef.style||{},fill:e},this}stroke(e,t){return this.nodeDef.style={...this.nodeDef.style||{},stroke:e,strokeWidth:t??this.nodeDef.style?.strokeWidth},this}opacity(e){return this.nodeDef.style={...this.nodeDef.style||{},opacity:e},this}dashed(){return this.nodeDef.style={...this.nodeDef.style||{},strokeDasharray:"dashed"},this}dotted(){return this.nodeDef.style={...this.nodeDef.style||{},strokeDasharray:"dotted"},this}dash(e){return this.nodeDef.style={...this.nodeDef.style||{},strokeDasharray:e},this}shadow(e){return this.nodeDef.style={...this.nodeDef.style||{},shadow:e??{}},this}sketch(e){return this.nodeDef.style={...this.nodeDef.style||{},sketch:true,sketchSeed:e?.seed},this}class(e){return this.nodeDef.className?this.nodeDef.className+=` ${e}`:this.nodeDef.className=e,this}zIndex(e){return this.nodeDef.zIndex=e,this}animate(e,t){if(typeof e=="string")return this.nodeDef.animations||(this.nodeDef.animations=[]),this.nodeDef.animations.push({id:e,params:t}),this;let i=this.nodeDef.id;if(!i)throw new Error("NodeBuilder.animate(cb): node has no id");return this._builder.animate(l=>{l.node(i),e(l);}),this}animateTo(e,t){return this.animate(i=>{i.to(e,t);})}data(e){return this.nodeDef.data=e,this}onClick(e){return this.nodeDef.onClick=e,this}container(e){return this.nodeDef.container=e??{layout:"free"},this}compartment(e,t){let i=new nt(e);return t&&t(i),this._pendingCompartments.push(i._pending),this}port(e,t,i){return this.nodeDef.ports||(this.nodeDef.ports=[]),this.nodeDef.ports.push({id:e,offset:t,direction:i}),this}parent(e){return this.nodeDef.parentId=e,this}tooltip(e){return this.nodeDef.tooltip=e,this}badge(e,t){return this.nodeDef.badges||(this.nodeDef.badges=[]),this.nodeDef.badges.push({text:e,position:t?.position??"top-left",fill:t?.fill,background:t?.background,fontSize:t?.fontSize}),this}_resolveCompartments(){this._pendingCompartments.length!==0&&(this.nodeDef.compartments=nr(this._pendingCompartments,this.nodeDef));}done(){return this._resolveCompartments(),this._builder}node(e,t){return this._resolveCompartments(),this._builder.node(e,t)}edge(e,t,i){return this._resolveCompartments(),this._builder.edge(e,t,i)}danglingEdge(e,t){return this._resolveCompartments(),this._builder.danglingEdge(e,t)}overlay(e,t,i){return this._resolveCompartments(),typeof e=="function"?this._builder.overlay(e):this._builder.overlay(e,t,i)}build(){return this._resolveCompartments(),this._builder.build()}svg(e){return this._resolveCompartments(),this._builder.svg(e)}};function st(r,e){if(e.from&&r.from(e.from),e.to&&r.to(e.to),e.fromAt&&r.fromAt(e.fromAt),e.toAt&&r.toAt(e.toAt),e.routing&&r.routing(e.routing),e.waypoints)for(let t of e.waypoints)r.via(t.x,t.y);if(e.arrow!==void 0&&r.arrow(e.arrow),e.markerStart&&r.markerStart(e.markerStart),e.markerEnd&&r.markerEnd(e.markerEnd),e.loopSide&&r.loopSide(e.loopSide),e.loopSize&&r.loopSize(e.loopSize),e.stroke&&(typeof e.stroke=="string"?r.stroke(e.stroke):r.stroke(e.stroke.color,e.stroke.width)),e.fill&&r.fill(e.fill),e.opacity!==void 0&&r.opacity(e.opacity),e.dash&&r.dash(e.dash),e.sketch&&r.sketch(),e.className&&r.class(e.className),e.anchor&&r.connect(e.anchor),e.fromPort&&r.fromPort(e.fromPort),e.toPort&&r.toPort(e.toPort),e.fromAngle!==void 0&&r.fromAngle(e.fromAngle),e.toAngle!==void 0&&r.toAngle(e.toAngle),e.straightLine!==void 0&&(e.straightLine===true?r.straightLine():e.straightLine==="from"?r.straightLineFrom():e.straightLine==="to"&&r.straightLineTo()),e.label)if(typeof e.label=="string")r.label(e.label);else if(Array.isArray(e.label))for(let t of e.label){let i=typeof t.text=="string"?t.text:"";r.label(i,t);}else {let t="text"in e.label&&typeof e.label.text=="string"?e.label.text:"";r.label(t,e.label);}e.hitArea!==void 0&&r.hitArea(e.hitArea),e.meta!==void 0&&r.meta(e.meta),e.data!==void 0&&r.data(e.data),e.onClick&&r.onClick(e.onClick),e.tooltip!==void 0&&r.tooltip(e.tooltip);}var Ve=class{parent;edgeDef;constructor(e,t){this.parent=e,this.edgeDef=t;}straight(){return this.edgeDef.routing="straight",this}curved(){return this.edgeDef.routing="curved",this}orthogonal(){return this.edgeDef.routing="orthogonal",this}routing(e){return this.edgeDef.routing=e,this}via(e,t){return this.edgeDef.waypoints||(this.edgeDef.waypoints=[]),this.edgeDef.waypoints.push({x:e,y:t}),this}from(e){return this.edgeDef.from=e,this}to(e){return this.edgeDef.to=e,this}fromAt(e){return this.edgeDef.fromAt=e,this}toAt(e){return this.edgeDef.toAt=e,this}label(e,t){let i={position:"mid",text:e,dy:-10,...t};return this.edgeDef.labels||(this.edgeDef.labels=[]),this.edgeDef.labels.push(i),i.position==="mid"&&!this.edgeDef.label&&(this.edgeDef.label=i),this}richLabel(e,t){let i=new Se;e(i);let l={position:"mid",text:"",dy:-10,...t,rich:i.build()};return this.edgeDef.labels||(this.edgeDef.labels=[]),this.edgeDef.labels.push(l),l.position==="mid"&&!this.edgeDef.label&&(this.edgeDef.label=l),this}arrow(e=true){return e==="both"?(this.edgeDef.markerStart="arrow",this.edgeDef.markerEnd="arrow"):e==="start"?this.edgeDef.markerStart="arrow":e==="end"?this.edgeDef.markerEnd="arrow":e===true?this.edgeDef.markerEnd="arrow":this.edgeDef.markerEnd="none",this}markerEnd(e){return this.edgeDef.markerEnd=e,this}markerStart(e){return this.edgeDef.markerStart=e,this}connect(e){return this.edgeDef.anchor=e,this}fromPort(e){return this.edgeDef.fromPort=e,this}toPort(e){return this.edgeDef.toPort=e,this}fromAngle(e){return this.edgeDef.fromAngle=e,this}toAngle(e){return this.edgeDef.toAngle=e,this}straightLine(){return this.edgeDef.straightLine=true,this}straightLineFrom(){return this.edgeDef.straightLine="from",this}straightLineTo(){return this.edgeDef.straightLine="to",this}fill(e){return this.edgeDef.style={...this.edgeDef.style||{},fill:e},this}stroke(e,t){return this.edgeDef.style={...this.edgeDef.style||{},stroke:e,strokeWidth:t??this.edgeDef.style?.strokeWidth},this}opacity(e){return this.edgeDef.style={...this.edgeDef.style||{},opacity:e},this}dashed(){return this.edgeDef.style={...this.edgeDef.style||{},strokeDasharray:"dashed"},this}dotted(){return this.edgeDef.style={...this.edgeDef.style||{},strokeDasharray:"dotted"},this}dash(e){return this.edgeDef.style={...this.edgeDef.style||{},strokeDasharray:e},this}sketch(){return this.edgeDef.style={...this.edgeDef.style||{},sketch:true},this}class(e){return this.edgeDef.className?this.edgeDef.className+=` ${e}`:this.edgeDef.className=e,this}animate(e,t){if(typeof e=="string")return this.edgeDef.animations||(this.edgeDef.animations=[]),this.edgeDef.animations.push({id:e,params:t}),this;let i=this.edgeDef.id||`${this.edgeDef.from}->${this.edgeDef.to}`;if(!i)throw new Error("EdgeBuilder.animate(cb): edge has no id");return this.parent.animate(l=>{l.edge(i),e(l);}),this}animateTo(e,t){return this.animate(i=>{i.to(e,t);})}hitArea(e){return this.edgeDef.hitArea=e,this}meta(e){return this.edgeDef.meta=e,this}data(e){return this.edgeDef.data=e,this}onClick(e){return this.edgeDef.onClick=e,this}loopSide(e){return this.edgeDef.loopSide=e,this}loopSize(e){return this.edgeDef.loopSize=e,this}tooltip(e){return this.edgeDef.tooltip=e,this}done(){return this.parent}node(e,t){return this.parent.node(e,t)}edge(e,t,i){return this.parent.edge(e,t,i)}danglingEdge(e,t){return this.parent.danglingEdge(e,t)}overlay(e,t,i){return typeof e=="function"?this.parent.overlay(e):this.parent.overlay(e,t,i)}build(){return this.parent.build()}svg(e){return this.parent.svg(e)}};var Ie={dx:2,dy:2,blur:4,color:"rgba(0,0,0,0.2)"};function Oe(r){return {dx:r.dx??Ie.dx,dy:r.dy??Ie.dy,blur:r.blur??Ie.blur,color:r.color??Ie.color}}function Pe(r){let e=r.color.replace(/[^a-zA-Z0-9]/g,"_");return `viz-shadow-${r.dx}-${r.dy}-${r.blur}-${e}`}function or(r){return r.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function ot(r,e){return `<filter id="${r}" x="-50%" y="-50%" width="200%" height="200%"><feDropShadow dx="${e.dx}" dy="${e.dy}" stdDeviation="${e.blur}" flood-color="${or(e.color)}" flood-opacity="1"/></filter>`}function ve(r){return `viz-sketch-${r}`}function lr(r,e){let t=(r^e*2654435761)>>>0|1;return t^=t<<13,t^=t>>>17,t^=t<<5,(t>>>0)/4294967296}function _e(r,e,t,i){return t+lr(r,e)*(i-t)}function lt(r,e){let t=e+37,i=_e(e,1,.009,.015).toFixed(4),l=_e(e,2,2.5,4).toFixed(1),a=_e(e,3,3,5).toFixed(1),d=_e(e,4,.3,1.6).toFixed(2),c=_e(e,5,.2,1.3).toFixed(2);return `<filter id="${r}" filterUnits="userSpaceOnUse" x="-10000" y="-10000" width="20000" height="20000"><feTurbulence type="fractalNoise" baseFrequency="0.008" numOctaves="2" seed="${e}" result="n1"/><feTurbulence type="fractalNoise" baseFrequency="${i}" numOctaves="2" seed="${t}" result="n2"/><feDisplacementMap in="SourceGraphic" in2="n1" scale="${l}" xChannelSelector="R" yChannelSelector="G" result="s1"/><feDisplacementMap in="SourceGraphic" in2="n2" scale="${a}" xChannelSelector="G" yChannelSelector="R" result="s2"/><feOffset in="s2" dx="${d}" dy="${c}" result="s2off"/><feComposite in="s1" in2="s2off" operator="over"/></filter>`}function Le(r,e){if(r?.sketchSeed!==void 0)return r.sketchSeed;let t=0;for(let i=0;i<e.length;i++)t=Math.imul(31,t)+e.charCodeAt(i)|0;return Math.abs(t)}function ar(r){return typeof r=="object"&&r!==null&&"then"in r&&typeof r.then=="function"}function dr(r){return r.replace(/[^a-zA-Z0-9]/g,"_")}function fe(r,e,t="end"){if(r==="none")return "";let i=`viz-${r}`,l=t==="start"?"-start":"";return e?`${i}${l}-${dr(e)}`:`${i}${l}`}function He(r,e){let t=r.from?e.get(r.from)??null:null,i=r.to?e.get(r.to)??null:null;return r.from&&!t||r.to&&!i||!t&&!r.fromAt&&!i&&!r.toAt?null:{start:t,end:i}}function me(r){return r.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}var ur={arrow:r=>`<polygon points="0,2 10,5 0,8" fill="${r}" />`,arrowOpen:r=>`<polyline points="0,2 10,5 0,8" fill="white" stroke="${r}" stroke-width="1.5" stroke-linejoin="miter" />`,diamond:r=>`<polygon points="0,5 5,2 10,5 5,8" fill="${r}" />`,diamondOpen:r=>`<polygon points="0,5 5,2 10,5 5,8" fill="white" stroke="${r}" stroke-width="1.5" />`,circle:r=>`<circle cx="5" cy="5" r="3" fill="${r}" />`,circleOpen:r=>`<circle cx="5" cy="5" r="3" fill="white" stroke="${r}" stroke-width="1.5" />`,square:r=>`<rect x="2" y="2" width="6" height="6" fill="${r}" />`,bar:r=>`<line x1="5" y1="1" x2="5" y2="9" stroke="${r}" stroke-width="2" stroke-linecap="round" />`,halfArrow:r=>`<polygon points="0,2 10,5 0,5" fill="${r}" />`};function We(r,e,t,i="end"){if(r==="none")return "";let l=ur[r];if(!l)return "";let a=me(e);return `<marker id="${t}" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="10" markerHeight="10" orient="${i==="start"?"auto-start-reverse":"auto"}">${l(a)}</marker>`}function Ee(r,e,t,i){let{x:l,y:a}=chunkOZAFCKI7_js.d(r),d=chunkTVRPABD2_js.j(r),c=i?.position??"center",n=i?.dx??0,u=i?.dy??0,g=0,f=0;switch(c){case "above":f=-d.h/2-t/2;break;case "below":f=d.h/2+t/2;break;case "left":g=-d.w/2-e/2;break;case "right":g=d.w/2+e/2;break;}return {x:l+g-e/2+n,y:a+f-t/2+u}}function at(r,e,t){let i=r.trim();return i.startsWith("<svg")?i.replace(/<svg\b([^>]*)>/,(l,a)=>`<svg${a.replace(/\swidth="[^"]*"/g,"").replace(/\sheight="[^"]*"/g,"")} width="${e}" height="${t}">`):r}function Nt(r,e,t){let i=r.trim();return i.startsWith("<svg")?at(i,e,t):`<svg width="${e}" height="${t}" viewBox="0 0 ${e} ${t}" xmlns="http://www.w3.org/2000/svg">${r}</svg>`}var Ae=new WeakMap,qe=new WeakMap;function cr(r,e){Object.entries(e).forEach(([t,i])=>{i===void 0?r.removeAttribute(t):r.setAttribute(t,String(i));});}function gr(r){return Object.entries(r).filter(([,e])=>e!==void 0).map(([e,t])=>` ${e}="${String(t)}"`).join("")}function Fe(r){return `viz-anim-${r}`}function Ke(r){return !r||typeof r!="object"?[]:Object.entries(r).filter(([,e])=>e!==void 0).map(([e,t])=>[`--viz-anim-${e}`,String(t)])}var Se=class{_tokens=[];text(e,t){return this._tokens.push({kind:"span",text:e,...t??{}}),this}bold(e,t){return this.text(e,{...t??{},bold:true})}italic(e,t){return this.text(e,{...t??{},italic:true})}code(e,t){return this.text(e,{...t??{},code:true})}color(e,t,i){return this.text(e,{...i??{},fill:t})}link(e,t,i){return this.text(e,{...i??{},href:t})}sup(e,t){return this.text(e,{...t??{},baselineShift:"super"})}sub(e,t){return this.text(e,{...t??{},baselineShift:"sub"})}newline(){return this._tokens.push({kind:"newline"}),this}build(){return {kind:"rich",tokens:[...this._tokens]}}},dt=class{_viewBox={w:800,h:600};_nodes=new Map;_edges=new Map;_overlays=[];_nodeOrder=[];_edgeOrder=[];_gridConfig=null;_sketch=null;_animationSpecs=[];_mountedContainer=null;_panZoomController;_tooltipController;_edgePathResolver=null;_changes={added:{nodes:[],edges:[]},removed:{nodes:[],edges:[]},updated:{nodes:[],edges:[]}};_changeListeners=[];_eventListeners={build:[],mount:[]};on(e,t){return this._eventListeners[e]||(this._eventListeners[e]=[]),this._eventListeners[e].push(t),()=>{this._eventListeners[e]=this._eventListeners[e].filter(i=>i!==t);}}_dispatchEvent(e,t){let i=this._eventListeners[e];i&&i.forEach(l=>l(t));}addNode(e){if(this._nodes.has(e.id)){console.warn(`VizBuilder.addNode: Node ${e.id} already exists`);return}this._nodes.set(e.id,{...e}),this._nodeOrder.push(e.id),this._changes.added.nodes.push(e.id);}removeNode(e){if(!this._nodes.has(e))return;this._nodes.delete(e),this._nodeOrder=this._nodeOrder.filter(i=>i!==e),this._changes.removed.nodes.push(e);let t=[];this._edges.forEach(i=>{(i.from===e||i.to===e)&&t.push(i.id);}),t.forEach(i=>this.removeEdge(i));}updateNode(e,t){let i=this._nodes.get(e);if(!i){console.warn(`VizBuilder.updateNode: Node ${e} not found`);return}let l={...i,...t};t.pos&&i.pos&&(l.pos={...i.pos,...t.pos}),t.style&&i.style&&(l.style={...i.style,...t.style}),t.shape&&i.shape&&(l.shape={...i.shape,...t.shape}),this._nodes.set(e,l),this._changes.added.nodes.includes(e)||this._changes.updated.nodes.includes(e)||this._changes.updated.nodes.push(e);}addEdge(e){if(this._edges.has(e.id)){console.warn(`VizBuilder.addEdge: Edge ${e.id} already exists`);return}this._edges.set(e.id,{...e}),this._edgeOrder.push(e.id),this._changes.added.edges.push(e.id);}removeEdge(e){this._edges.has(e)&&(this._edges.delete(e),this._edgeOrder=this._edgeOrder.filter(t=>t!==e),this._changes.removed.edges.push(e));}updateEdge(e,t){let i=this._edges.get(e);if(!i){console.warn(`VizBuilder.updateEdge: Edge ${e} not found`);return}this._edges.set(e,{...i,...t}),this._changes.added.edges.includes(e)||this._changes.updated.edges.includes(e)||this._changes.updated.edges.push(e);}onChange(e){return this._changeListeners.push(e),()=>{this._changeListeners=this._changeListeners.filter(t=>t!==e);}}commit(e){let t=this._changes;if(this._changeListeners.length>0){let d={added:{nodes:[...t.added.nodes],edges:[...t.added.edges]},removed:{nodes:[...t.removed.nodes],edges:[...t.removed.edges]},updated:{nodes:[...t.updated.nodes],edges:[...t.updated.edges]}};this._changeListeners.forEach(c=>c(d));}if(this._changes={added:{nodes:[],edges:[]},removed:{nodes:[],edges:[]},updated:{nodes:[],edges:[]}},!e)return;let i=e.querySelector("svg");if(!i){console.warn("VizBuilder.commit: No mounted SVG found in container. Need to call .mount() first.");return}let l=this.build();if(this._renderSceneToDOM(l,e),this._tooltipController){let d=new Map(l.nodes.map(n=>[n.id,n])),c=new Map(l.edges.map(n=>[n.id,n]));this._tooltipController.updateData(d,c),this._addTooltipA11y(i,l);}let a=Ce(i,{edgePathResolver:this._edgePathResolver});Ae.set(i,a),et(l,a);}use(e,t){return e(this,t),this}layout(e,t){let i=this.build(),l={nodes:i.nodes,edges:i.edges},a=e(l,t);if(ar(a))throw new Error("VizBuilder.layout: received a Promise from the layout algorithm. Use .layoutAsync() for async layout engines.");return this._applyLayoutResult(a),this}async layoutAsync(e,t){let i=this.build(),l={nodes:i.nodes,edges:i.edges},a=await e(l,t);return this._applyLayoutResult(a),this}_applyLayoutResult(e){for(let[t,i]of Object.entries(e.nodes))this.updateNode(t,{pos:i});if(e.edges)for(let[t,i]of Object.entries(e.edges))i.waypoints!==void 0&&this.updateEdge(t,{waypoints:i.waypoints});}setEdgePathResolver(e){this._edgePathResolver=e;let t=this._mountedContainer;if(t){let i=t.querySelector("svg");if(i){let l=Ae.get(i);l?l.edgePathResolver=e:Ae.set(i,Ce(i,{edgePathResolver:e}));}}return this}view(e,t){return this._viewBox={w:e,h:t},this}grid(e,t,i={x:20,y:20}){return this._gridConfig={cols:e,rows:t,padding:i},this}sketch(e=true,t){return this._sketch=e?{enabled:true,seed:t}:null,this}overlay(e,t,i){if(typeof e=="function"){let c=new ze;return e(c),this._overlays.push(...c.build()),this}let l=e,a=t,d=i;return this._overlays.push({id:l,params:a,key:d}),this}animate(e){let t=chunkRTJM66N2_js.d(e);return this._animationSpecs.push(t),t}node(e,t){this._nodes.has(e)||(this._nodes.set(e,{id:e,pos:{x:0,y:0},shape:{kind:"circle",r:10}}),this._nodeOrder.push(e));let i=new Me(this,this._nodes.get(e));return t?(zt(i,t),i.done(),this):i}edge(e,t,i){let l=i!==void 0&&typeof i!="string",a=l?i.id||`${e}->${t}`:i||`${e}->${t}`;this._edges.has(a)||(this._edges.set(a,{id:a,from:e,to:t}),this._edgeOrder.push(a));let d=new Ve(this,this._edges.get(a));return l?(st(d,i),this):d}danglingEdge(e,t){if(!this._edges.has(e)){let l={id:e};t?.fromAt&&(l.fromAt=t.fromAt),t?.toAt&&(l.toAt=t.toAt),this._edges.set(e,l),this._edgeOrder.push(e);}let i=new Ve(this,this._edges.get(e));return t?(st(i,t),this):i}fromScene(e){return e.viewBox&&this.view(e.viewBox.w,e.viewBox.h),e.grid&&this.grid(e.grid.cols,e.grid.rows,e.grid.padding),this._nodes.clear(),this._nodeOrder=[],this._edges.clear(),this._edgeOrder=[],this._overlays=[],this._animationSpecs=[],e.nodes&&e.nodes.forEach(t=>{this._nodes.set(t.id,{...t}),this._nodeOrder.push(t.id);}),e.edges&&e.edges.forEach(t=>{this._edges.set(t.id,{...t}),this._edgeOrder.push(t.id);}),e.overlays&&(this._overlays=[...e.overlays]),e.animationSpecs&&(this._animationSpecs=[...e.animationSpecs]),this._sketch=e.sketch?{...e.sketch,enabled:e.sketch.enabled??true}:null,this}build(){this._edges.forEach(l=>{l.from&&!this._nodes.has(l.from)&&console.warn(`VizBuilder: Edge ${l.id} references missing source node ${l.from}`),l.to&&!this._nodes.has(l.to)&&console.warn(`VizBuilder: Edge ${l.id} references missing target node ${l.to}`);});let e=this._nodeOrder.map(l=>this._nodes.get(l)),t=this._edgeOrder.map(l=>this._edges.get(l)),i={viewBox:this._viewBox,grid:this._gridConfig??void 0,nodes:e,edges:t,overlays:this._overlays,animationSpecs:this._animationSpecs.length>0?[...this._animationSpecs]:void 0,sketch:this._sketch??void 0};return this._dispatchEvent("build",{scene:i}),i}_getGridConfig(){return this._gridConfig}_getViewBox(){return this._viewBox}svg(e){let t=this.build();return this._renderSceneToSvg(t,e)}mount(e,t){let i=this.build();this._renderSceneToDOM(i,e),this._mountedContainer=e;let l=e.querySelector("svg");if(l&&t?.css&&this._injectCssIntoMountedSvg(l,t.css),l&&t?.autoplay&&this.play(e,i.animationSpecs??[]),l&&(i.nodes.some(c=>c.tooltip!=null)||i.edges.some(c=>c.tooltip!=null))){this._tooltipController&&this._tooltipController.destroy();let c=new Map(i.nodes.map(u=>[u.id,u])),n=new Map(i.edges.map(u=>[u.id,u]));this._tooltipController=chunkTVRPABD2_js.c(e,l,c,n),this._addTooltipA11y(l,i);}let a;if(l&&t?.panZoom){let d=l.querySelector(".viz-viewport");d&&(a=chunkTVRPABD2_js.a(l,d,i,t));}return this._panZoomController=a,this._dispatchEvent("mount",{container:e,controller:a}),a}destroy(){if(this._panZoomController&&(this._panZoomController.destroy(),this._panZoomController=void 0),this._tooltipController&&(this._tooltipController.destroy(),this._tooltipController=void 0),this._mountedContainer){let e=qe.get(this._mountedContainer);e&&(e.stop(),qe.delete(this._mountedContainer));let t=this._mountedContainer.querySelector("svg");t&&t.remove(),this._mountedContainer=null;}}_addTooltipA11y(e,t){let i=e.querySelectorAll('g[data-viz-role="node-group"]'),l=new Set(t.nodes.filter(c=>c.tooltip!=null).map(c=>c.id));i.forEach(c=>{let n=c.getAttribute("data-id");n&&l.has(n)&&!c.hasAttribute("tabindex")&&c.setAttribute("tabindex","0");});let a=e.querySelectorAll('g[data-viz-role="edge-group"]'),d=new Set(t.edges.filter(c=>c.tooltip!=null).map(c=>c.id));a.forEach(c=>{let n=c.getAttribute("data-id");n&&d.has(n)&&!c.hasAttribute("tabindex")&&c.setAttribute("tabindex","0");});}_injectCssIntoMountedSvg(e,t){let i=(Array.isArray(t)?t.join(`
|
|
115
115
|
`):t).trim();if(!i)return;let l="data-viz-user-css",a=e.querySelector(`style[${l}="true"]`);if(a){let n=a.textContent??"";if(n.includes(i))return;a.textContent=`${n}
|
|
116
|
-
${i}`.trim();return}let d=document.createElement("style");d.setAttribute(l,"true"),d.setAttribute("type","text/css"),d.textContent=i;let c=e.querySelector("style");c&&c.parentNode===e?e.insertBefore(d,c.nextSibling):e.prepend(d);}play(e,t){if(!e){let i=this._mountedContainer;return !i||!i.querySelector("svg")?(console.warn("VizBuilder: Call mount(container) before play()."),null):this._playImpl(i,void 0,false)}return this._playImpl(e,t,true)}_playImpl(e,t,i){if(!e.querySelector("svg")){if(!i)return null;this.mount(e);}let a=this.build(),d=Array.isArray(t)?t:t?[t]:a.animationSpecs??[];if(!t&&d.length===0)return null;let c=[];for(let g of d)c.push(...chunkRTJM66N2_js.b(g));qe.get(e)?.stop();let n={version:"viz-anim/1",tweens:d.flatMap(g=>g.tweens)},u=chunkRTJM66N2_js.f({builder:this,container:e,extendAdapter:c.length>0?g=>{for(let f of c)f(g);}:void 0});return u.load(n),n.tweens.length>0&&u.play(),qe.set(e,u),u}resizeNode(e,t){let i=this._nodes.get(e);return i?(i.runtime=i.runtime||{},t.w!==void 0&&(i.runtime.width=t.w),t.h!==void 0&&(i.runtime.height=t.h),t.r!==void 0&&(i.runtime.radius=t.r),this):this}patchRuntime(e){let t=this.build(),i=e.querySelector("svg");if(!i){this._renderSceneToDOM(t,e);return}let l=Ae.get(i);l||(l=Ce(i,{edgePathResolver:this._edgePathResolver}),Ae.set(i,l)),et(t,l);let a=i.querySelector('[data-viz-layer="overlays"]')||i.querySelector(".viz-layer-overlays");if(a){let d=t.overlays??[],c=new Map(t.nodes.map(v=>[v.id,v])),n=new Map(t.edges.map(v=>[v.id,v])),u="http://www.w3.org/2000/svg",g=Array.from(a.children).filter(v=>v.tagName==="g"),f=new Map;g.forEach(v=>{let w=v.getAttribute("data-overlay-id");w&&f.set(w,v);});let p=d.length===f.size,h=!p,m=[];if(!h)for(let v of d){let w=v.key||v.id;if(!f.has(w)){h=true;break}v[chunkRTJM66N2_js.a]&&m.push(v);}if(!h&&m.length===0)return;let z=new Set;(h?d:m).forEach(v=>{let w=ye.get(v.id);if(!w)return;let _=v.key||v.id;z.add(_);let B=f.get(_);B||(B=document.createElementNS(u,"g"),B.setAttribute("data-overlay-id",_),B.setAttribute("data-viz-role","overlay-group"),a.appendChild(B));let s=`viz-overlay-${v.id}${v.className?` ${v.className}`:""}`;B.getAttribute("class")!==s&&B.setAttribute("class",s);let S={spec:v,nodesById:c,edgesById:n,scene:t,registry:ye};w.update?w.update(S,B):B.innerHTML=w.render(S),delete v[chunkRTJM66N2_js.a];}),p||g.forEach(v=>{let w=v.getAttribute("data-overlay-id");w&&!z.has(w)&&v.remove();});}}_renderSceneToDOM(e,t){let{viewBox:i,nodes:l,edges:a,overlays:d}=e,c=new Map(l.map(o=>[o.id,o])),n="http://www.w3.org/2000/svg",u=t.querySelector("svg");if(!u){t.innerHTML="",u=document.createElementNS(n,"svg"),u.style.width="100%",u.style.height="100%",u.style.overflow="visible";let o=document.createElement("style");o.textContent=Ze,u.appendChild(o);let N=document.createElementNS(n,"defs"),E=new Set,F=new Map;a.forEach(y=>{let C=y.style?.stroke;if(y.markerEnd&&y.markerEnd!=="none"){let b=fe(y.markerEnd,C,"end");E.has(b)||(E.add(b),F.set(b,We(y.markerEnd,C??"currentColor",b,"end")));}if(y.markerStart&&y.markerStart!=="none"){let b=fe(y.markerStart,C,"start");E.has(b)||(E.add(b),F.set(b,We(y.markerStart,C??"currentColor",b,"start")));}}),E.forEach(y=>{let C=document.createElementNS(n,"marker");C.setAttribute("id",y),C.setAttribute("viewBox","0 0 10 10"),C.setAttribute("markerWidth","10"),C.setAttribute("markerHeight","10"),C.setAttribute("refX","9"),C.setAttribute("refY","5");let b=y.includes("-start");C.setAttribute("orient",b?"auto-start-reverse":"auto");let O=document.createElementNS(n,"svg");O.innerHTML=F.get(y)??"";let A=O.querySelector("marker");if(A)for(;A.firstChild;)C.appendChild(A.firstChild);N.appendChild(C);});let L=new Map;l.forEach(y=>{if(y.style?.shadow){let C=Oe(y.style.shadow),b=Pe(C);L.has(b)||L.set(b,C);}}),L.forEach((y,C)=>{let b=document.createElementNS(n,"svg");b.innerHTML=ot(C,y);let O=b.querySelector("filter");O&&N.appendChild(O);});let Y=new Set,j=e.sketch?.enabled;l.forEach(y=>{(y.style?.sketch||j)&&Y.add(Le(y.style,y.id));}),a.forEach(y=>{if(y.style?.sketch||j){let C=0;for(let b=0;b<y.id.length;b++)C=Math.imul(31,C)+y.id.charCodeAt(b)|0;Y.add(Math.abs(C));}}),Y.forEach(y=>{let C=ve(y),b=document.createElementNS(n,"svg");b.innerHTML=lt(C,y);let O=b.querySelector("filter");O&&N.appendChild(O);}),u.appendChild(N);let q=document.createElementNS(n,"g");q.setAttribute("class","viz-viewport"),u.appendChild(q);let P=document.createElementNS(n,"g");P.setAttribute("class","viz-layer-edges"),P.setAttribute("data-viz-layer","edges"),q.appendChild(P);let ie=document.createElementNS(n,"g");ie.setAttribute("class","viz-layer-nodes"),ie.setAttribute("data-viz-layer","nodes"),q.appendChild(ie);let J=document.createElementNS(n,"g");J.setAttribute("class","viz-layer-overlays"),J.setAttribute("data-viz-layer","overlays"),q.appendChild(J),t.appendChild(u);}u.setAttribute("viewBox",`0 0 ${i.w} ${i.h}`);let g=u.querySelector('[data-viz-layer="edges"]')||u.querySelector(".viz-layer-edges"),f=u.querySelector('[data-viz-layer="nodes"]')||u.querySelector(".viz-layer-nodes"),p=u.querySelector('[data-viz-layer="overlays"]')||u.querySelector(".viz-layer-overlays");if(!g||!f||!p){this._renderSceneToDOM(e,t);return}let h=Array.from(g.children).filter(o=>o.tagName==="g"),m=new Map;h.forEach(o=>{let N=o.getAttribute("data-id");N&&m.set(N,o);});let z=new Set;a.forEach(o=>{let N=He(o,c);if(!N)return;let{start:E,end:F}=N;z.add(o.id);let L=m.get(o.id);if(!L){L=document.createElementNS(n,"g"),L.setAttribute("data-id",o.id),L.setAttribute("data-viz-role","edge-group"),g.appendChild(L);let y=document.createElementNS(n,"path");y.setAttribute("class","viz-edge"),y.setAttribute("data-viz-role","edge-line"),L.appendChild(y);}let Y=`viz-edge-group ${o.className||""}`,j=o.style?.sketch||e.sketch?.enabled;j&&(Y+=" viz-sketch"),L.removeAttribute("style"),o.animations&&o.animations.forEach(y=>{if(y.when===false)return;let C=ke.getEdgeRenderer(y.id);if(C){if(C.getClass&&(Y+=` ${C.getClass({spec:y,element:o})}`),C.getStyle){let b=C.getStyle({spec:y,element:o});Object.entries(b).forEach(([O,A])=>{L.style.setProperty(O,String(A));});}}else Y+=` ${Fe(y.id)}`,Ke(y.params).forEach(([b,O])=>{L.style.setProperty(b,O);});}),L.setAttribute("class",Y);let q;if(E&&F&&E===F)q=chunkXOBMAQC3_js.g(E,o);else {let y=chunkXOBMAQC3_js.e(E,F,o);q=chunkXOBMAQC3_js.f(y.start,y.end,o.routing,o.waypoints);}if(this._edgePathResolver){let y=C=>{let b=He(C,c);if(!b)return "";if(b.start&&b.end&&b.start===b.end)return chunkXOBMAQC3_js.g(b.start,C).d;let O=chunkXOBMAQC3_js.e(b.start,b.end,C);return chunkXOBMAQC3_js.f(O.start,O.end,C.routing,C.waypoints).d};try{let C=this._edgePathResolver(o,e,y);typeof C=="string"&&C&&(q.d=C);}catch(C){console.warn(`VizBuilder: edge path resolver threw for edge ${o.id}`,C);}}o.runtime?.opacity!==void 0?L.style.opacity=String(o.runtime.opacity):L.style.removeProperty("opacity");let P=L.querySelector('[data-viz-role="edge-line"]')||L.querySelector(".viz-edge");if(!P)return;if(o.runtime?.strokeDashoffset!==void 0?(P.style.strokeDashoffset=String(o.runtime.strokeDashoffset),P.setAttribute("stroke-dashoffset",String(o.runtime.strokeDashoffset))):(P.style.removeProperty("stroke-dashoffset"),P.removeAttribute("stroke-dashoffset")),P.setAttribute("d",q.d),o.markerEnd&&o.markerEnd!=="none"){let y=fe(o.markerEnd,o.style?.stroke,"end");P.setAttribute("marker-end",`url(#${y})`);}else P.removeAttribute("marker-end");if(o.markerStart&&o.markerStart!=="none"){let y=fe(o.markerStart,o.style?.stroke,"start");P.setAttribute("marker-start",`url(#${y})`);}else P.removeAttribute("marker-start");if(o.style?.stroke!==void 0?P.style.stroke=o.style.stroke:P.style.removeProperty("stroke"),o.style?.strokeWidth!==void 0?P.style.strokeWidth=String(o.style.strokeWidth):P.style.removeProperty("stroke-width"),o.style?.fill!==void 0?P.style.fill=o.style.fill:P.style.removeProperty("fill"),o.style?.opacity!==void 0?P.style.opacity=String(o.style.opacity):P.style.removeProperty("opacity"),o.style?.strokeDasharray!==void 0?P.style.strokeDasharray=be(o.style.strokeDasharray):P.style.removeProperty("stroke-dasharray"),j){let y=0;for(let b=0;b<o.id.length;b++)y=Math.imul(31,y)+o.id.charCodeAt(b)|0;let C=Math.abs(y);P.setAttribute("filter",`url(#${ve(C)})`);}else P.removeAttribute("filter");let ie=L.querySelector('[data-viz-role="edge-hit"]')||L.querySelector(".viz-edge-hit");if(ie&&ie.remove(),o.hitArea||o.onClick){let y=document.createElementNS(n,"path");y.setAttribute("class","viz-edge-hit"),y.setAttribute("data-viz-role","edge-hit"),y.setAttribute("d",q.d),y.setAttribute("stroke","transparent"),y.setAttribute("stroke-width",String(o.hitArea||10)),y.style.cursor=o.onClick?"pointer":"",o.onClick&&y.addEventListener("click",C=>{C.stopPropagation(),o.onClick(o.id,o);}),L.appendChild(y);}L.querySelectorAll('[data-viz-role="edge-label"],.viz-edge-label').forEach(y=>y.remove()),Be(o).forEach((y,C)=>{let b=we(y,q),O=`viz-edge-label ${y.className||""}`,A=ge(b.x,b.y,y.rich??y.text,{className:O,fill:y.fill,fontSize:y.fontSize,fontWeight:y.fontWeight,fontFamily:y.fontFamily,textAnchor:"middle",dominantBaseline:"middle",maxWidth:y.maxWidth,lineHeight:y.lineHeight,verticalAlign:y.verticalAlign,overflow:y.overflow}).replace("<text ",`<text data-viz-role="edge-label" data-label-index="${C}" data-label-position="${y.position}" `);L.insertAdjacentHTML("beforeend",A);});}),h.forEach(o=>{let N=o.getAttribute("data-id");N&&!z.has(N)&&o.remove();});let $=new Map,v=[];l.forEach(o=>{if(o.parentId){let N=$.get(o.parentId);N||(N=[],$.set(o.parentId,N)),N.push(o);}else v.push(o);}),v.sort((o,N)=>(o.zIndex||0)-(N.zIndex||0)),$.forEach(o=>o.sort((N,E)=>(N.zIndex||0)-(E.zIndex||0)));let w=Array.from(f.querySelectorAll('g[data-viz-role="node-group"]')),_=new Map;w.forEach(o=>{let N=o.getAttribute("data-id");N&&_.set(N,o);});let B=new Set,s=(o,N)=>{B.add(o.id);let E=_.get(o.id);E||(E=document.createElementNS(n,"g"),E.setAttribute("data-id",o.id),E.setAttribute("data-viz-role","node-group")),N.appendChild(E);let F=!!o.container,L=`viz-node-group${F?" viz-container":""} ${o.className||""}`,Y=o.style?.sketch||e.sketch?.enabled;Y&&(L+=" viz-sketch"),E.removeAttribute("style"),o.animations&&o.animations.forEach(k=>{if(k.when===false)return;let V=ke.getNodeRenderer(k.id);if(V){if(V.getClass&&(L+=` ${V.getClass({spec:k,element:o})}`),V.getStyle){let U=V.getStyle({spec:k,element:o});Object.entries(U).forEach(([H,te])=>{E.style.setProperty(H,String(te));});}}else L+=` ${Fe(k.id)}`,Ke(k.params).forEach(([U,H])=>{E.style.setProperty(U,H);});}),E.setAttribute("class",L),E._clickHandler=o.onClick?k=>{k.stopPropagation(),o.onClick(o.id,o);}:null,E.hasAttribute("data-click-initialized")||(E.addEventListener("click",k=>{E._clickHandler&&E._clickHandler(k);}),E.setAttribute("data-click-initialized","true")),E.style.cursor=o.onClick?"pointer":"";let{x:j,y:q}=chunkOZAFCKI7_js.d(o),P=E.querySelector('[data-viz-role="node-shape"]')||E.querySelector(".viz-node-shape"),J=chunkOZAFCKI7_js.f(o.shape).tagName;(!P||P.tagName!==J)&&(P&&P.remove(),P=document.createElementNS(n,J),P.setAttribute("class","viz-node-shape"),P.setAttribute("data-viz-role","node-shape"),E.prepend(P)),chunkOZAFCKI7_js.g(P,o.shape,{x:j,y:q});let y=be(o.style?.strokeDasharray),C=o.style?.shadow?`url(#${Pe(Oe(o.style.shadow))})`:void 0;if(cr(P,{fill:o.style?.fill??"none",stroke:o.style?.stroke??"#111","stroke-width":o.style?.strokeWidth??2,opacity:o.runtime?.opacity??o.style?.opacity,"stroke-dasharray":y||void 0,filter:C}),Y){let k=Le(o.style,o.id);E.setAttribute("filter",`url(#${ve(k)})`);}else E.removeAttribute("filter");let b=E.querySelector(':scope > [data-viz-role="node-image"], :scope > .viz-node-image');b&&b.remove();let O=E.querySelector(':scope > [data-viz-role="node-icon"], :scope > .viz-node-icon');O&&O.remove();let A=E.querySelector(':scope > [data-viz-role="node-svg"], :scope > .viz-node-svg');A&&A.remove();let T=P,W=k=>{E.insertBefore(k,T.nextSibling),T=k;};if(o.image){let k=Ee(o,o.image.width,o.image.height,{position:o.image.position,dx:o.image.dx,dy:o.image.dy}),V=document.createElementNS(n,"image");V.setAttribute("class","viz-node-image"),V.setAttribute("data-viz-role","node-image"),V.setAttribute("x",String(k.x)),V.setAttribute("y",String(k.y)),V.setAttribute("width",String(o.image.width)),V.setAttribute("height",String(o.image.height)),V.setAttribute("href",o.image.href),o.image.preserveAspectRatio&&V.setAttribute("preserveAspectRatio",o.image.preserveAspectRatio),W(V);}if(o.icon){let k=chunkOZAFCKI7_js.b.get(o.icon.id);if(!k)console.warn(`VizCraft: icon '${o.icon.id}' not found. Use registerIcon().`);else {let V=Ee(o,o.icon.size,o.icon.size,{position:o.icon.position,dx:o.icon.dx,dy:o.icon.dy}),U=document.createElementNS(n,"g");U.setAttribute("class","viz-node-icon"),U.setAttribute("data-viz-role","node-icon"),U.setAttribute("transform",`translate(${V.x} ${V.y})`),o.icon.color&&U.setAttribute("style",`color:${o.icon.color}`),U.innerHTML=at(k,o.icon.size,o.icon.size),W(U);}}if(o.svgContent){let k=Ee(o,o.svgContent.width,o.svgContent.height,{position:o.svgContent.position,dx:o.svgContent.dx,dy:o.svgContent.dy}),V=document.createElementNS(n,"g");V.setAttribute("class","viz-node-svg"),V.setAttribute("data-viz-role","node-svg"),V.setAttribute("transform",`translate(${k.x} ${k.y})`),V.innerHTML=Nt(o.svgContent.content,o.svgContent.width,o.svgContent.height),W(V);}if(F&&o.container.headerHeight&&"w"in o.shape&&"h"in o.shape){let k=o.shape.w,V=o.shape.h,U=q-V/2+o.container.headerHeight,H=E.querySelector('[data-viz-role="container-header"]');H||(H=document.createElementNS(n,"line"),H.setAttribute("class","viz-container-header"),H.setAttribute("data-viz-role","container-header"),E.appendChild(H)),H.setAttribute("x1",String(j-k/2)),H.setAttribute("y1",String(U)),H.setAttribute("x2",String(j+k/2)),H.setAttribute("y2",String(U)),H.setAttribute("stroke",o.style?.stroke??"#111"),H.setAttribute("stroke-width",String(o.style?.strokeWidth??2));}else {let k=E.querySelector('[data-viz-role="container-header"]');k&&k.remove();}let K=o.compartments&&o.compartments.length>0;if(E.querySelectorAll('[data-viz-role="compartment-divider"],[data-viz-role="compartment-label"],[data-viz-role="compartment-entry"]').forEach(k=>k.remove()),K&&"w"in o.shape){let k=o.shape.w,V=o.shape.h,U=q-V/2,H=8;for(let te=0;te<o.compartments.length;te++){let I=o.compartments[te];if(te>0){let R=U+I.y,Z=document.createElementNS(n,"line");Z.setAttribute("class","viz-compartment-divider"),Z.setAttribute("data-viz-role","compartment-divider"),Z.setAttribute("data-compartment",I.id),Z.setAttribute("x1",String(j-k/2)),Z.setAttribute("y1",String(R)),Z.setAttribute("x2",String(j+k/2)),Z.setAttribute("y2",String(R)),Z.setAttribute("stroke",o.style?.stroke??"#111"),Z.setAttribute("stroke-width",String(o.style?.strokeWidth??2)),E.appendChild(Z);}if(I.entries&&I.entries.length>0)for(let R of I.entries){let Z=j-k/2+H+(R.label?.dx||0),se=R.paddingTop??0,oe=R.paddingBottom??0,pe=R.height-se-oe,le=U+I.y+R.y+se+pe/2+(R.label?.dy||0),ce=`viz-compartment-entry ${R.className||""} ${R.label?.className||""}`.trim(),Ct=ge(Z,le,R.label?.rich??R.text,{className:ce,fill:R.label?.fill,fontSize:R.label?.fontSize,fontWeight:R.label?.fontWeight,fontFamily:R.label?.fontFamily,textAnchor:R.label?.textAnchor||"start",dominantBaseline:R.label?.dominantBaseline||"middle",maxWidth:R.label?.maxWidth??k-H*2,lineHeight:R.label?.lineHeight,verticalAlign:R.label?.verticalAlign,overflow:R.label?.overflow}).replace("<text ",`<text data-viz-role="compartment-entry" data-compartment="${I.id}" data-entry="${R.id}" `);E.insertAdjacentHTML("beforeend",Ct);}else if(I.label){let R=j-k/2+H+(I.label.dx||0),Z=U+I.y+I.height/2+(I.label.dy||0),se=`viz-compartment-label ${I.label.className||""}`,oe=ge(R,Z,I.label.rich??I.label.text,{className:se,fill:I.label.fill,fontSize:I.label.fontSize,fontWeight:I.label.fontWeight,fontFamily:I.label.fontFamily,textAnchor:I.label.textAnchor||"start",dominantBaseline:I.label.dominantBaseline||"middle",maxWidth:I.label.maxWidth??k-H*2,lineHeight:I.label.lineHeight,verticalAlign:I.label.verticalAlign,overflow:I.label.overflow}).replace("<text ",`<text data-viz-role="compartment-label" data-compartment="${I.id}" `);E.insertAdjacentHTML("beforeend",oe);}}for(let te of o.compartments)if(te.entries)for(let I of te.entries){if(!I.onClick)continue;let R=E.querySelector(`[data-viz-role="compartment-entry"][data-compartment="${te.id}"][data-entry="${I.id}"]`);R&&(R.addEventListener("click",Z=>{Z.stopPropagation(),I.onClick();}),R.style.cursor="pointer");}}let Q=j+(o.label?.dx||0),M=q+(o.label?.dy||0),D=!!o.label&&!K;if(o.label&&F&&o.container.headerHeight&&"h"in o.shape&&!o.label.dy){let k=o.shape.h;M=q-k/2+o.container.headerHeight/2,Q=j+(o.label.dx||0);}let ee=E.querySelector('[data-viz-role="node-label"]')||E.querySelector(".viz-node-label");if(ee&&(ee.remove(),ee=null),o.label&&D){let k=`viz-node-label ${o.label.className||""}`,V=ge(Q,M,o.label.rich??o.label.text,{className:k,fill:o.label.fill,fontSize:o.label.fontSize,fontWeight:o.label.fontWeight,fontFamily:o.label.fontFamily,textAnchor:o.label.textAnchor||"middle",dominantBaseline:o.label.dominantBaseline||"middle",maxWidth:o.label.maxWidth,lineHeight:o.label.lineHeight,verticalAlign:o.label.verticalAlign,overflow:o.label.overflow}).replace("<text ",'<text data-viz-role="node-label" ');E.insertAdjacentHTML("beforeend",V),ee=E.querySelector('[data-viz-role="node-label"]');}if(E.querySelectorAll('[data-viz-role="badge"]').forEach(k=>k.remove()),o.badges&&o.badges.length>0){let k=chunkOZAFCKI7_js.o(o.shape),V=k.width/2,U=k.height/2;for(let H of o.badges){let te=H.fontSize??10,I=3,R=te+I*2,Z=Math.max(te*H.text.length*.7+I*2,R),se,oe;H.position==="top-left"?(se=j-V-Z/4,oe=q-U-R/4):H.position==="top-right"?(se=j+V-Z*3/4,oe=q-U-R/4):H.position==="bottom-left"?(se=j-V-Z/4,oe=q+U-R*3/4):(se=j+V-Z*3/4,oe=q+U-R*3/4);let pe=document.createElementNS(n,"g");if(pe.setAttribute("class","viz-badge"),pe.setAttribute("data-viz-role","badge"),H.background){let ce=document.createElementNS(n,"rect");ce.setAttribute("x",String(se)),ce.setAttribute("y",String(oe)),ce.setAttribute("width",String(Z)),ce.setAttribute("height",String(R)),ce.setAttribute("rx",String(R/2)),ce.setAttribute("fill",H.background),pe.appendChild(ce);}let le=document.createElementNS(n,"text");le.setAttribute("x",String(se+Z/2)),le.setAttribute("y",String(oe+R/2)),le.setAttribute("text-anchor","middle"),le.setAttribute("dominant-baseline","central"),le.setAttribute("font-size",String(te)),H.fill&&le.setAttribute("fill",H.fill),le.textContent=H.text,pe.appendChild(le),E.appendChild(pe);}}E.querySelectorAll('[data-viz-role="port"]').forEach(k=>k.remove()),o.ports&&o.ports.length>0&&o.ports.forEach(k=>{let V=document.createElementNS(n,"circle");V.setAttribute("cx",String(j+k.offset.x)),V.setAttribute("cy",String(q+k.offset.y)),V.setAttribute("r","4"),V.setAttribute("class","viz-port"),V.setAttribute("data-viz-role","port"),V.setAttribute("data-node",o.id),V.setAttribute("data-port",k.id),E.appendChild(V);});let he=$.get(o.id);if(he&&he.length>0){let k=E.querySelector(':scope > [data-viz-role="container-children"]');k||(k=document.createElementNS(n,"g"),k.setAttribute("class","viz-container-children"),k.setAttribute("data-viz-role","container-children"),E.appendChild(k)),he.forEach(V=>s(V,k));}else {let k=E.querySelector(':scope > [data-viz-role="container-children"]');k&&k.remove();}};v.forEach(o=>s(o,f)),w.forEach(o=>{let N=o.getAttribute("data-id");N&&!B.has(N)&&o.remove();});let x=Array.from(p.children).filter(o=>o.tagName==="g"),S=new Map;x.forEach(o=>{let N=o.getAttribute("data-overlay-id");N&&S.set(N,o);});let G=new Set;d&&d.length>0&&d.forEach(o=>{let N=ye.get(o.id);if(N){let E=o.key||o.id;G.add(E);let F=S.get(E);F||(F=document.createElementNS(n,"g"),F.setAttribute("data-overlay-id",E),F.setAttribute("data-viz-role","overlay-group"),p.appendChild(F)),F.setAttribute("class",`viz-overlay-${o.id}${o.className?` ${o.className}`:""}`);let L={spec:o,nodesById:c,edgesById:new Map(a.map(Y=>[Y.id,Y])),scene:e,registry:ye};N.update?N.update(L,F):F.innerHTML=N.render(L);}}),x.forEach(o=>{let N=o.getAttribute("data-overlay-id");N&&!G.has(N)&&o.remove();}),Ae.set(u,Ce(u,{edgePathResolver:this._edgePathResolver}));}_renderSceneToSvg(e,t){let i=t?.includeRuntime===true,{viewBox:l,nodes:a,edges:d,overlays:c}=e,n=new Map;if(i)for(let s of a){if(!s.container)continue;let x=(s.runtime?.x??s.pos.x)-s.pos.x,S=(s.runtime?.y??s.pos.y)-s.pos.y;(x!==0||S!==0)&&n.set(s.id,{dx:x,dy:S});}let u=a.map(s=>{if(!i)return {...s,runtime:void 0};let x=s.runtime?{...s.runtime}:{},S=x.x??s.pos.x,G=x.y??s.pos.y;if(s.parentId){let E=n.get(s.parentId);E&&(S+=E.dx,G+=E.dy);}(x.x!==void 0||x.y!==void 0||S!==s.pos.x||G!==s.pos.y)&&(x.x=S,x.y=G);let N=Object.keys(x).length>0?x:void 0;return {...s,runtime:N}}),g=d.map(s=>i?s:{...s,runtime:void 0}),f={...e,nodes:u,edges:g},p=new Map(u.map(s=>[s.id,s])),h=new Map(g.map(s=>[s.id,s])),m=`<svg viewBox="0 0 ${l.w} ${l.h}" xmlns="http://www.w3.org/2000/svg">`;m+=`<style>${Ze}</style>`,m+=`
|
|
116
|
+
${i}`.trim();return}let d=document.createElement("style");d.setAttribute(l,"true"),d.setAttribute("type","text/css"),d.textContent=i;let c=e.querySelector("style");c&&c.parentNode===e?e.insertBefore(d,c.nextSibling):e.prepend(d);}play(e,t){if(!e){let i=this._mountedContainer;return !i||!i.querySelector("svg")?(console.warn("VizBuilder: Call mount(container) before play()."),null):this._playImpl(i,void 0,false)}return this._playImpl(e,t,true)}_playImpl(e,t,i){if(!e.querySelector("svg")){if(!i)return null;this.mount(e);}let a=this.build(),d=Array.isArray(t)?t:t?[t]:a.animationSpecs??[];if(!t&&d.length===0)return null;let c=[];for(let g of d)c.push(...chunkRTJM66N2_js.b(g));qe.get(e)?.stop();let n={version:"viz-anim/1",tweens:d.flatMap(g=>g.tweens)},u=chunkRTJM66N2_js.f({builder:this,container:e,extendAdapter:c.length>0?g=>{for(let f of c)f(g);}:void 0});return u.load(n),n.tweens.length>0&&u.play(),qe.set(e,u),u}resizeNode(e,t){let i=this._nodes.get(e);return i?(i.runtime=i.runtime||{},t.w!==void 0&&(i.runtime.width=t.w),t.h!==void 0&&(i.runtime.height=t.h),t.r!==void 0&&(i.runtime.radius=t.r),this):this}patchRuntime(e){let t=this.build(),i=e.querySelector("svg");if(!i){this._renderSceneToDOM(t,e);return}let l=Ae.get(i);l||(l=Ce(i,{edgePathResolver:this._edgePathResolver}),Ae.set(i,l)),et(t,l);let a=i.querySelector('[data-viz-layer="overlays"]')||i.querySelector(".viz-layer-overlays");if(a){let d=t.overlays??[],c=new Map(t.nodes.map(v=>[v.id,v])),n=new Map(t.edges.map(v=>[v.id,v])),u="http://www.w3.org/2000/svg",g=Array.from(a.children).filter(v=>v.tagName==="g"),f=new Map;g.forEach(v=>{let w=v.getAttribute("data-overlay-id");w&&f.set(w,v);});let p=d.length===f.size,h=!p,m=[];if(!h)for(let v of d){let w=v.key||v.id;if(!f.has(w)){h=true;break}v[chunkRTJM66N2_js.a]&&m.push(v);}if(!h&&m.length===0)return;let z=new Set;(h?d:m).forEach(v=>{let w=ye.get(v.id);if(!w)return;let _=v.key||v.id;z.add(_);let B=f.get(_);B||(B=document.createElementNS(u,"g"),B.setAttribute("data-overlay-id",_),B.setAttribute("data-viz-role","overlay-group"),a.appendChild(B));let s=`viz-overlay-${v.id}${v.className?` ${v.className}`:""}`;B.getAttribute("class")!==s&&B.setAttribute("class",s);let S={spec:v,nodesById:c,edgesById:n,scene:t,registry:ye};w.update?w.update(S,B):B.innerHTML=w.render(S),delete v[chunkRTJM66N2_js.a];}),p||g.forEach(v=>{let w=v.getAttribute("data-overlay-id");w&&!z.has(w)&&v.remove();});}}_renderSceneToDOM(e,t){let{viewBox:i,nodes:l,edges:a,overlays:d}=e,c=new Map(l.map(o=>[o.id,o])),n="http://www.w3.org/2000/svg",u=t.querySelector("svg");if(!u){t.innerHTML="",u=document.createElementNS(n,"svg"),u.style.width="100%",u.style.height="100%",u.style.overflow="visible";let o=document.createElement("style");o.textContent=Ze,u.appendChild(o);let N=document.createElementNS(n,"defs"),E=new Set,F=new Map;a.forEach(y=>{let C=y.style?.stroke;if(y.markerEnd&&y.markerEnd!=="none"){let b=fe(y.markerEnd,C,"end");E.has(b)||(E.add(b),F.set(b,We(y.markerEnd,C??"currentColor",b,"end")));}if(y.markerStart&&y.markerStart!=="none"){let b=fe(y.markerStart,C,"start");E.has(b)||(E.add(b),F.set(b,We(y.markerStart,C??"currentColor",b,"start")));}}),E.forEach(y=>{let C=document.createElementNS(n,"marker");C.setAttribute("id",y),C.setAttribute("viewBox","0 0 10 10"),C.setAttribute("markerWidth","10"),C.setAttribute("markerHeight","10"),C.setAttribute("refX","9"),C.setAttribute("refY","5");let b=y.includes("-start");C.setAttribute("orient",b?"auto-start-reverse":"auto");let O=document.createElementNS(n,"svg");O.innerHTML=F.get(y)??"";let A=O.querySelector("marker");if(A)for(;A.firstChild;)C.appendChild(A.firstChild);N.appendChild(C);});let L=new Map;l.forEach(y=>{if(y.style?.shadow){let C=Oe(y.style.shadow),b=Pe(C);L.has(b)||L.set(b,C);}}),L.forEach((y,C)=>{let b=document.createElementNS(n,"svg");b.innerHTML=ot(C,y);let O=b.querySelector("filter");O&&N.appendChild(O);});let Y=new Set,j=e.sketch?.enabled;l.forEach(y=>{(y.style?.sketch||j)&&Y.add(Le(y.style,y.id));}),a.forEach(y=>{if(y.style?.sketch||j){let C=0;for(let b=0;b<y.id.length;b++)C=Math.imul(31,C)+y.id.charCodeAt(b)|0;Y.add(Math.abs(C));}}),Y.forEach(y=>{let C=ve(y),b=document.createElementNS(n,"svg");b.innerHTML=lt(C,y);let O=b.querySelector("filter");O&&N.appendChild(O);}),u.appendChild(N);let q=document.createElementNS(n,"g");q.setAttribute("class","viz-viewport"),u.appendChild(q);let P=document.createElementNS(n,"g");P.setAttribute("class","viz-layer-edges"),P.setAttribute("data-viz-layer","edges"),q.appendChild(P);let ie=document.createElementNS(n,"g");ie.setAttribute("class","viz-layer-nodes"),ie.setAttribute("data-viz-layer","nodes"),q.appendChild(ie);let J=document.createElementNS(n,"g");J.setAttribute("class","viz-layer-overlays"),J.setAttribute("data-viz-layer","overlays"),q.appendChild(J),t.appendChild(u);}u.setAttribute("viewBox",`0 0 ${i.w} ${i.h}`);let g=u.querySelector('[data-viz-layer="edges"]')||u.querySelector(".viz-layer-edges"),f=u.querySelector('[data-viz-layer="nodes"]')||u.querySelector(".viz-layer-nodes"),p=u.querySelector('[data-viz-layer="overlays"]')||u.querySelector(".viz-layer-overlays");if(!g||!f||!p){this._renderSceneToDOM(e,t);return}let h=Array.from(g.children).filter(o=>o.tagName==="g"),m=new Map;h.forEach(o=>{let N=o.getAttribute("data-id");N&&m.set(N,o);});let z=new Set;a.forEach(o=>{let N=He(o,c);if(!N)return;let{start:E,end:F}=N;z.add(o.id);let L=m.get(o.id);if(!L){L=document.createElementNS(n,"g"),L.setAttribute("data-id",o.id),L.setAttribute("data-viz-role","edge-group"),g.appendChild(L);let y=document.createElementNS(n,"path");y.setAttribute("class","viz-edge"),y.setAttribute("data-viz-role","edge-line"),L.appendChild(y);}let Y=`viz-edge-group ${o.className||""}`,j=o.style?.sketch||e.sketch?.enabled;j&&(Y+=" viz-sketch"),L.removeAttribute("style"),o.animations&&o.animations.forEach(y=>{if(y.when===false)return;let C=ke.getEdgeRenderer(y.id);if(C){if(C.getClass&&(Y+=` ${C.getClass({spec:y,element:o})}`),C.getStyle){let b=C.getStyle({spec:y,element:o});Object.entries(b).forEach(([O,A])=>{L.style.setProperty(O,String(A));});}}else Y+=` ${Fe(y.id)}`,Ke(y.params).forEach(([b,O])=>{L.style.setProperty(b,O);});}),L.setAttribute("class",Y);let q;if(E&&F&&E===F)q=chunkTVRPABD2_js.g(E,o);else {let y=chunkTVRPABD2_js.e(E,F,o);q=chunkTVRPABD2_js.f(y.start,y.end,o.routing,o.waypoints);}if(this._edgePathResolver){let y=C=>{let b=He(C,c);if(!b)return "";if(b.start&&b.end&&b.start===b.end)return chunkTVRPABD2_js.g(b.start,C).d;let O=chunkTVRPABD2_js.e(b.start,b.end,C);return chunkTVRPABD2_js.f(O.start,O.end,C.routing,C.waypoints).d};try{let C=this._edgePathResolver(o,e,y);typeof C=="string"&&C&&(q.d=C);}catch(C){console.warn(`VizBuilder: edge path resolver threw for edge ${o.id}`,C);}}o.runtime?.opacity!==void 0?L.style.opacity=String(o.runtime.opacity):L.style.removeProperty("opacity");let P=L.querySelector('[data-viz-role="edge-line"]')||L.querySelector(".viz-edge");if(!P)return;if(o.runtime?.strokeDashoffset!==void 0?(P.style.strokeDashoffset=String(o.runtime.strokeDashoffset),P.setAttribute("stroke-dashoffset",String(o.runtime.strokeDashoffset))):(P.style.removeProperty("stroke-dashoffset"),P.removeAttribute("stroke-dashoffset")),P.setAttribute("d",q.d),o.markerEnd&&o.markerEnd!=="none"){let y=fe(o.markerEnd,o.style?.stroke,"end");P.setAttribute("marker-end",`url(#${y})`);}else P.removeAttribute("marker-end");if(o.markerStart&&o.markerStart!=="none"){let y=fe(o.markerStart,o.style?.stroke,"start");P.setAttribute("marker-start",`url(#${y})`);}else P.removeAttribute("marker-start");if(o.style?.stroke!==void 0?P.style.stroke=o.style.stroke:P.style.removeProperty("stroke"),o.style?.strokeWidth!==void 0?P.style.strokeWidth=String(o.style.strokeWidth):P.style.removeProperty("stroke-width"),o.style?.fill!==void 0?P.style.fill=o.style.fill:P.style.removeProperty("fill"),o.style?.opacity!==void 0?P.style.opacity=String(o.style.opacity):P.style.removeProperty("opacity"),o.style?.strokeDasharray!==void 0?P.style.strokeDasharray=be(o.style.strokeDasharray):P.style.removeProperty("stroke-dasharray"),j){let y=0;for(let b=0;b<o.id.length;b++)y=Math.imul(31,y)+o.id.charCodeAt(b)|0;let C=Math.abs(y);P.setAttribute("filter",`url(#${ve(C)})`);}else P.removeAttribute("filter");let ie=L.querySelector('[data-viz-role="edge-hit"]')||L.querySelector(".viz-edge-hit");if(ie&&ie.remove(),o.hitArea||o.onClick){let y=document.createElementNS(n,"path");y.setAttribute("class","viz-edge-hit"),y.setAttribute("data-viz-role","edge-hit"),y.setAttribute("d",q.d),y.setAttribute("stroke","transparent"),y.setAttribute("stroke-width",String(o.hitArea||10)),y.style.cursor=o.onClick?"pointer":"",o.onClick&&y.addEventListener("click",C=>{C.stopPropagation(),o.onClick(o.id,o);}),L.appendChild(y);}L.querySelectorAll('[data-viz-role="edge-label"],.viz-edge-label').forEach(y=>y.remove()),Be(o).forEach((y,C)=>{let b=we(y,q),O=`viz-edge-label ${y.className||""}`,A=ge(b.x,b.y,y.rich??y.text,{className:O,fill:y.fill,fontSize:y.fontSize,fontWeight:y.fontWeight,fontFamily:y.fontFamily,textAnchor:"middle",dominantBaseline:"middle",maxWidth:y.maxWidth,lineHeight:y.lineHeight,verticalAlign:y.verticalAlign,overflow:y.overflow}).replace("<text ",`<text data-viz-role="edge-label" data-label-index="${C}" data-label-position="${y.position}" `);L.insertAdjacentHTML("beforeend",A);});}),h.forEach(o=>{let N=o.getAttribute("data-id");N&&!z.has(N)&&o.remove();});let $=new Map,v=[];l.forEach(o=>{if(o.parentId){let N=$.get(o.parentId);N||(N=[],$.set(o.parentId,N)),N.push(o);}else v.push(o);}),v.sort((o,N)=>(o.zIndex||0)-(N.zIndex||0)),$.forEach(o=>o.sort((N,E)=>(N.zIndex||0)-(E.zIndex||0)));let w=Array.from(f.querySelectorAll('g[data-viz-role="node-group"]')),_=new Map;w.forEach(o=>{let N=o.getAttribute("data-id");N&&_.set(N,o);});let B=new Set,s=(o,N)=>{B.add(o.id);let E=_.get(o.id);E||(E=document.createElementNS(n,"g"),E.setAttribute("data-id",o.id),E.setAttribute("data-viz-role","node-group")),N.appendChild(E);let F=!!o.container,L=`viz-node-group${F?" viz-container":""} ${o.className||""}`,Y=o.style?.sketch||e.sketch?.enabled;Y&&(L+=" viz-sketch"),E.removeAttribute("style"),o.animations&&o.animations.forEach(k=>{if(k.when===false)return;let V=ke.getNodeRenderer(k.id);if(V){if(V.getClass&&(L+=` ${V.getClass({spec:k,element:o})}`),V.getStyle){let U=V.getStyle({spec:k,element:o});Object.entries(U).forEach(([H,te])=>{E.style.setProperty(H,String(te));});}}else L+=` ${Fe(k.id)}`,Ke(k.params).forEach(([U,H])=>{E.style.setProperty(U,H);});}),E.setAttribute("class",L),E._clickHandler=o.onClick?k=>{k.stopPropagation(),o.onClick(o.id,o);}:null,E.hasAttribute("data-click-initialized")||(E.addEventListener("click",k=>{E._clickHandler&&E._clickHandler(k);}),E.setAttribute("data-click-initialized","true")),E.style.cursor=o.onClick?"pointer":"";let{x:j,y:q}=chunkOZAFCKI7_js.d(o),P=E.querySelector('[data-viz-role="node-shape"]')||E.querySelector(".viz-node-shape"),J=chunkOZAFCKI7_js.f(o.shape).tagName;(!P||P.tagName!==J)&&(P&&P.remove(),P=document.createElementNS(n,J),P.setAttribute("class","viz-node-shape"),P.setAttribute("data-viz-role","node-shape"),E.prepend(P)),chunkOZAFCKI7_js.g(P,o.shape,{x:j,y:q});let y=be(o.style?.strokeDasharray),C=o.style?.shadow?`url(#${Pe(Oe(o.style.shadow))})`:void 0;if(cr(P,{fill:o.style?.fill??"none",stroke:o.style?.stroke??"#111","stroke-width":o.style?.strokeWidth??2,opacity:o.runtime?.opacity??o.style?.opacity,"stroke-dasharray":y||void 0,filter:C}),Y){let k=Le(o.style,o.id);E.setAttribute("filter",`url(#${ve(k)})`);}else E.removeAttribute("filter");let b=E.querySelector(':scope > [data-viz-role="node-image"], :scope > .viz-node-image');b&&b.remove();let O=E.querySelector(':scope > [data-viz-role="node-icon"], :scope > .viz-node-icon');O&&O.remove();let A=E.querySelector(':scope > [data-viz-role="node-svg"], :scope > .viz-node-svg');A&&A.remove();let T=P,W=k=>{E.insertBefore(k,T.nextSibling),T=k;};if(o.image){let k=Ee(o,o.image.width,o.image.height,{position:o.image.position,dx:o.image.dx,dy:o.image.dy}),V=document.createElementNS(n,"image");V.setAttribute("class","viz-node-image"),V.setAttribute("data-viz-role","node-image"),V.setAttribute("x",String(k.x)),V.setAttribute("y",String(k.y)),V.setAttribute("width",String(o.image.width)),V.setAttribute("height",String(o.image.height)),V.setAttribute("href",o.image.href),o.image.preserveAspectRatio&&V.setAttribute("preserveAspectRatio",o.image.preserveAspectRatio),W(V);}if(o.icon){let k=chunkOZAFCKI7_js.b.get(o.icon.id);if(!k)console.warn(`VizCraft: icon '${o.icon.id}' not found. Use registerIcon().`);else {let V=Ee(o,o.icon.size,o.icon.size,{position:o.icon.position,dx:o.icon.dx,dy:o.icon.dy}),U=document.createElementNS(n,"g");U.setAttribute("class","viz-node-icon"),U.setAttribute("data-viz-role","node-icon"),U.setAttribute("transform",`translate(${V.x} ${V.y})`),o.icon.color&&U.setAttribute("style",`color:${o.icon.color}`),U.innerHTML=at(k,o.icon.size,o.icon.size),W(U);}}if(o.svgContent){let k=Ee(o,o.svgContent.width,o.svgContent.height,{position:o.svgContent.position,dx:o.svgContent.dx,dy:o.svgContent.dy}),V=document.createElementNS(n,"g");V.setAttribute("class","viz-node-svg"),V.setAttribute("data-viz-role","node-svg"),V.setAttribute("transform",`translate(${k.x} ${k.y})`),V.innerHTML=Nt(o.svgContent.content,o.svgContent.width,o.svgContent.height),W(V);}if(F&&o.container.headerHeight&&"w"in o.shape&&"h"in o.shape){let k=o.shape.w,V=o.shape.h,U=q-V/2+o.container.headerHeight,H=E.querySelector('[data-viz-role="container-header"]');H||(H=document.createElementNS(n,"line"),H.setAttribute("class","viz-container-header"),H.setAttribute("data-viz-role","container-header"),E.appendChild(H)),H.setAttribute("x1",String(j-k/2)),H.setAttribute("y1",String(U)),H.setAttribute("x2",String(j+k/2)),H.setAttribute("y2",String(U)),H.setAttribute("stroke",o.style?.stroke??"#111"),H.setAttribute("stroke-width",String(o.style?.strokeWidth??2));}else {let k=E.querySelector('[data-viz-role="container-header"]');k&&k.remove();}let K=o.compartments&&o.compartments.length>0;if(E.querySelectorAll('[data-viz-role="compartment-divider"],[data-viz-role="compartment-label"],[data-viz-role="compartment-entry"]').forEach(k=>k.remove()),K&&"w"in o.shape){let k=o.shape.w,V=o.shape.h,U=q-V/2,H=8;for(let te=0;te<o.compartments.length;te++){let I=o.compartments[te];if(te>0){let R=U+I.y,Z=document.createElementNS(n,"line");Z.setAttribute("class","viz-compartment-divider"),Z.setAttribute("data-viz-role","compartment-divider"),Z.setAttribute("data-compartment",I.id),Z.setAttribute("x1",String(j-k/2)),Z.setAttribute("y1",String(R)),Z.setAttribute("x2",String(j+k/2)),Z.setAttribute("y2",String(R)),Z.setAttribute("stroke",o.style?.stroke??"#111"),Z.setAttribute("stroke-width",String(o.style?.strokeWidth??2)),E.appendChild(Z);}if(I.entries&&I.entries.length>0)for(let R of I.entries){let Z=j-k/2+H+(R.label?.dx||0),se=R.paddingTop??0,oe=R.paddingBottom??0,pe=R.height-se-oe,le=U+I.y+R.y+se+pe/2+(R.label?.dy||0),ce=`viz-compartment-entry ${R.className||""} ${R.label?.className||""}`.trim(),Ct=ge(Z,le,R.label?.rich??R.text,{className:ce,fill:R.label?.fill,fontSize:R.label?.fontSize,fontWeight:R.label?.fontWeight,fontFamily:R.label?.fontFamily,textAnchor:R.label?.textAnchor||"start",dominantBaseline:R.label?.dominantBaseline||"middle",maxWidth:R.label?.maxWidth??k-H*2,lineHeight:R.label?.lineHeight,verticalAlign:R.label?.verticalAlign,overflow:R.label?.overflow}).replace("<text ",`<text data-viz-role="compartment-entry" data-compartment="${I.id}" data-entry="${R.id}" `);E.insertAdjacentHTML("beforeend",Ct);}else if(I.label){let R=j-k/2+H+(I.label.dx||0),Z=U+I.y+I.height/2+(I.label.dy||0),se=`viz-compartment-label ${I.label.className||""}`,oe=ge(R,Z,I.label.rich??I.label.text,{className:se,fill:I.label.fill,fontSize:I.label.fontSize,fontWeight:I.label.fontWeight,fontFamily:I.label.fontFamily,textAnchor:I.label.textAnchor||"start",dominantBaseline:I.label.dominantBaseline||"middle",maxWidth:I.label.maxWidth??k-H*2,lineHeight:I.label.lineHeight,verticalAlign:I.label.verticalAlign,overflow:I.label.overflow}).replace("<text ",`<text data-viz-role="compartment-label" data-compartment="${I.id}" `);E.insertAdjacentHTML("beforeend",oe);}}for(let te of o.compartments)if(te.entries)for(let I of te.entries){if(!I.onClick)continue;let R=E.querySelector(`[data-viz-role="compartment-entry"][data-compartment="${te.id}"][data-entry="${I.id}"]`);R&&(R.addEventListener("click",Z=>{Z.stopPropagation(),I.onClick();}),R.style.cursor="pointer");}}let Q=j+(o.label?.dx||0),M=q+(o.label?.dy||0),D=!!o.label&&!K;if(o.label&&F&&o.container.headerHeight&&"h"in o.shape&&!o.label.dy){let k=o.shape.h;M=q-k/2+o.container.headerHeight/2,Q=j+(o.label.dx||0);}let ee=E.querySelector('[data-viz-role="node-label"]')||E.querySelector(".viz-node-label");if(ee&&(ee.remove(),ee=null),o.label&&D){let k=`viz-node-label ${o.label.className||""}`,V=ge(Q,M,o.label.rich??o.label.text,{className:k,fill:o.label.fill,fontSize:o.label.fontSize,fontWeight:o.label.fontWeight,fontFamily:o.label.fontFamily,textAnchor:o.label.textAnchor||"middle",dominantBaseline:o.label.dominantBaseline||"middle",maxWidth:o.label.maxWidth,lineHeight:o.label.lineHeight,verticalAlign:o.label.verticalAlign,overflow:o.label.overflow}).replace("<text ",'<text data-viz-role="node-label" ');E.insertAdjacentHTML("beforeend",V),ee=E.querySelector('[data-viz-role="node-label"]');}if(E.querySelectorAll('[data-viz-role="badge"]').forEach(k=>k.remove()),o.badges&&o.badges.length>0){let k=chunkOZAFCKI7_js.o(o.shape),V=k.width/2,U=k.height/2;for(let H of o.badges){let te=H.fontSize??10,I=3,R=te+I*2,Z=Math.max(te*H.text.length*.7+I*2,R),se,oe;H.position==="top-left"?(se=j-V-Z/4,oe=q-U-R/4):H.position==="top-right"?(se=j+V-Z*3/4,oe=q-U-R/4):H.position==="bottom-left"?(se=j-V-Z/4,oe=q+U-R*3/4):(se=j+V-Z*3/4,oe=q+U-R*3/4);let pe=document.createElementNS(n,"g");if(pe.setAttribute("class","viz-badge"),pe.setAttribute("data-viz-role","badge"),H.background){let ce=document.createElementNS(n,"rect");ce.setAttribute("x",String(se)),ce.setAttribute("y",String(oe)),ce.setAttribute("width",String(Z)),ce.setAttribute("height",String(R)),ce.setAttribute("rx",String(R/2)),ce.setAttribute("fill",H.background),pe.appendChild(ce);}let le=document.createElementNS(n,"text");le.setAttribute("x",String(se+Z/2)),le.setAttribute("y",String(oe+R/2)),le.setAttribute("text-anchor","middle"),le.setAttribute("dominant-baseline","central"),le.setAttribute("font-size",String(te)),H.fill&&le.setAttribute("fill",H.fill),le.textContent=H.text,pe.appendChild(le),E.appendChild(pe);}}E.querySelectorAll('[data-viz-role="port"]').forEach(k=>k.remove()),o.ports&&o.ports.length>0&&o.ports.forEach(k=>{let V=document.createElementNS(n,"circle");V.setAttribute("cx",String(j+k.offset.x)),V.setAttribute("cy",String(q+k.offset.y)),V.setAttribute("r","4"),V.setAttribute("class","viz-port"),V.setAttribute("data-viz-role","port"),V.setAttribute("data-node",o.id),V.setAttribute("data-port",k.id),E.appendChild(V);});let he=$.get(o.id);if(he&&he.length>0){let k=E.querySelector(':scope > [data-viz-role="container-children"]');k||(k=document.createElementNS(n,"g"),k.setAttribute("class","viz-container-children"),k.setAttribute("data-viz-role","container-children"),E.appendChild(k)),he.forEach(V=>s(V,k));}else {let k=E.querySelector(':scope > [data-viz-role="container-children"]');k&&k.remove();}};v.forEach(o=>s(o,f)),w.forEach(o=>{let N=o.getAttribute("data-id");N&&!B.has(N)&&o.remove();});let x=Array.from(p.children).filter(o=>o.tagName==="g"),S=new Map;x.forEach(o=>{let N=o.getAttribute("data-overlay-id");N&&S.set(N,o);});let G=new Set;d&&d.length>0&&d.forEach(o=>{let N=ye.get(o.id);if(N){let E=o.key||o.id;G.add(E);let F=S.get(E);F||(F=document.createElementNS(n,"g"),F.setAttribute("data-overlay-id",E),F.setAttribute("data-viz-role","overlay-group"),p.appendChild(F)),F.setAttribute("class",`viz-overlay-${o.id}${o.className?` ${o.className}`:""}`);let L={spec:o,nodesById:c,edgesById:new Map(a.map(Y=>[Y.id,Y])),scene:e,registry:ye};N.update?N.update(L,F):F.innerHTML=N.render(L);}}),x.forEach(o=>{let N=o.getAttribute("data-overlay-id");N&&!G.has(N)&&o.remove();}),Ae.set(u,Ce(u,{edgePathResolver:this._edgePathResolver}));}_renderSceneToSvg(e,t){let i=t?.includeRuntime===true,{viewBox:l,nodes:a,edges:d,overlays:c}=e,n=new Map;if(i)for(let s of a){if(!s.container)continue;let x=(s.runtime?.x??s.pos.x)-s.pos.x,S=(s.runtime?.y??s.pos.y)-s.pos.y;(x!==0||S!==0)&&n.set(s.id,{dx:x,dy:S});}let u=a.map(s=>{if(!i)return {...s,runtime:void 0};let x=s.runtime?{...s.runtime}:{},S=x.x??s.pos.x,G=x.y??s.pos.y;if(s.parentId){let E=n.get(s.parentId);E&&(S+=E.dx,G+=E.dy);}(x.x!==void 0||x.y!==void 0||S!==s.pos.x||G!==s.pos.y)&&(x.x=S,x.y=G);let N=Object.keys(x).length>0?x:void 0;return {...s,runtime:N}}),g=d.map(s=>i?s:{...s,runtime:void 0}),f={...e,nodes:u,edges:g},p=new Map(u.map(s=>[s.id,s])),h=new Map(g.map(s=>[s.id,s])),m=`<svg viewBox="0 0 ${l.w} ${l.h}" xmlns="http://www.w3.org/2000/svg">`;m+=`<style>${Ze}</style>`,m+=`
|
|
117
117
|
<defs>`;let z=new Set;d.forEach(s=>{let x=s.style?.stroke;if(s.markerEnd&&s.markerEnd!=="none"){let S=fe(s.markerEnd,x,"end");z.has(S)||(z.add(S),m+=We(s.markerEnd,x??"currentColor",S,"end"));}if(s.markerStart&&s.markerStart!=="none"){let S=fe(s.markerStart,x,"start");z.has(S)||(z.add(S),m+=We(s.markerStart,x??"currentColor",S,"start"));}});let $=new Map;u.forEach(s=>{if(s.style?.shadow){let x=Oe(s.style.shadow),S=Pe(x);$.has(S)||$.set(S,x);}}),$.forEach((s,x)=>{m+=ot(x,s);});let v=new Set,w=f.sketch?.enabled;u.forEach(s=>{(s.style?.sketch||w)&&v.add(Le(s.style,s.id));}),g.forEach(s=>{if(s.style?.sketch||w){let x=0;for(let S=0;S<s.id.length;S++)x=Math.imul(31,x)+s.id.charCodeAt(S)|0;v.add(Math.abs(x));}}),v.forEach(s=>{m+=lt(ve(s),s);}),m+=`
|
|
118
|
-
</defs>`,m+='<g class="viz-layer-edges" data-viz-layer="edges">',g.forEach(s=>{let x=He(s,p);if(!x)return;let{start:S,end:G}=x,o="",N="";s.animations&&s.animations.forEach(b=>{if(b.when===false)return;let O=ke.getEdgeRenderer(b.id);if(O){if(O.getClass&&(o+=` ${O.getClass({spec:b,element:s})}`),O.getStyle){let A=O.getStyle({spec:b,element:s});Object.entries(A).forEach(([T,W])=>{N+=`${T}: ${W}; `;});}}else o+=` ${Fe(b.id)}`,Ke(b.params).forEach(([A,T])=>{N+=`${A}: ${T}; `;});});let E=s.markerEnd&&s.markerEnd!=="none"?`marker-end="url(#${fe(s.markerEnd,s.style?.stroke,"end")})"`:"",F=s.markerStart&&s.markerStart!=="none"?`marker-start="url(#${fe(s.markerStart,s.style?.stroke,"start")})"`:"",L;if(S&&G&&S===G)L=chunkXOBMAQC3_js.g(S,s);else {let b=chunkXOBMAQC3_js.e(S,G,s);L=chunkXOBMAQC3_js.f(b.start,b.end,s.routing,s.waypoints);}if(this._edgePathResolver){let b=O=>{let A=He(O,p);if(!A)return "";if(A.start&&A.end&&A.start===A.end)return chunkXOBMAQC3_js.g(A.start,O).d;let T=chunkXOBMAQC3_js.e(A.start,A.end,O);return chunkXOBMAQC3_js.f(T.start,T.end,O.routing,O.waypoints).d};try{let O=this._edgePathResolver(s,f,A=>b(A));typeof O=="string"&&O&&(L.d=O);}catch(O){console.warn(`VizBuilder: edge path resolver threw for edge ${s.id}`,O);}}let Y="";s.runtime?.opacity!==void 0&&(Y+=`opacity: ${s.runtime.opacity}; `);let j="",q="";s.runtime?.strokeDashoffset!==void 0&&(j+=`stroke-dashoffset: ${s.runtime.strokeDashoffset}; `,q+=` stroke-dashoffset="${s.runtime.strokeDashoffset}"`);let P=s.style?.sketch||w,ie=P?" viz-sketch":"";m+=`<g data-id="${s.id}" data-viz-role="edge-group" class="viz-edge-group${ie} ${s.className||""} ${o}" style="${N}${Y}">`;let J=j;if(s.style?.stroke!==void 0&&(J+=`stroke: ${s.style.stroke}; `),s.style?.strokeWidth!==void 0&&(J+=`stroke-width: ${s.style.strokeWidth}; `),s.style?.fill!==void 0&&(J+=`fill: ${s.style.fill}; `),s.style?.opacity!==void 0&&s.runtime?.opacity===void 0&&(J+=`opacity: ${s.style.opacity}; `),s.style?.strokeDasharray!==void 0){let b=be(s.style.strokeDasharray);b&&(J+=`stroke-dasharray: ${b}; `);}let y="";if(P){let b=0;for(let O=0;O<s.id.length;O++)b=Math.imul(31,b)+s.id.charCodeAt(O)|0;y=` filter="url(#${ve(Math.abs(b))})"`;}m+=`<path d="${L.d}" class="viz-edge" data-viz-role="edge-line" ${E} ${F} style="${J}"${q}${y} />`,Be(s).forEach((b,O)=>{let A=we(b,L),T=`viz-edge-label ${b.className||""}`,K=ge(A.x,A.y,b.rich??b.text,{className:T,fill:b.fill,fontSize:b.fontSize,fontWeight:b.fontWeight,fontFamily:b.fontFamily,textAnchor:"middle",dominantBaseline:"middle",maxWidth:b.maxWidth,lineHeight:b.lineHeight,verticalAlign:b.verticalAlign,overflow:b.overflow}).replace("<text ",`<text data-viz-role="edge-label" data-label-index="${O}" data-label-position="${b.position}" `);m+=K;}),m+="</g>";}),m+="</g>";let _=new Map;u.forEach(s=>{if(s.parentId){let x=_.get(s.parentId);x||(x=[],_.set(s.parentId,x)),x.push(s);}});let B=s=>{let x="",{x:S,y:G}=chunkOZAFCKI7_js.d(s),o=chunkOZAFCKI7_js.e(s),N="",E="";s.runtime?.opacity!==void 0&&(E+=`opacity: ${s.runtime.opacity}; `),s.animations&&s.animations.forEach(A=>{if(A.when===false)return;let T=ke.getNodeRenderer(A.id);if(T){if(T.getClass&&(N+=` ${T.getClass({spec:A,element:s})}`),T.getStyle){let W=T.getStyle({spec:A,element:s});Object.entries(W).forEach(([K,Q])=>{E+=`${K}: ${Q}; `;});}}else N+=` ${Fe(A.id)}`,Ke(A.params).forEach(([W,K])=>{E+=`${W}: ${K}; `;});});let F=!!s.container,L=s.style?.sketch||w,Y=`viz-node-group${F?" viz-container":""}${L?" viz-sketch":""} ${s.className||""} ${N}`,j=s.runtime?.scale,q=s.runtime?.rotation,P="";if(L){let A=Le(s.style,s.id);P=` filter="url(#${ve(A)})"`;}let ie=j!==void 0||q!==void 0?` transform="translate(${S} ${G}) rotate(${q??0}) scale(${j??1}) translate(${-S} ${-G})"`:"";x+=`<g data-id="${s.id}" data-viz-role="node-group" class="${Y}" style="${E}"${ie}${P}>`;let J=be(s.style?.strokeDasharray),y=s.style?.shadow?`url(#${Pe(Oe(s.style.shadow))})`:void 0,C=gr({fill:s.style?.fill??"none",stroke:s.style?.stroke??"#111","stroke-width":s.style?.strokeWidth??2,opacity:s.runtime?.opacity!==void 0?void 0:s.style?.opacity,"stroke-dasharray":J||void 0,filter:y});if(x+=chunkOZAFCKI7_js.h(o,{x:S,y:G},C),s.image){let A=Ee(s,s.image.width,s.image.height,{position:s.image.position,dx:s.image.dx,dy:s.image.dy}),T=s.image.preserveAspectRatio?` preserveAspectRatio="${me(s.image.preserveAspectRatio)}"`:"",W=me(s.image.href);x+=`<image x="${A.x}" y="${A.y}" width="${s.image.width}" height="${s.image.height}" href="${W}"${T} class="viz-node-image" data-viz-role="node-image" />`;}if(s.icon){let A=chunkOZAFCKI7_js.b.get(s.icon.id);if(!A)console.warn(`VizCraft: icon '${s.icon.id}' not found. Use registerIcon().`);else {let T=Ee(s,s.icon.size,s.icon.size,{position:s.icon.position,dx:s.icon.dx,dy:s.icon.dy}),W=s.icon.color?` style="color:${me(s.icon.color)}"`:"",K=at(A,s.icon.size,s.icon.size);x+=`<g transform="translate(${T.x} ${T.y})" class="viz-node-icon" data-viz-role="node-icon"${W}>${K}</g>`;}}if(s.svgContent){let A=Ee(s,s.svgContent.width,s.svgContent.height,{position:s.svgContent.position,dx:s.svgContent.dx,dy:s.svgContent.dy}),T=Nt(s.svgContent.content,s.svgContent.width,s.svgContent.height);x+=`<g transform="translate(${A.x} ${A.y})" class="viz-node-svg" data-viz-role="node-svg">${T}</g>`;}if(F&&s.container.headerHeight&&"w"in o&&"h"in o){let A=o.w,T=o.h,W=G-T/2+s.container.headerHeight;x+=`<line x1="${S-A/2}" y1="${W}" x2="${S+A/2}" y2="${W}" stroke="${s.style?.stroke??"#111"}" stroke-width="${s.style?.strokeWidth??2}" class="viz-container-header" data-viz-role="container-header" />`;}let b=s.compartments&&s.compartments.length>0;if(b&&"w"in o){let A=o.w,T=o.h,W=G-T/2,K=8;for(let Q=0;Q<s.compartments.length;Q++){let M=s.compartments[Q];if(Q>0){let D=W+M.y;x+=`<line x1="${S-A/2}" y1="${D}" x2="${S+A/2}" y2="${D}" stroke="${s.style?.stroke??"#111"}" stroke-width="${s.style?.strokeWidth??2}" class="viz-compartment-divider" data-viz-role="compartment-divider" data-compartment="${M.id}" />`;}if(M.entries&&M.entries.length>0)for(let D of M.entries){let ee=S-A/2+K+(D.label?.dx||0),re=D.paddingTop??0,ne=D.paddingBottom??0,he=D.height-re-ne,k=W+M.y+D.y+re+he/2+(D.label?.dy||0),V=`viz-compartment-entry ${D.className||""} ${D.label?.className||""}`.trim(),U=ge(ee,k,D.label?.rich??D.text,{className:V,fill:D.label?.fill,fontSize:D.label?.fontSize,fontWeight:D.label?.fontWeight,fontFamily:D.label?.fontFamily,textAnchor:D.label?.textAnchor||"start",dominantBaseline:D.label?.dominantBaseline||"middle",maxWidth:D.label?.maxWidth??A-K*2,lineHeight:D.label?.lineHeight,verticalAlign:D.label?.verticalAlign,overflow:D.label?.overflow}).replace("<text ",`<text data-viz-role="compartment-entry" data-compartment="${me(M.id)}" data-entry="${me(D.id)}" `);x+=U;}else if(M.label){let D=S-A/2+K+(M.label.dx||0),ee=W+M.y+M.height/2+(M.label.dy||0),re=`viz-compartment-label ${M.label.className||""}`,ne=ge(D,ee,M.label.rich??M.label.text,{className:re,fill:M.label.fill,fontSize:M.label.fontSize,fontWeight:M.label.fontWeight,fontFamily:M.label.fontFamily,textAnchor:M.label.textAnchor||"start",dominantBaseline:M.label.dominantBaseline||"middle",maxWidth:M.label.maxWidth??A-K*2,lineHeight:M.label.lineHeight,verticalAlign:M.label.verticalAlign,overflow:M.label.overflow}).replace("<text ",`<text data-viz-role="compartment-label" data-compartment="${M.id}" `);x+=ne;}}}if(s.label&&!b){let A=S+(s.label.dx||0),T=G+(s.label.dy||0);if(F&&s.container.headerHeight&&"h"in o&&!s.label.dy){let M=o.h;T=G-M/2+s.container.headerHeight/2,A=S+(s.label.dx||0);}let W=`viz-node-label ${s.label.className||""}`,Q=ge(A,T,s.label.rich??s.label.text,{className:W,fill:s.label.fill,fontSize:s.label.fontSize,fontWeight:s.label.fontWeight,fontFamily:s.label.fontFamily,textAnchor:s.label.textAnchor||"middle",dominantBaseline:s.label.dominantBaseline||"middle",maxWidth:s.label.maxWidth,lineHeight:s.label.lineHeight,verticalAlign:s.label.verticalAlign,overflow:s.label.overflow}).replace("<text ",'<text data-viz-role="node-label" ');x+=Q;}if(s.badges&&s.badges.length>0){let A=chunkOZAFCKI7_js.o(o),T=A.width/2,W=A.height/2;for(let K of s.badges){let Q=K.fontSize??10,M=3,D=Q+M*2,ee=Math.max(Q*K.text.length*.7+M*2,D),re,ne;if(K.position==="top-left"?(re=S-T-ee/4,ne=G-W-D/4):K.position==="top-right"?(re=S+T-ee*3/4,ne=G-W-D/4):K.position==="bottom-left"?(re=S-T-ee/4,ne=G+W-D*3/4):(re=S+T-ee*3/4,ne=G+W-D*3/4),x+='<g class="viz-badge" data-viz-role="badge">',K.background){let V=me(K.background);x+=`<rect x="${re}" y="${ne}" width="${ee}" height="${D}" rx="${D/2}" fill="${V}" />`;}let he=K.fill?` fill="${me(K.fill)}"`:"",k=K.text.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");x+=`<text x="${re+ee/2}" y="${ne+D/2}" text-anchor="middle" dominant-baseline="central" font-size="${Q}"${he}>${k}</text>`,x+="</g>";}}s.ports&&s.ports.length>0&&s.ports.forEach(A=>{let T=S+A.offset.x,W=G+A.offset.y;x+=`<circle cx="${T}" cy="${W}" r="4" class="viz-port" data-viz-role="port" data-node="${s.id}" data-port="${A.id}" />`;});let O=_.get(s.id);return O&&O.length>0&&(x+='<g class="viz-container-children" data-viz-role="container-children">',O.forEach(A=>{x+=B(A);}),x+="</g>"),x+="</g>",x};return m+='<g class="viz-layer-nodes" data-viz-layer="nodes">',u.forEach(s=>{s.parentId||(m+=B(s));}),m+="</g>",c&&c.length>0&&(m+='<g class="viz-layer-overlays" data-viz-layer="overlays">',c.forEach(s=>{let x=ye.get(s.id);x&&(m+=x.render({spec:s,nodesById:p,edgesById:h,scene:f,registry:ye}));}),m+="</g>"),m+="</svg>",m}};function Ei(){return new dt}function zi(r,e){let t=r.edges.find(l=>l.id===e);if(!t)return null;let i=new Map(r.nodes.map(l=>[l.id,l]));return fr(t,i)}function fr(r,e){let t=r.from?e.get(r.from)??null:null,i=r.to?e.get(r.to)??null:null;if(r.from&&!t||r.to&&!i||!t&&!r.fromAt&&!i&&!r.toAt)return null;let l=!!(t&&i&&t===i),a,d,c;if(l){let n=chunkXOBMAQC3_js.g(t,r);a=n,d=n.exitPoint,c=n.entryPoint;}else {let n=chunkXOBMAQC3_js.e(t,i,r);a=chunkXOBMAQC3_js.f(n.start,n.end,r.routing,r.waypoints),d=n.start,c=n.end;}return {...a,startAnchor:d,endAnchor:c,startLabel:a.start,endLabel:a.end,waypoints:r.waypoints??[],isSelfLoop:l}}Object.defineProperty(exports,"AnimationBuilder",{enumerable:true,get:function(){return chunkRTJM66N2_js.c}});Object.defineProperty(exports,"OVERLAY_RUNTIME_DIRTY",{enumerable:true,get:function(){return chunkRTJM66N2_js.a}});Object.defineProperty(exports,"buildAnimationSpec",{enumerable:true,get:function(){return chunkRTJM66N2_js.d}});Object.defineProperty(exports,"createBuilderPlayback",{enumerable:true,get:function(){return chunkRTJM66N2_js.f}});Object.defineProperty(exports,"createScenePlayback",{enumerable:true,get:function(){return chunkRTJM66N2_js.e}});Object.defineProperty(exports,"playAnimationSpec",{enumerable:true,get:function(){return chunkRTJM66N2_js.g}});Object.defineProperty(exports,"angleBetween",{enumerable:true,get:function(){return chunkXOBMAQC3_js.d}});Object.defineProperty(exports,"computeEdgeEndpoints",{enumerable:true,get:function(){return chunkXOBMAQC3_js.e}});Object.defineProperty(exports,"computeEdgePath",{enumerable:true,get:function(){return chunkXOBMAQC3_js.f}});Object.defineProperty(exports,"computeSelfLoop",{enumerable:true,get:function(){return chunkXOBMAQC3_js.g}});Object.defineProperty(exports,"distanceSquare",{enumerable:true,get:function(){return chunkXOBMAQC3_js.i}});Object.defineProperty(exports,"edgeDistance",{enumerable:true,get:function(){return chunkXOBMAQC3_js.n}});Object.defineProperty(exports,"getEffectiveNodeBounds",{enumerable:true,get:function(){return chunkXOBMAQC3_js.j}});Object.defineProperty(exports,"hitTest",{enumerable:true,get:function(){return chunkXOBMAQC3_js.k}});Object.defineProperty(exports,"hitTestRect",{enumerable:true,get:function(){return chunkXOBMAQC3_js.l}});Object.defineProperty(exports,"nearestPort",{enumerable:true,get:function(){return chunkXOBMAQC3_js.m}});Object.defineProperty(exports,"pointInRect",{enumerable:true,get:function(){return chunkXOBMAQC3_js.h}});Object.defineProperty(exports,"setupPanZoom",{enumerable:true,get:function(){return chunkXOBMAQC3_js.a}});Object.defineProperty(exports,"circularLayout",{enumerable:true,get:function(){return chunkNHGHIK6R_js.a}});Object.defineProperty(exports,"gridLayout",{enumerable:true,get:function(){return chunkNHGHIK6R_js.b}});Object.defineProperty(exports,"deserializeScene",{enumerable:true,get:function(){return chunkE3Z7QMXI_js.b}});Object.defineProperty(exports,"serializeScene",{enumerable:true,get:function(){return chunkE3Z7QMXI_js.a}});Object.defineProperty(exports,"findPortNearest",{enumerable:true,get:function(){return chunkT5O2PDL6_js.d}});Object.defineProperty(exports,"getEquidistantPorts",{enumerable:true,get:function(){return chunkT5O2PDL6_js.b}});Object.defineProperty(exports,"registerPerimeterStrategy",{enumerable:true,get:function(){return chunkT5O2PDL6_js.a}});Object.defineProperty(exports,"toNodePorts",{enumerable:true,get:function(){return chunkT5O2PDL6_js.c}});Object.defineProperty(exports,"CoreIconRegistry",{enumerable:true,get:function(){return chunkOZAFCKI7_js.a}});Object.defineProperty(exports,"computeNodeAnchorAtAngle",{enumerable:true,get:function(){return chunkOZAFCKI7_js.j}});Object.defineProperty(exports,"defaultCoreIconRegistry",{enumerable:true,get:function(){return chunkOZAFCKI7_js.b}});Object.defineProperty(exports,"findPort",{enumerable:true,get:function(){return chunkOZAFCKI7_js.m}});Object.defineProperty(exports,"getDefaultPorts",{enumerable:true,get:function(){return chunkOZAFCKI7_js.k}});Object.defineProperty(exports,"getNodeBoundingBox",{enumerable:true,get:function(){return chunkOZAFCKI7_js.o}});Object.defineProperty(exports,"getNodePorts",{enumerable:true,get:function(){return chunkOZAFCKI7_js.l}});Object.defineProperty(exports,"registerIcon",{enumerable:true,get:function(){return chunkOZAFCKI7_js.c}});Object.defineProperty(exports,"resolvePortPosition",{enumerable:true,get:function(){return chunkOZAFCKI7_js.n}});exports.CoreAnimationRegistry=Ye;exports.CoreOverlayRegistry=Xe;exports.DEFAULT_VIZ_CSS=Ze;exports.OverlayBuilder=ze;exports.RichLabelBuilderImpl=Se;exports.buildOverlaySpecs=Tr;exports.collectEdgeLabels=Be;exports.coreCircleOverlay=Mt;exports.coreDataPointOverlay=Dt;exports.coreFlowAnimation=Lt;exports.coreGridLabelsOverlay=Tt;exports.coreGroupOverlay=Ht;exports.coreRectOverlay=Gt;exports.coreSignalOverlay=Rt;exports.coreTextOverlay=It;exports.defaultCoreAnimationRegistry=ke;exports.defaultCoreOverlayRegistry=ye;exports.resolveDasharray=be;exports.resolveEdgeGeometry=zi;exports.resolveEdgeGeometryFromData=fr;exports.resolveEdgeLabelPosition=we;exports.viz=Ei;
|
|
118
|
+
</defs>`,m+='<g class="viz-layer-edges" data-viz-layer="edges">',g.forEach(s=>{let x=He(s,p);if(!x)return;let{start:S,end:G}=x,o="",N="";s.animations&&s.animations.forEach(b=>{if(b.when===false)return;let O=ke.getEdgeRenderer(b.id);if(O){if(O.getClass&&(o+=` ${O.getClass({spec:b,element:s})}`),O.getStyle){let A=O.getStyle({spec:b,element:s});Object.entries(A).forEach(([T,W])=>{N+=`${T}: ${W}; `;});}}else o+=` ${Fe(b.id)}`,Ke(b.params).forEach(([A,T])=>{N+=`${A}: ${T}; `;});});let E=s.markerEnd&&s.markerEnd!=="none"?`marker-end="url(#${fe(s.markerEnd,s.style?.stroke,"end")})"`:"",F=s.markerStart&&s.markerStart!=="none"?`marker-start="url(#${fe(s.markerStart,s.style?.stroke,"start")})"`:"",L;if(S&&G&&S===G)L=chunkTVRPABD2_js.g(S,s);else {let b=chunkTVRPABD2_js.e(S,G,s);L=chunkTVRPABD2_js.f(b.start,b.end,s.routing,s.waypoints);}if(this._edgePathResolver){let b=O=>{let A=He(O,p);if(!A)return "";if(A.start&&A.end&&A.start===A.end)return chunkTVRPABD2_js.g(A.start,O).d;let T=chunkTVRPABD2_js.e(A.start,A.end,O);return chunkTVRPABD2_js.f(T.start,T.end,O.routing,O.waypoints).d};try{let O=this._edgePathResolver(s,f,A=>b(A));typeof O=="string"&&O&&(L.d=O);}catch(O){console.warn(`VizBuilder: edge path resolver threw for edge ${s.id}`,O);}}let Y="";s.runtime?.opacity!==void 0&&(Y+=`opacity: ${s.runtime.opacity}; `);let j="",q="";s.runtime?.strokeDashoffset!==void 0&&(j+=`stroke-dashoffset: ${s.runtime.strokeDashoffset}; `,q+=` stroke-dashoffset="${s.runtime.strokeDashoffset}"`);let P=s.style?.sketch||w,ie=P?" viz-sketch":"";m+=`<g data-id="${s.id}" data-viz-role="edge-group" class="viz-edge-group${ie} ${s.className||""} ${o}" style="${N}${Y}">`;let J=j;if(s.style?.stroke!==void 0&&(J+=`stroke: ${s.style.stroke}; `),s.style?.strokeWidth!==void 0&&(J+=`stroke-width: ${s.style.strokeWidth}; `),s.style?.fill!==void 0&&(J+=`fill: ${s.style.fill}; `),s.style?.opacity!==void 0&&s.runtime?.opacity===void 0&&(J+=`opacity: ${s.style.opacity}; `),s.style?.strokeDasharray!==void 0){let b=be(s.style.strokeDasharray);b&&(J+=`stroke-dasharray: ${b}; `);}let y="";if(P){let b=0;for(let O=0;O<s.id.length;O++)b=Math.imul(31,b)+s.id.charCodeAt(O)|0;y=` filter="url(#${ve(Math.abs(b))})"`;}m+=`<path d="${L.d}" class="viz-edge" data-viz-role="edge-line" ${E} ${F} style="${J}"${q}${y} />`,Be(s).forEach((b,O)=>{let A=we(b,L),T=`viz-edge-label ${b.className||""}`,K=ge(A.x,A.y,b.rich??b.text,{className:T,fill:b.fill,fontSize:b.fontSize,fontWeight:b.fontWeight,fontFamily:b.fontFamily,textAnchor:"middle",dominantBaseline:"middle",maxWidth:b.maxWidth,lineHeight:b.lineHeight,verticalAlign:b.verticalAlign,overflow:b.overflow}).replace("<text ",`<text data-viz-role="edge-label" data-label-index="${O}" data-label-position="${b.position}" `);m+=K;}),m+="</g>";}),m+="</g>";let _=new Map;u.forEach(s=>{if(s.parentId){let x=_.get(s.parentId);x||(x=[],_.set(s.parentId,x)),x.push(s);}});let B=s=>{let x="",{x:S,y:G}=chunkOZAFCKI7_js.d(s),o=chunkOZAFCKI7_js.e(s),N="",E="";s.runtime?.opacity!==void 0&&(E+=`opacity: ${s.runtime.opacity}; `),s.animations&&s.animations.forEach(A=>{if(A.when===false)return;let T=ke.getNodeRenderer(A.id);if(T){if(T.getClass&&(N+=` ${T.getClass({spec:A,element:s})}`),T.getStyle){let W=T.getStyle({spec:A,element:s});Object.entries(W).forEach(([K,Q])=>{E+=`${K}: ${Q}; `;});}}else N+=` ${Fe(A.id)}`,Ke(A.params).forEach(([W,K])=>{E+=`${W}: ${K}; `;});});let F=!!s.container,L=s.style?.sketch||w,Y=`viz-node-group${F?" viz-container":""}${L?" viz-sketch":""} ${s.className||""} ${N}`,j=s.runtime?.scale,q=s.runtime?.rotation,P="";if(L){let A=Le(s.style,s.id);P=` filter="url(#${ve(A)})"`;}let ie=j!==void 0||q!==void 0?` transform="translate(${S} ${G}) rotate(${q??0}) scale(${j??1}) translate(${-S} ${-G})"`:"";x+=`<g data-id="${s.id}" data-viz-role="node-group" class="${Y}" style="${E}"${ie}${P}>`;let J=be(s.style?.strokeDasharray),y=s.style?.shadow?`url(#${Pe(Oe(s.style.shadow))})`:void 0,C=gr({fill:s.style?.fill??"none",stroke:s.style?.stroke??"#111","stroke-width":s.style?.strokeWidth??2,opacity:s.runtime?.opacity!==void 0?void 0:s.style?.opacity,"stroke-dasharray":J||void 0,filter:y});if(x+=chunkOZAFCKI7_js.h(o,{x:S,y:G},C),s.image){let A=Ee(s,s.image.width,s.image.height,{position:s.image.position,dx:s.image.dx,dy:s.image.dy}),T=s.image.preserveAspectRatio?` preserveAspectRatio="${me(s.image.preserveAspectRatio)}"`:"",W=me(s.image.href);x+=`<image x="${A.x}" y="${A.y}" width="${s.image.width}" height="${s.image.height}" href="${W}"${T} class="viz-node-image" data-viz-role="node-image" />`;}if(s.icon){let A=chunkOZAFCKI7_js.b.get(s.icon.id);if(!A)console.warn(`VizCraft: icon '${s.icon.id}' not found. Use registerIcon().`);else {let T=Ee(s,s.icon.size,s.icon.size,{position:s.icon.position,dx:s.icon.dx,dy:s.icon.dy}),W=s.icon.color?` style="color:${me(s.icon.color)}"`:"",K=at(A,s.icon.size,s.icon.size);x+=`<g transform="translate(${T.x} ${T.y})" class="viz-node-icon" data-viz-role="node-icon"${W}>${K}</g>`;}}if(s.svgContent){let A=Ee(s,s.svgContent.width,s.svgContent.height,{position:s.svgContent.position,dx:s.svgContent.dx,dy:s.svgContent.dy}),T=Nt(s.svgContent.content,s.svgContent.width,s.svgContent.height);x+=`<g transform="translate(${A.x} ${A.y})" class="viz-node-svg" data-viz-role="node-svg">${T}</g>`;}if(F&&s.container.headerHeight&&"w"in o&&"h"in o){let A=o.w,T=o.h,W=G-T/2+s.container.headerHeight;x+=`<line x1="${S-A/2}" y1="${W}" x2="${S+A/2}" y2="${W}" stroke="${s.style?.stroke??"#111"}" stroke-width="${s.style?.strokeWidth??2}" class="viz-container-header" data-viz-role="container-header" />`;}let b=s.compartments&&s.compartments.length>0;if(b&&"w"in o){let A=o.w,T=o.h,W=G-T/2,K=8;for(let Q=0;Q<s.compartments.length;Q++){let M=s.compartments[Q];if(Q>0){let D=W+M.y;x+=`<line x1="${S-A/2}" y1="${D}" x2="${S+A/2}" y2="${D}" stroke="${s.style?.stroke??"#111"}" stroke-width="${s.style?.strokeWidth??2}" class="viz-compartment-divider" data-viz-role="compartment-divider" data-compartment="${M.id}" />`;}if(M.entries&&M.entries.length>0)for(let D of M.entries){let ee=S-A/2+K+(D.label?.dx||0),re=D.paddingTop??0,ne=D.paddingBottom??0,he=D.height-re-ne,k=W+M.y+D.y+re+he/2+(D.label?.dy||0),V=`viz-compartment-entry ${D.className||""} ${D.label?.className||""}`.trim(),U=ge(ee,k,D.label?.rich??D.text,{className:V,fill:D.label?.fill,fontSize:D.label?.fontSize,fontWeight:D.label?.fontWeight,fontFamily:D.label?.fontFamily,textAnchor:D.label?.textAnchor||"start",dominantBaseline:D.label?.dominantBaseline||"middle",maxWidth:D.label?.maxWidth??A-K*2,lineHeight:D.label?.lineHeight,verticalAlign:D.label?.verticalAlign,overflow:D.label?.overflow}).replace("<text ",`<text data-viz-role="compartment-entry" data-compartment="${me(M.id)}" data-entry="${me(D.id)}" `);x+=U;}else if(M.label){let D=S-A/2+K+(M.label.dx||0),ee=W+M.y+M.height/2+(M.label.dy||0),re=`viz-compartment-label ${M.label.className||""}`,ne=ge(D,ee,M.label.rich??M.label.text,{className:re,fill:M.label.fill,fontSize:M.label.fontSize,fontWeight:M.label.fontWeight,fontFamily:M.label.fontFamily,textAnchor:M.label.textAnchor||"start",dominantBaseline:M.label.dominantBaseline||"middle",maxWidth:M.label.maxWidth??A-K*2,lineHeight:M.label.lineHeight,verticalAlign:M.label.verticalAlign,overflow:M.label.overflow}).replace("<text ",`<text data-viz-role="compartment-label" data-compartment="${M.id}" `);x+=ne;}}}if(s.label&&!b){let A=S+(s.label.dx||0),T=G+(s.label.dy||0);if(F&&s.container.headerHeight&&"h"in o&&!s.label.dy){let M=o.h;T=G-M/2+s.container.headerHeight/2,A=S+(s.label.dx||0);}let W=`viz-node-label ${s.label.className||""}`,Q=ge(A,T,s.label.rich??s.label.text,{className:W,fill:s.label.fill,fontSize:s.label.fontSize,fontWeight:s.label.fontWeight,fontFamily:s.label.fontFamily,textAnchor:s.label.textAnchor||"middle",dominantBaseline:s.label.dominantBaseline||"middle",maxWidth:s.label.maxWidth,lineHeight:s.label.lineHeight,verticalAlign:s.label.verticalAlign,overflow:s.label.overflow}).replace("<text ",'<text data-viz-role="node-label" ');x+=Q;}if(s.badges&&s.badges.length>0){let A=chunkOZAFCKI7_js.o(o),T=A.width/2,W=A.height/2;for(let K of s.badges){let Q=K.fontSize??10,M=3,D=Q+M*2,ee=Math.max(Q*K.text.length*.7+M*2,D),re,ne;if(K.position==="top-left"?(re=S-T-ee/4,ne=G-W-D/4):K.position==="top-right"?(re=S+T-ee*3/4,ne=G-W-D/4):K.position==="bottom-left"?(re=S-T-ee/4,ne=G+W-D*3/4):(re=S+T-ee*3/4,ne=G+W-D*3/4),x+='<g class="viz-badge" data-viz-role="badge">',K.background){let V=me(K.background);x+=`<rect x="${re}" y="${ne}" width="${ee}" height="${D}" rx="${D/2}" fill="${V}" />`;}let he=K.fill?` fill="${me(K.fill)}"`:"",k=K.text.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");x+=`<text x="${re+ee/2}" y="${ne+D/2}" text-anchor="middle" dominant-baseline="central" font-size="${Q}"${he}>${k}</text>`,x+="</g>";}}s.ports&&s.ports.length>0&&s.ports.forEach(A=>{let T=S+A.offset.x,W=G+A.offset.y;x+=`<circle cx="${T}" cy="${W}" r="4" class="viz-port" data-viz-role="port" data-node="${s.id}" data-port="${A.id}" />`;});let O=_.get(s.id);return O&&O.length>0&&(x+='<g class="viz-container-children" data-viz-role="container-children">',O.forEach(A=>{x+=B(A);}),x+="</g>"),x+="</g>",x};return m+='<g class="viz-layer-nodes" data-viz-layer="nodes">',u.forEach(s=>{s.parentId||(m+=B(s));}),m+="</g>",c&&c.length>0&&(m+='<g class="viz-layer-overlays" data-viz-layer="overlays">',c.forEach(s=>{let x=ye.get(s.id);x&&(m+=x.render({spec:s,nodesById:p,edgesById:h,scene:f,registry:ye}));}),m+="</g>"),m+="</svg>",m}};function Ei(){return new dt}function zi(r,e){let t=r.edges.find(l=>l.id===e);if(!t)return null;let i=new Map(r.nodes.map(l=>[l.id,l]));return fr(t,i)}function fr(r,e){let t=r.from?e.get(r.from)??null:null,i=r.to?e.get(r.to)??null:null;if(r.from&&!t||r.to&&!i||!t&&!r.fromAt&&!i&&!r.toAt)return null;let l=!!(t&&i&&t===i),a,d,c;if(l){let n=chunkTVRPABD2_js.g(t,r);a=n,d=n.exitPoint,c=n.entryPoint;}else {let n=chunkTVRPABD2_js.e(t,i,r);a=chunkTVRPABD2_js.f(n.start,n.end,r.routing,r.waypoints),d=n.start,c=n.end;}return {...a,startAnchor:d,endAnchor:c,startLabel:a.start,endLabel:a.end,waypoints:r.waypoints??[],isSelfLoop:l}}Object.defineProperty(exports,"AnimationBuilder",{enumerable:true,get:function(){return chunkRTJM66N2_js.c}});Object.defineProperty(exports,"OVERLAY_RUNTIME_DIRTY",{enumerable:true,get:function(){return chunkRTJM66N2_js.a}});Object.defineProperty(exports,"buildAnimationSpec",{enumerable:true,get:function(){return chunkRTJM66N2_js.d}});Object.defineProperty(exports,"createBuilderPlayback",{enumerable:true,get:function(){return chunkRTJM66N2_js.f}});Object.defineProperty(exports,"createScenePlayback",{enumerable:true,get:function(){return chunkRTJM66N2_js.e}});Object.defineProperty(exports,"playAnimationSpec",{enumerable:true,get:function(){return chunkRTJM66N2_js.g}});Object.defineProperty(exports,"angleBetween",{enumerable:true,get:function(){return chunkTVRPABD2_js.d}});Object.defineProperty(exports,"computeEdgeEndpoints",{enumerable:true,get:function(){return chunkTVRPABD2_js.e}});Object.defineProperty(exports,"computeEdgePath",{enumerable:true,get:function(){return chunkTVRPABD2_js.f}});Object.defineProperty(exports,"computeSelfLoop",{enumerable:true,get:function(){return chunkTVRPABD2_js.g}});Object.defineProperty(exports,"distanceSquare",{enumerable:true,get:function(){return chunkTVRPABD2_js.i}});Object.defineProperty(exports,"edgeDistance",{enumerable:true,get:function(){return chunkTVRPABD2_js.n}});Object.defineProperty(exports,"getEffectiveNodeBounds",{enumerable:true,get:function(){return chunkTVRPABD2_js.j}});Object.defineProperty(exports,"hitTest",{enumerable:true,get:function(){return chunkTVRPABD2_js.k}});Object.defineProperty(exports,"hitTestRect",{enumerable:true,get:function(){return chunkTVRPABD2_js.l}});Object.defineProperty(exports,"nearestPort",{enumerable:true,get:function(){return chunkTVRPABD2_js.m}});Object.defineProperty(exports,"pointInRect",{enumerable:true,get:function(){return chunkTVRPABD2_js.h}});Object.defineProperty(exports,"setupPanZoom",{enumerable:true,get:function(){return chunkTVRPABD2_js.a}});Object.defineProperty(exports,"circularLayout",{enumerable:true,get:function(){return chunkNHGHIK6R_js.a}});Object.defineProperty(exports,"gridLayout",{enumerable:true,get:function(){return chunkNHGHIK6R_js.b}});Object.defineProperty(exports,"deserializeScene",{enumerable:true,get:function(){return chunkE3Z7QMXI_js.b}});Object.defineProperty(exports,"serializeScene",{enumerable:true,get:function(){return chunkE3Z7QMXI_js.a}});Object.defineProperty(exports,"findPortNearest",{enumerable:true,get:function(){return chunkT5O2PDL6_js.d}});Object.defineProperty(exports,"getEquidistantPorts",{enumerable:true,get:function(){return chunkT5O2PDL6_js.b}});Object.defineProperty(exports,"registerPerimeterStrategy",{enumerable:true,get:function(){return chunkT5O2PDL6_js.a}});Object.defineProperty(exports,"toNodePorts",{enumerable:true,get:function(){return chunkT5O2PDL6_js.c}});Object.defineProperty(exports,"CoreIconRegistry",{enumerable:true,get:function(){return chunkOZAFCKI7_js.a}});Object.defineProperty(exports,"computeNodeAnchorAtAngle",{enumerable:true,get:function(){return chunkOZAFCKI7_js.j}});Object.defineProperty(exports,"defaultCoreIconRegistry",{enumerable:true,get:function(){return chunkOZAFCKI7_js.b}});Object.defineProperty(exports,"findPort",{enumerable:true,get:function(){return chunkOZAFCKI7_js.m}});Object.defineProperty(exports,"getDefaultPorts",{enumerable:true,get:function(){return chunkOZAFCKI7_js.k}});Object.defineProperty(exports,"getNodeBoundingBox",{enumerable:true,get:function(){return chunkOZAFCKI7_js.o}});Object.defineProperty(exports,"getNodePorts",{enumerable:true,get:function(){return chunkOZAFCKI7_js.l}});Object.defineProperty(exports,"registerIcon",{enumerable:true,get:function(){return chunkOZAFCKI7_js.c}});Object.defineProperty(exports,"resolvePortPosition",{enumerable:true,get:function(){return chunkOZAFCKI7_js.n}});exports.CoreAnimationRegistry=Ye;exports.CoreOverlayRegistry=Xe;exports.DEFAULT_VIZ_CSS=Ze;exports.OverlayBuilder=ze;exports.RichLabelBuilderImpl=Se;exports.buildOverlaySpecs=Tr;exports.collectEdgeLabels=Be;exports.coreCircleOverlay=Mt;exports.coreDataPointOverlay=Dt;exports.coreFlowAnimation=Lt;exports.coreGridLabelsOverlay=Tt;exports.coreGroupOverlay=Ht;exports.coreRectOverlay=Gt;exports.coreSignalOverlay=Rt;exports.coreTextOverlay=It;exports.defaultCoreAnimationRegistry=ke;exports.defaultCoreOverlayRegistry=ye;exports.resolveDasharray=be;exports.resolveEdgeGeometry=zi;exports.resolveEdgeGeometryFromData=fr;exports.resolveEdgeLabelPosition=we;exports.viz=Ei;
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {d,b,f as f$1,a as a$1}from'./chunk-GNCIBZ6S.mjs';export{c as AnimationBuilder,a as OVERLAY_RUNTIME_DIRTY,d as buildAnimationSpec,f as createBuilderPlayback,e as createScenePlayback,g as playAnimationSpec}from'./chunk-GNCIBZ6S.mjs';import {g,e,f,c,a,j}from'./chunk-
|
|
1
|
+
import {d,b,f as f$1,a as a$1}from'./chunk-GNCIBZ6S.mjs';export{c as AnimationBuilder,a as OVERLAY_RUNTIME_DIRTY,d as buildAnimationSpec,f as createBuilderPlayback,e as createScenePlayback,g as playAnimationSpec}from'./chunk-GNCIBZ6S.mjs';import {g,e,f,c,a,j}from'./chunk-46IHGFPN.mjs';export{d as angleBetween,e as computeEdgeEndpoints,f as computeEdgePath,g as computeSelfLoop,i as distanceSquare,n as edgeDistance,j as getEffectiveNodeBounds,k as hitTest,l as hitTestRect,m as nearestPort,h as pointInRect,a as setupPanZoom}from'./chunk-46IHGFPN.mjs';export{a as circularLayout,b as gridLayout}from'./chunk-L3BMSH63.mjs';export{b as deserializeScene,a as serializeScene}from'./chunk-FXFCCGJT.mjs';export{d as findPortNearest,b as getEquidistantPorts,a as registerPerimeterStrategy,c as toNodePorts}from'./chunk-5JIM7AZ4.mjs';import {d as d$1,f as f$2,g as g$1,b as b$1,o,e as e$1,h}from'./chunk-I5FQBS5N.mjs';export{a as CoreIconRegistry,j as computeNodeAnchorAtAngle,b as defaultCoreIconRegistry,m as findPort,k as getDefaultPorts,o as getNodeBoundingBox,l as getNodePorts,c as registerIcon,n as resolvePortPosition}from'./chunk-I5FQBS5N.mjs';var Ze=`
|
|
2
2
|
.viz-canvas {
|
|
3
3
|
width: 100%;
|
|
4
4
|
height: 100%;
|
package/dist/interaction.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkTVRPABD2_js=require('./chunk-TVRPABD2.js');require('./chunk-OZAFCKI7.js');Object.defineProperty(exports,"TOOLTIP_CSS",{enumerable:true,get:function(){return chunkTVRPABD2_js.b}});Object.defineProperty(exports,"distanceSquare",{enumerable:true,get:function(){return chunkTVRPABD2_js.i}});Object.defineProperty(exports,"edgeDistance",{enumerable:true,get:function(){return chunkTVRPABD2_js.n}});Object.defineProperty(exports,"getEffectiveNodeBounds",{enumerable:true,get:function(){return chunkTVRPABD2_js.j}});Object.defineProperty(exports,"hitTest",{enumerable:true,get:function(){return chunkTVRPABD2_js.k}});Object.defineProperty(exports,"hitTestRect",{enumerable:true,get:function(){return chunkTVRPABD2_js.l}});Object.defineProperty(exports,"nearestPort",{enumerable:true,get:function(){return chunkTVRPABD2_js.m}});Object.defineProperty(exports,"pointInRect",{enumerable:true,get:function(){return chunkTVRPABD2_js.h}});Object.defineProperty(exports,"setupPanZoom",{enumerable:true,get:function(){return chunkTVRPABD2_js.a}});Object.defineProperty(exports,"setupTooltip",{enumerable:true,get:function(){return chunkTVRPABD2_js.c}});
|
package/dist/interaction.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{b as TOOLTIP_CSS,i as distanceSquare,n as edgeDistance,j as getEffectiveNodeBounds,k as hitTest,l as hitTestRect,m as nearestPort,h as pointInRect,a as setupPanZoom,c as setupTooltip}from'./chunk-
|
|
1
|
+
export{b as TOOLTIP_CSS,i as distanceSquare,n as edgeDistance,j as getEffectiveNodeBounds,k as hitTest,l as hitTestRect,m as nearestPort,h as pointInRect,a as setupPanZoom,c as setupTooltip}from'./chunk-46IHGFPN.mjs';import'./chunk-I5FQBS5N.mjs';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vizcraft",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.0",
|
|
4
4
|
"description": "A fluent, type-safe SVG scene builder for composing nodes, edges, animations, and overlays with incremental DOM updates and no framework dependency.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"visualization",
|
package/dist/chunk-4QBUPKXK.mjs
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import {d,o,e,j as j$1,n,i}from'./chunk-I5FQBS5N.mjs';function vt(t,e,o,n={}){let r=n.minZoom??.1,i=n.maxZoom??5,l=n.zoomOnWheel??true,c=n.panOnDrag??true,s=1,u={x:0,y:0},a=false,d={x:0,y:0},b=[],E=()=>{b.forEach(y=>y({zoom:s,pan:u}));},$=()=>{e.setAttribute("transform",`translate(${u.x}, ${u.y}) scale(${s})`),E();},x=(y,m)=>{let P=Math.max(r,Math.min(i,y));if(P!==s){if(m){let w=P/s;u.x=m.x-(m.x-u.x)*w,u.y=m.y-(m.y-u.y)*w;}s=P,$();}},p=y=>{u={...y},$();},g=(y=20)=>{if(!o.viewBox)return null;let m=t.getBoundingClientRect();if(m.width===0||m.height===0)return null;let P=m.width-y*2,w=m.height-y*2,C=P/o.viewBox.w,N=w/o.viewBox.h,A=Math.min(C,N);A=Math.max(r,Math.min(i,A));let H=o.viewBox.w*A,tt=o.viewBox.h*A,et={x:(m.width-H)/2,y:(m.height-tt)/2};return {zoom:A,pan:et}},h=(y=20)=>{let m=g(y);m&&(s=m.zoom,u=m.pan,$());},V=()=>{n.initialZoom==="fit"||n.initialZoom===void 0?h():(x(n.initialZoom),p({x:0,y:0}));},z=y=>{let m=o.nodes.find(A=>A.id===y);if(!m)return;let P=t.getBoundingClientRect();if(P.width===0||P.height===0)return;let w=Math.max(r,Math.min(i,2)),C=P.width/2-m.pos.x*w,N=P.height/2-m.pos.y*w;s=w,u={x:C,y:N},$();},T=y=>{if(!l)return;y.preventDefault();let m=.002,P=-y.deltaY;y.deltaMode===1&&(P*=15);let w=Math.exp(P*m),C=s*w,N=t.getBoundingClientRect(),A={x:y.clientX-N.left,y:y.clientY-N.top};x(C,A);},S=y=>{if(!c)return;let m=y.target;(m.closest("[data-viz-role]")||m.closest(".viz-node")||m.closest(".viz-edge"))&&m!==t&&m!==e||(y.preventDefault(),a=true,d={x:y.clientX,y:y.clientY},t.setPointerCapture(y.pointerId),t.style.cursor="grabbing");},R=y=>{if(!a||!c)return;y.preventDefault();let m=y.clientX-d.x,P=y.clientY-d.y;u.x+=m,u.y+=P,d={x:y.clientX,y:y.clientY},$();},v=y=>{!a||!c||(a=false,t.releasePointerCapture(y.pointerId),t.style.cursor="");},f=y=>{let m=y.target;m.closest("[data-viz-role]")||m.closest(".viz-node")||m.closest(".viz-edge")||h();},L={passive:false};t.addEventListener("wheel",T,L),t.addEventListener("pointerdown",S),t.addEventListener("pointermove",R),t.addEventListener("pointerup",v),t.addEventListener("pointercancel",v),t.addEventListener("dblclick",f);let M=()=>{t.removeEventListener("wheel",T),t.removeEventListener("pointerdown",S),t.removeEventListener("pointermove",R),t.removeEventListener("pointerup",v),t.removeEventListener("pointercancel",v),t.removeEventListener("dblclick",f),b.length=0;};return requestAnimationFrame(()=>{V();}),{get zoom(){return s},get pan(){return {...u}},setZoom:x,setPan:p,fitToContent:h,zoomToNode:z,reset:V,onChange(y){return b.push(y),()=>{let m=b.indexOf(y);m!==-1&&b.splice(m,1);}},destroy:M}}var nt=`
|
|
2
|
-
.viz-tooltip {
|
|
3
|
-
position: absolute;
|
|
4
|
-
pointer-events: none;
|
|
5
|
-
z-index: 9999;
|
|
6
|
-
max-width: 320px;
|
|
7
|
-
padding: 8px 12px;
|
|
8
|
-
border-radius: 6px;
|
|
9
|
-
font-size: 13px;
|
|
10
|
-
line-height: 1.4;
|
|
11
|
-
background: var(--viz-tooltip-bg, #1a1a2e);
|
|
12
|
-
color: var(--viz-tooltip-fg, #e2e8f0);
|
|
13
|
-
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
|
|
14
|
-
opacity: 0;
|
|
15
|
-
transition: opacity 0.15s ease-out;
|
|
16
|
-
white-space: pre-wrap;
|
|
17
|
-
word-break: break-word;
|
|
18
|
-
box-sizing: border-box;
|
|
19
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
20
|
-
}
|
|
21
|
-
.viz-tooltip[data-visible="true"] {
|
|
22
|
-
opacity: 1;
|
|
23
|
-
}
|
|
24
|
-
.viz-tooltip-title {
|
|
25
|
-
font-weight: 600;
|
|
26
|
-
margin-bottom: 4px;
|
|
27
|
-
font-size: 14px;
|
|
28
|
-
}
|
|
29
|
-
.viz-tooltip-section {
|
|
30
|
-
display: flex;
|
|
31
|
-
gap: 6px;
|
|
32
|
-
padding: 2px 0;
|
|
33
|
-
}
|
|
34
|
-
.viz-tooltip-section-label {
|
|
35
|
-
color: var(--viz-tooltip-label, #94a3b8);
|
|
36
|
-
flex-shrink: 0;
|
|
37
|
-
}
|
|
38
|
-
.viz-tooltip-section-label::after {
|
|
39
|
-
content: ':';
|
|
40
|
-
}
|
|
41
|
-
.viz-tooltip-section-value {
|
|
42
|
-
color: var(--viz-tooltip-fg, #e2e8f0);
|
|
43
|
-
}
|
|
44
|
-
`;function W(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function ot(t){if(typeof t=="string")return `<span>${W(t)}</span>`;let e="";t.title&&(e+=`<div class="viz-tooltip-title">${W(t.title)}</div>`);for(let o of t.sections)e+=`<div class="viz-tooltip-section"><span class="viz-tooltip-section-label">${W(o.label)}</span><span class="viz-tooltip-section-value">${W(o.value)}</span></div>`;return e}function it(t,e,o){let n=e.getBoundingClientRect(),r=o.getBoundingClientRect(),i=8,l=t.offsetWidth,c=t.offsetHeight,s=n.left-r.left+n.width/2-l/2,u=n.top-r.top-c-i;u<0&&(u=n.bottom-r.top+i),s<0&&(s=4),s+l>o.clientWidth&&(s=o.clientWidth-l-4),t.style.left=`${s}px`,t.style.top=`${u}px`;}function $t(t,e,o,n,r){let i=r?.delay??300,l=o,c=n,s=t.querySelector("style[data-viz-tooltip-css]");s||(s=document.createElement("style"),s.setAttribute("data-viz-tooltip-css",""),s.textContent=nt,t.appendChild(s));let u=document.createElement("div");u.className="viz-tooltip",u.setAttribute("role","tooltip"),u.setAttribute("aria-hidden","true"),t.appendChild(u),getComputedStyle(t).position==="static"&&(t.style.position="relative");let d=null,b=null;function E(v,f){u.innerHTML=ot(f),u.style.display="block",u.setAttribute("data-visible","false"),requestAnimationFrame(()=>{it(u,v,t),u.setAttribute("data-visible","true"),u.setAttribute("aria-hidden","false");});}function $(){d!==null&&(clearTimeout(d),d=null),u.setAttribute("data-visible","false"),u.setAttribute("aria-hidden","true"),b=null;}function x(v){let f=v instanceof Element?v:null;for(;f&&f!==e;){let L=f.getAttribute("data-viz-role");if(L==="compartment-entry"){let y=f.getAttribute("data-entry"),m=f.parentElement;for(;m&&m!==e&&!(m.getAttribute("data-viz-role")==="node-group"&&m.getAttribute("data-id"));)m=m.parentElement;if(m&&y){let P=m.getAttribute("data-id"),w=f.getAttribute("data-compartment");if(P&&w){let A=l.get(P)?.compartments?.find(H=>H.id===w)?.entries?.find(H=>H.id===y);if(A?.tooltip)return {content:A.tooltip,group:f}}}}let M=f.getAttribute("data-id");if(L==="node-group"&&M){let y=l.get(M);return y?.tooltip?{content:y.tooltip,group:f}:null}if(L==="edge-group"&&M){let y=c.get(M);return y?.tooltip?{content:y.tooltip,group:f}:null}f=f.parentElement;}return null}let p=null;function g(v){let f=v instanceof Element?v:null,L=null;for(;f&&f!==e;){if(f.getAttribute("data-viz-role")==="compartment-entry"){L=f;break}f=f.parentElement;}L!==p&&(p&&p.classList.remove("viz-entry-hover"),p=L,p&&p.classList.add("viz-entry-hover"));}function h(v){g(v.target);let f=x(v.target);if(!f)return;let{content:L,group:M}=f;M!==b&&($(),b=M,d=setTimeout(()=>{E(M,L);},i));}function V(v){g(null);let f=x(v.target);f&&f.group===b&&$();}function z(v){g(v.target);let f=x(v.target);(!f||f.group!==b)&&$();}function T(v){let f=x(v.target);f&&($(),b=f.group,E(f.group,f.content));}function S(){$();}function R(v){v.key==="Escape"&&$();}return e.addEventListener("pointerenter",h,true),e.addEventListener("pointerleave",V,true),e.addEventListener("pointermove",z,true),e.addEventListener("focusin",T,true),e.addEventListener("focusout",S,true),e.addEventListener("keydown",R,true),{destroy(){$(),e.removeEventListener("pointerenter",h,true),e.removeEventListener("pointerleave",V,true),e.removeEventListener("pointermove",z,true),e.removeEventListener("focusin",T,true),e.removeEventListener("focusout",S,true),e.removeEventListener("keydown",R,true),u.remove(),s?.remove();},updateData(v,f){l=v,c=f;}}}function rt(t,e){let o=e.x-t.x,n=e.y-t.y;return Math.atan2(n,o)*180/Math.PI}function Q(t,e$1,o$1){let n$1=o$1.anchor??"boundary",r=o$1.fromAt,i$1=o$1.toAt,l=e$1?d(e$1):i$1??{x:0,y:0},c=t?d(t):r??{x:0,y:0},s=o$1.fromAngle,u=o$1.toAngle;if(o$1.straightLine&&t&&e$1){let b=d(t),E=d(e$1),$=o(e(t)),x=o(e(e$1)),p=$.width/2,g=$.height/2,h=x.width/2,V=x.height/2,z=Math.max(b.x-p,E.x-h),T=Math.min(b.x+p,E.x+h),S=Math.max(b.y-g,E.y-V),R=Math.min(b.y+g,E.y+V);if(z<T){let v=(z+T)/2,f=b.y<=E.y,L=Math.atan2(f?g:-g,v-b.x)*180/Math.PI,M=Math.atan2(f?-V:V,v-E.x)*180/Math.PI;(o$1.straightLine===true||o$1.straightLine==="from")&&s===void 0&&(s=L),(o$1.straightLine===true||o$1.straightLine==="to")&&u===void 0&&(u=M);}else if(S<R){let v=(S+R)/2,f=b.x<=E.x,L=Math.atan2(v-b.y,f?p:-p)*180/Math.PI,M=Math.atan2(v-E.y,f?-h:h)*180/Math.PI;(o$1.straightLine===true||o$1.straightLine==="from")&&s===void 0&&(s=L),(o$1.straightLine===true||o$1.straightLine==="to")&&u===void 0&&(u=M);}else {let v=rt(b,E);(o$1.straightLine===true||o$1.straightLine==="from")&&s===void 0&&(s=v),(o$1.straightLine===true||o$1.straightLine==="to")&&u===void 0&&(u=v+180);}}let a;t?s!==void 0?a=j$1(t,s):a=o$1.fromPort?n(t,o$1.fromPort)??i(t,l,n$1):i(t,l,n$1):a=r??{x:0,y:0};let d$1;return e$1?u!==void 0?d$1=j$1(e$1,u):d$1=o$1.toPort?n(e$1,o$1.toPort)??i(e$1,c,n$1):i(e$1,c,n$1):d$1=i$1??{x:0,y:0},{start:a,end:d$1}}function U(t,e,o="straight",n){switch(o){case "curved":return ct(t,e,n);case "orthogonal":return ut(t,e,n);default:return st(t,e,n)}}function st(t,e,o){let n=[t,...o??[],e],r=n.map((l,c)=>c===0?`M ${l.x} ${l.y}`:`L ${l.x} ${l.y}`),i=j(n);return {d:r.join(" "),...i}}function ct(t,e,o){if(o&&o.length>0)return lt(t,e,o);let n=K(t,e),r=`M ${t.x} ${t.y} Q ${n.x} ${n.y} ${e.x} ${e.y}`,i=k(t,n,e,.5),l=k(t,n,e,O),c=k(t,n,e,Z);return {d:r,mid:i,start:l,end:c}}function K(t,e){let o=(t.x+e.x)/2,n=(t.y+e.y)/2,r=e.x-t.x,i=e.y-t.y,l=Math.sqrt(r*r+i*i)||1,c=l*.2;return {x:o+-i/l*c,y:n+r/l*c}}function k(t,e,o,n){let r=1-n;return {x:r*r*t.x+2*r*n*e.x+n*n*o.x,y:r*r*t.y+2*r*n*e.y+n*n*o.y}}function lt(t,e,o){let n=[t,...o,e];if(n.length===2){let c=K(t,e);return {d:`M ${t.x} ${t.y} Q ${c.x} ${c.y} ${e.x} ${e.y}`,mid:k(t,c,e,.5),start:k(t,c,e,O),end:k(t,c,e,Z)}}let r=`M ${n[0].x} ${n[0].y}`,i=.3;for(let c=0;c<n.length-1;c++){let s=n[Math.max(c-1,0)],u=n[c],a=n[c+1],d=n[Math.min(c+2,n.length-1)],b=u.x+(a.x-s.x)*i,E=u.y+(a.y-s.y)*i,$=a.x-(d.x-u.x)*i,x=a.y-(d.y-u.y)*i;r+=` C ${b} ${E}, ${$} ${x}, ${a.x} ${a.y}`;}let l=j(n);return {d:r,...l}}function ut(t,e,o){return o&&o.length>0?dt(t,e,o):at(t,e)}function at(t,e){let o=Math.abs(e.x-t.x),n=Math.abs(e.y-t.y),r,i,l,c;if(o>=n){let s=(t.x+e.x)/2;r=`M ${t.x} ${t.y} L ${s} ${t.y} L ${s} ${e.y} L ${e.x} ${e.y}`;let u=[t,{x:s,y:t.y},{x:s,y:e.y},e];i=I(u,.5),l=I(u,O),c=I(u,Z);}else {let s=(t.y+e.y)/2;r=`M ${t.x} ${t.y} L ${t.x} ${s} L ${e.x} ${s} L ${e.x} ${e.y}`;let u=[t,{x:t.x,y:s},{x:e.x,y:s},e];i=I(u,.5),l=I(u,O),c=I(u,Z);}return {d:r,mid:i,start:l,end:c}}function dt(t,e,o){let n=[t,...o,e],r=`M ${n[0].x} ${n[0].y}`,i=[n[0]];for(let c=1;c<n.length;c++){let s=n[c-1],u=n[c];r+=` L ${u.x} ${s.y} L ${u.x} ${u.y}`,i.push({x:u.x,y:s.y}),i.push(u);}let l=j(i);return {d:r,...l}}var O=.15,Z=.85;function I(t,e){if(t.length===0)return {x:0,y:0};if(t.length===1)return t[0];let o=0;for(let i=1;i<t.length;i++){let l=t[i].x-t[i-1].x,c=t[i].y-t[i-1].y;o+=Math.sqrt(l*l+c*c);}let n=o*e,r=0;for(let i=1;i<t.length;i++){let l=t[i].x-t[i-1].x,c=t[i].y-t[i-1].y,s=Math.sqrt(l*l+c*c);if(r+s>=n){let u=s===0?0:(n-r)/s;return {x:t[i-1].x+l*u,y:t[i-1].y+c*u}}r+=s;}return t[t.length-1]}function j(t){return {start:I(t,O),mid:I(t,.5),end:I(t,Z)}}function ft(t){return t?"w"in t&&"h"in t?{w:t.w,h:t.h}:"r"in t?{w:t.r*2,h:t.r*2}:"rx"in t&&"ry"in t?{w:t.rx*2,h:t.ry*2}:"size"in t?{w:t.size,h:t.size}:{w:60,h:60}:{w:60,h:60}}function Lt(t,e$1){let o=d(t),n=ft(e(t)),r=n.w,i=n.h,l=e$1.loopSide||"top",c=e$1.loopSize||30,s=Math.min(20,(l==="top"||l==="bottom"?r:i)*.8),u="",a,d$1,b,E,$;switch(l){case "top":{let x=o.x-s/2,p=o.y-i/2,g=o.x+s/2,h=o.y-i/2,V=p-c*1.5;u=`M ${x} ${p} C ${x-s/2} ${V}, ${g+s/2} ${V}, ${g} ${h}`,E={x,y:p},$={x:g,y:h},a={x,y:p-c*.2},d$1={x:o.x,y:p-c},b={x:g,y:h-c*.2};break}case "bottom":{let x=o.x-s/2,p=o.y+i/2,g=o.x+s/2,h=o.y+i/2,V=p+c*1.5;u=`M ${x} ${p} C ${x-s/2} ${V}, ${g+s/2} ${V}, ${g} ${h}`,E={x,y:p},$={x:g,y:h},a={x,y:p+c*.2},d$1={x:o.x,y:p+c},b={x:g,y:h+c*.2};break}case "left":{let x=o.x-r/2,p=o.y-s/2,g=o.x-r/2,h=o.y+s/2,V=x-c*1.5;u=`M ${x} ${p} C ${V} ${p-s/2}, ${V} ${h+s/2}, ${g} ${h}`,E={x,y:p},$={x:g,y:h},a={x:x-c*.2,y:p},d$1={x:x-c,y:o.y},b={x:g-c*.2,y:h};break}case "right":{let x=o.x+r/2,p=o.y-s/2,g=o.x+r/2,h=o.y+s/2,V=x+c*1.5;u=`M ${x} ${p} C ${V} ${p-s/2}, ${V} ${h+s/2}, ${g} ${h}`,E={x,y:p},$={x:g,y:h},a={x:x+c*.2,y:p},d$1={x:x+c,y:o.y},b={x:g+c*.2,y:h};break}}return {d:u,start:a,mid:d$1,end:b,exitPoint:E,entryPoint:$}}function yt(t,e){return t.x>=e.x&&t.x<=e.x+e.w&&t.y>=e.y&&t.y<=e.y+e.h}function J(t,e,o){let n=t.x-e.x,r=t.y-e.y;return n*n+r*r<=o*o}function q(t,e){let o=t.x-e.x,n=t.y-e.y;return o*o+n*n}function mt(t,e,o){let n=q(e,o);if(n===0)return q(t,e);let r=((t.x-e.x)*(o.x-e.x)+(t.y-e.y)*(o.y-e.y))/n;return r=Math.max(0,Math.min(1,r)),q(t,{x:e.x+r*(o.x-e.x),y:e.y+r*(o.y-e.y)})}function pt(t,e=10){let o=t.match(/[a-zA-Z][^a-zA-Z]*/g);if(!o)return [];let n=[],r=0,i=0,l=0,c=0;for(let s of o){let u=s[0],a=s.substring(1).trim().split(/[\s,]+/).filter(d=>d!=="").map(parseFloat);switch(u.toUpperCase()){case "M":a.length>=2&&(r=a[0],i=a[1],l=r,c=i,n.push({x:r,y:i}));break;case "L":for(let d=0;d<a.length;d+=2)r=a[d],i=a[d+1],n.push({x:r,y:i});break;case "Q":for(let d=0;d<a.length;d+=4){let b=a[d],E=a[d+1],$=a[d+2],x=a[d+3];for(let p=1;p<=e;p++){let g=p/e,h=1-g,V=h*h*r+2*h*g*b+g*g*$,z=h*h*i+2*h*g*E+g*g*x;n.push({x:V,y:z});}r=$,i=x;}break;case "C":for(let d=0;d<a.length;d+=6){let b=a[d],E=a[d+1],$=a[d+2],x=a[d+3],p=a[d+4],g=a[d+5];for(let h=1;h<=e;h++){let V=h/e,z=1-V,T=z*z*z*r+3*z*z*V*b+3*z*V*V*$+V*V*V*p,S=z*z*z*i+3*z*z*V*E+3*z*V*V*x+V*V*V*g;n.push({x:T,y:S});}r=p,i=g;}break;case "Z":r=l,i=c,n.push({x:r,y:i});break}}return n}function xt(t,e){if(e.length===0)return 1/0;if(e.length===1)return Math.sqrt(q(t,e[0]));let o=1/0;for(let n=0;n<e.length-1;n++){let r=mt(t,e[n],e[n+1]);r<o&&(o=r);}return Math.sqrt(o)}function X(t){let e=0,o=0,n=t.shape,r=t.runtime?.x??t.pos.x,i=t.runtime?.y??t.pos.y;return t.runtime?.width!==void 0?e=t.runtime.width:"w"in n?e=n.w:"r"in n?e=n.r*2:"rx"in n&&"ry"in n?(e=n.rx*2,o=n.ry*2):"size"in n?e=n.size:"outerR"in n&&(e=n.outerR*2),t.runtime?.height!==void 0?o=t.runtime.height:"h"in n?o=n.h:o===0&&(o=e),{x:r-e/2,y:i-o/2,w:e,h:o}}function ht(t,e){let o=X(t);if(!yt(e,o))return false;let n=t.shape,r={x:t.runtime?.x??t.pos.x,y:t.runtime?.y??t.pos.y};if(n.kind==="circle"){let i=t.runtime?.radius??n.r;return J(e,r,i)}if(n.kind==="ellipse"){let i=t.runtime?.width!==void 0?t.runtime.width/2:n.rx,l=t.runtime?.height!==void 0?t.runtime.height/2:n.ry,c=e.x-r.x,s=e.y-r.y;return c*c/(i*i)+s*s/(l*l)<=1}return true}function gt(t,e){if(!t.compartments||t.compartments.length===0)return;let o={x:t.runtime?.x??t.pos.x,y:t.runtime?.y??t.pos.y},n=X(t),r=o.y-n.h/2,i=e.y-r;for(let l of t.compartments)if(i>=l.y&&i<l.y+l.height)return l.id}function Vt(t,e,o){if(!t.compartments)return;let n=t.compartments.find(s=>s.id===e);if(!n?.entries||n.entries.length===0)return;let r={x:t.runtime?.x??t.pos.x,y:t.runtime?.y??t.pos.y},i=X(t),l=r.y-i.h/2,c=o.y-l-n.y;for(let s of n.entries)if(c>=s.y&&c<s.y+s.height)return s.id}function At(t,e,o={}){let{edgeTolerance:n=5,portTolerance:r=10}=o;for(let i of t.nodes){if(!i.ports||i.ports.length===0)continue;let l={x:i.runtime?.x??i.pos.x,y:i.runtime?.y??i.pos.y};for(let c of i.ports){let s={x:l.x+c.offset.x,y:l.y+c.offset.y};if(J(e,s,r))return {type:"port",nodeId:i.id,portId:c.id,position:s}}}for(let i=t.nodes.length-1;i>=0;i--){let l=t.nodes[i];if(ht(l,e)){let c=gt(l,e),s=c!==void 0?Vt(l,c,e):void 0;return {type:"node",id:l.id,compartmentId:c,entryId:s}}}for(let i=t.edges.length-1;i>=0;i--){let l=t.edges[i],c=bt(t,l.id,e),s=l.hitArea??n;if(c<=s)return {type:"edge",id:l.id}}return null}function Tt(t,e){let o=[];for(let n of t.nodes){let r=X(n);!(r.x>e.x+e.w||r.x+r.w<e.x||r.y>e.y+e.h||r.y+r.h<e.y)&&o.push({type:"node",id:n.id});}for(let n of t.edges){let r=n.from?t.nodes.find(E=>E.id===n.from):void 0,i=n.to?t.nodes.find(E=>E.id===n.to):void 0;if(n.from&&!r||n.to&&!i||!r&&!n.fromAt&&!i&&!n.toAt)continue;let l=r?{x:r.runtime?.x??r.pos.x,y:r.runtime?.y??r.pos.y}:n.fromAt??{x:0,y:0},c=i?{x:i.runtime?.x??i.pos.x,y:i.runtime?.y??i.pos.y}:n.toAt??{x:0,y:0},s=Math.min(l.x,c.x)-10,u=Math.max(l.x,c.x)+10,a=Math.min(l.y,c.y)-10,d=Math.max(l.y,c.y)+10;!(s>e.x+e.w||u<e.x||a>e.y+e.h||d<e.y)&&o.push({type:"edge",id:n.id});}return o}function St(t,e,o){let{maxDistance:n}=o,r=null,i=n*n;for(let l of t.nodes){if(!l.ports)continue;let c={x:l.runtime?.x??l.pos.x,y:l.runtime?.y??l.pos.y};for(let s of l.ports){let u={x:c.x+s.offset.x,y:c.y+s.offset.y},a=q(e,u);a<=i&&(i=a,r={nodeId:l.id,portId:s.id,position:u,distance:Math.sqrt(a)});}}return r}function bt(t,e,o){let n=t.edges.find(a=>a.id===e);if(!n)return 1/0;let r=n.from?t.nodes.find(a=>a.id===n.from):null,i=n.to?t.nodes.find(a=>a.id===n.to):null;if(n.from&&!r||n.to&&!i||!r&&!n.fromAt&&!i&&!n.toAt)return 1/0;let{start:l,end:c}=Q(r??null,i??null,n),s=U(l,c,n.routing,n.waypoints),u=pt(s.d,10);return xt(o,u)}export{vt as a,nt as b,$t as c,rt as d,Q as e,U as f,Lt as g,yt as h,q as i,X as j,At as k,Tt as l,St as m,bt as n};
|
package/dist/chunk-XOBMAQC3.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
'use strict';var chunkOZAFCKI7_js=require('./chunk-OZAFCKI7.js');function vt(t,e,o,n={}){let r=n.minZoom??.1,i=n.maxZoom??5,l=n.zoomOnWheel??true,c=n.panOnDrag??true,s=1,u={x:0,y:0},a=false,d={x:0,y:0},b=[],E=()=>{b.forEach(y=>y({zoom:s,pan:u}));},$=()=>{e.setAttribute("transform",`translate(${u.x}, ${u.y}) scale(${s})`),E();},x=(y,m)=>{let P=Math.max(r,Math.min(i,y));if(P!==s){if(m){let w=P/s;u.x=m.x-(m.x-u.x)*w,u.y=m.y-(m.y-u.y)*w;}s=P,$();}},p=y=>{u={...y},$();},g=(y=20)=>{if(!o.viewBox)return null;let m=t.getBoundingClientRect();if(m.width===0||m.height===0)return null;let P=m.width-y*2,w=m.height-y*2,C=P/o.viewBox.w,N=w/o.viewBox.h,A=Math.min(C,N);A=Math.max(r,Math.min(i,A));let H=o.viewBox.w*A,tt=o.viewBox.h*A,et={x:(m.width-H)/2,y:(m.height-tt)/2};return {zoom:A,pan:et}},h=(y=20)=>{let m=g(y);m&&(s=m.zoom,u=m.pan,$());},V=()=>{n.initialZoom==="fit"||n.initialZoom===void 0?h():(x(n.initialZoom),p({x:0,y:0}));},z=y=>{let m=o.nodes.find(A=>A.id===y);if(!m)return;let P=t.getBoundingClientRect();if(P.width===0||P.height===0)return;let w=Math.max(r,Math.min(i,2)),C=P.width/2-m.pos.x*w,N=P.height/2-m.pos.y*w;s=w,u={x:C,y:N},$();},T=y=>{if(!l)return;y.preventDefault();let m=.002,P=-y.deltaY;y.deltaMode===1&&(P*=15);let w=Math.exp(P*m),C=s*w,N=t.getBoundingClientRect(),A={x:y.clientX-N.left,y:y.clientY-N.top};x(C,A);},S=y=>{if(!c)return;let m=y.target;(m.closest("[data-viz-role]")||m.closest(".viz-node")||m.closest(".viz-edge"))&&m!==t&&m!==e||(y.preventDefault(),a=true,d={x:y.clientX,y:y.clientY},t.setPointerCapture(y.pointerId),t.style.cursor="grabbing");},R=y=>{if(!a||!c)return;y.preventDefault();let m=y.clientX-d.x,P=y.clientY-d.y;u.x+=m,u.y+=P,d={x:y.clientX,y:y.clientY},$();},v=y=>{!a||!c||(a=false,t.releasePointerCapture(y.pointerId),t.style.cursor="");},f=y=>{let m=y.target;m.closest("[data-viz-role]")||m.closest(".viz-node")||m.closest(".viz-edge")||h();},L={passive:false};t.addEventListener("wheel",T,L),t.addEventListener("pointerdown",S),t.addEventListener("pointermove",R),t.addEventListener("pointerup",v),t.addEventListener("pointercancel",v),t.addEventListener("dblclick",f);let M=()=>{t.removeEventListener("wheel",T),t.removeEventListener("pointerdown",S),t.removeEventListener("pointermove",R),t.removeEventListener("pointerup",v),t.removeEventListener("pointercancel",v),t.removeEventListener("dblclick",f),b.length=0;};return requestAnimationFrame(()=>{V();}),{get zoom(){return s},get pan(){return {...u}},setZoom:x,setPan:p,fitToContent:h,zoomToNode:z,reset:V,onChange(y){return b.push(y),()=>{let m=b.indexOf(y);m!==-1&&b.splice(m,1);}},destroy:M}}var nt=`
|
|
2
|
-
.viz-tooltip {
|
|
3
|
-
position: absolute;
|
|
4
|
-
pointer-events: none;
|
|
5
|
-
z-index: 9999;
|
|
6
|
-
max-width: 320px;
|
|
7
|
-
padding: 8px 12px;
|
|
8
|
-
border-radius: 6px;
|
|
9
|
-
font-size: 13px;
|
|
10
|
-
line-height: 1.4;
|
|
11
|
-
background: var(--viz-tooltip-bg, #1a1a2e);
|
|
12
|
-
color: var(--viz-tooltip-fg, #e2e8f0);
|
|
13
|
-
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
|
|
14
|
-
opacity: 0;
|
|
15
|
-
transition: opacity 0.15s ease-out;
|
|
16
|
-
white-space: pre-wrap;
|
|
17
|
-
word-break: break-word;
|
|
18
|
-
box-sizing: border-box;
|
|
19
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
20
|
-
}
|
|
21
|
-
.viz-tooltip[data-visible="true"] {
|
|
22
|
-
opacity: 1;
|
|
23
|
-
}
|
|
24
|
-
.viz-tooltip-title {
|
|
25
|
-
font-weight: 600;
|
|
26
|
-
margin-bottom: 4px;
|
|
27
|
-
font-size: 14px;
|
|
28
|
-
}
|
|
29
|
-
.viz-tooltip-section {
|
|
30
|
-
display: flex;
|
|
31
|
-
gap: 6px;
|
|
32
|
-
padding: 2px 0;
|
|
33
|
-
}
|
|
34
|
-
.viz-tooltip-section-label {
|
|
35
|
-
color: var(--viz-tooltip-label, #94a3b8);
|
|
36
|
-
flex-shrink: 0;
|
|
37
|
-
}
|
|
38
|
-
.viz-tooltip-section-label::after {
|
|
39
|
-
content: ':';
|
|
40
|
-
}
|
|
41
|
-
.viz-tooltip-section-value {
|
|
42
|
-
color: var(--viz-tooltip-fg, #e2e8f0);
|
|
43
|
-
}
|
|
44
|
-
`;function W(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function ot(t){if(typeof t=="string")return `<span>${W(t)}</span>`;let e="";t.title&&(e+=`<div class="viz-tooltip-title">${W(t.title)}</div>`);for(let o of t.sections)e+=`<div class="viz-tooltip-section"><span class="viz-tooltip-section-label">${W(o.label)}</span><span class="viz-tooltip-section-value">${W(o.value)}</span></div>`;return e}function it(t,e,o){let n=e.getBoundingClientRect(),r=o.getBoundingClientRect(),i=8,l=t.offsetWidth,c=t.offsetHeight,s=n.left-r.left+n.width/2-l/2,u=n.top-r.top-c-i;u<0&&(u=n.bottom-r.top+i),s<0&&(s=4),s+l>o.clientWidth&&(s=o.clientWidth-l-4),t.style.left=`${s}px`,t.style.top=`${u}px`;}function $t(t,e,o,n,r){let i=r?.delay??300,l=o,c=n,s=t.querySelector("style[data-viz-tooltip-css]");s||(s=document.createElement("style"),s.setAttribute("data-viz-tooltip-css",""),s.textContent=nt,t.appendChild(s));let u=document.createElement("div");u.className="viz-tooltip",u.setAttribute("role","tooltip"),u.setAttribute("aria-hidden","true"),t.appendChild(u),getComputedStyle(t).position==="static"&&(t.style.position="relative");let d=null,b=null;function E(v,f){u.innerHTML=ot(f),u.style.display="block",u.setAttribute("data-visible","false"),requestAnimationFrame(()=>{it(u,v,t),u.setAttribute("data-visible","true"),u.setAttribute("aria-hidden","false");});}function $(){d!==null&&(clearTimeout(d),d=null),u.setAttribute("data-visible","false"),u.setAttribute("aria-hidden","true"),b=null;}function x(v){let f=v instanceof Element?v:null;for(;f&&f!==e;){let L=f.getAttribute("data-viz-role");if(L==="compartment-entry"){let y=f.getAttribute("data-entry"),m=f.parentElement;for(;m&&m!==e&&!(m.getAttribute("data-viz-role")==="node-group"&&m.getAttribute("data-id"));)m=m.parentElement;if(m&&y){let P=m.getAttribute("data-id"),w=f.getAttribute("data-compartment");if(P&&w){let A=l.get(P)?.compartments?.find(H=>H.id===w)?.entries?.find(H=>H.id===y);if(A?.tooltip)return {content:A.tooltip,group:f}}}}let M=f.getAttribute("data-id");if(L==="node-group"&&M){let y=l.get(M);return y?.tooltip?{content:y.tooltip,group:f}:null}if(L==="edge-group"&&M){let y=c.get(M);return y?.tooltip?{content:y.tooltip,group:f}:null}f=f.parentElement;}return null}let p=null;function g(v){let f=v instanceof Element?v:null,L=null;for(;f&&f!==e;){if(f.getAttribute("data-viz-role")==="compartment-entry"){L=f;break}f=f.parentElement;}L!==p&&(p&&p.classList.remove("viz-entry-hover"),p=L,p&&p.classList.add("viz-entry-hover"));}function h(v){g(v.target);let f=x(v.target);if(!f)return;let{content:L,group:M}=f;M!==b&&($(),b=M,d=setTimeout(()=>{E(M,L);},i));}function V(v){g(null);let f=x(v.target);f&&f.group===b&&$();}function z(v){g(v.target);let f=x(v.target);(!f||f.group!==b)&&$();}function T(v){let f=x(v.target);f&&($(),b=f.group,E(f.group,f.content));}function S(){$();}function R(v){v.key==="Escape"&&$();}return e.addEventListener("pointerenter",h,true),e.addEventListener("pointerleave",V,true),e.addEventListener("pointermove",z,true),e.addEventListener("focusin",T,true),e.addEventListener("focusout",S,true),e.addEventListener("keydown",R,true),{destroy(){$(),e.removeEventListener("pointerenter",h,true),e.removeEventListener("pointerleave",V,true),e.removeEventListener("pointermove",z,true),e.removeEventListener("focusin",T,true),e.removeEventListener("focusout",S,true),e.removeEventListener("keydown",R,true),u.remove(),s?.remove();},updateData(v,f){l=v,c=f;}}}function rt(t,e){let o=e.x-t.x,n=e.y-t.y;return Math.atan2(n,o)*180/Math.PI}function Q(t,e,o){let n=o.anchor??"boundary",r=o.fromAt,i=o.toAt,l=e?chunkOZAFCKI7_js.d(e):i??{x:0,y:0},c=t?chunkOZAFCKI7_js.d(t):r??{x:0,y:0},s=o.fromAngle,u=o.toAngle;if(o.straightLine&&t&&e){let b=chunkOZAFCKI7_js.d(t),E=chunkOZAFCKI7_js.d(e),$=chunkOZAFCKI7_js.o(chunkOZAFCKI7_js.e(t)),x=chunkOZAFCKI7_js.o(chunkOZAFCKI7_js.e(e)),p=$.width/2,g=$.height/2,h=x.width/2,V=x.height/2,z=Math.max(b.x-p,E.x-h),T=Math.min(b.x+p,E.x+h),S=Math.max(b.y-g,E.y-V),R=Math.min(b.y+g,E.y+V);if(z<T){let v=(z+T)/2,f=b.y<=E.y,L=Math.atan2(f?g:-g,v-b.x)*180/Math.PI,M=Math.atan2(f?-V:V,v-E.x)*180/Math.PI;(o.straightLine===true||o.straightLine==="from")&&s===void 0&&(s=L),(o.straightLine===true||o.straightLine==="to")&&u===void 0&&(u=M);}else if(S<R){let v=(S+R)/2,f=b.x<=E.x,L=Math.atan2(v-b.y,f?p:-p)*180/Math.PI,M=Math.atan2(v-E.y,f?-h:h)*180/Math.PI;(o.straightLine===true||o.straightLine==="from")&&s===void 0&&(s=L),(o.straightLine===true||o.straightLine==="to")&&u===void 0&&(u=M);}else {let v=rt(b,E);(o.straightLine===true||o.straightLine==="from")&&s===void 0&&(s=v),(o.straightLine===true||o.straightLine==="to")&&u===void 0&&(u=v+180);}}let a;t?s!==void 0?a=chunkOZAFCKI7_js.j(t,s):a=o.fromPort?chunkOZAFCKI7_js.n(t,o.fromPort)??chunkOZAFCKI7_js.i(t,l,n):chunkOZAFCKI7_js.i(t,l,n):a=r??{x:0,y:0};let d;return e?u!==void 0?d=chunkOZAFCKI7_js.j(e,u):d=o.toPort?chunkOZAFCKI7_js.n(e,o.toPort)??chunkOZAFCKI7_js.i(e,c,n):chunkOZAFCKI7_js.i(e,c,n):d=i??{x:0,y:0},{start:a,end:d}}function U(t,e,o="straight",n){switch(o){case "curved":return ct(t,e,n);case "orthogonal":return ut(t,e,n);default:return st(t,e,n)}}function st(t,e,o){let n=[t,...o??[],e],r=n.map((l,c)=>c===0?`M ${l.x} ${l.y}`:`L ${l.x} ${l.y}`),i=j(n);return {d:r.join(" "),...i}}function ct(t,e,o){if(o&&o.length>0)return lt(t,e,o);let n=K(t,e),r=`M ${t.x} ${t.y} Q ${n.x} ${n.y} ${e.x} ${e.y}`,i=k(t,n,e,.5),l=k(t,n,e,O),c=k(t,n,e,Z);return {d:r,mid:i,start:l,end:c}}function K(t,e){let o=(t.x+e.x)/2,n=(t.y+e.y)/2,r=e.x-t.x,i=e.y-t.y,l=Math.sqrt(r*r+i*i)||1,c=l*.2;return {x:o+-i/l*c,y:n+r/l*c}}function k(t,e,o,n){let r=1-n;return {x:r*r*t.x+2*r*n*e.x+n*n*o.x,y:r*r*t.y+2*r*n*e.y+n*n*o.y}}function lt(t,e,o){let n=[t,...o,e];if(n.length===2){let c=K(t,e);return {d:`M ${t.x} ${t.y} Q ${c.x} ${c.y} ${e.x} ${e.y}`,mid:k(t,c,e,.5),start:k(t,c,e,O),end:k(t,c,e,Z)}}let r=`M ${n[0].x} ${n[0].y}`,i=.3;for(let c=0;c<n.length-1;c++){let s=n[Math.max(c-1,0)],u=n[c],a=n[c+1],d=n[Math.min(c+2,n.length-1)],b=u.x+(a.x-s.x)*i,E=u.y+(a.y-s.y)*i,$=a.x-(d.x-u.x)*i,x=a.y-(d.y-u.y)*i;r+=` C ${b} ${E}, ${$} ${x}, ${a.x} ${a.y}`;}let l=j(n);return {d:r,...l}}function ut(t,e,o){return o&&o.length>0?dt(t,e,o):at(t,e)}function at(t,e){let o=Math.abs(e.x-t.x),n=Math.abs(e.y-t.y),r,i,l,c;if(o>=n){let s=(t.x+e.x)/2;r=`M ${t.x} ${t.y} L ${s} ${t.y} L ${s} ${e.y} L ${e.x} ${e.y}`;let u=[t,{x:s,y:t.y},{x:s,y:e.y},e];i=I(u,.5),l=I(u,O),c=I(u,Z);}else {let s=(t.y+e.y)/2;r=`M ${t.x} ${t.y} L ${t.x} ${s} L ${e.x} ${s} L ${e.x} ${e.y}`;let u=[t,{x:t.x,y:s},{x:e.x,y:s},e];i=I(u,.5),l=I(u,O),c=I(u,Z);}return {d:r,mid:i,start:l,end:c}}function dt(t,e,o){let n=[t,...o,e],r=`M ${n[0].x} ${n[0].y}`,i=[n[0]];for(let c=1;c<n.length;c++){let s=n[c-1],u=n[c];r+=` L ${u.x} ${s.y} L ${u.x} ${u.y}`,i.push({x:u.x,y:s.y}),i.push(u);}let l=j(i);return {d:r,...l}}var O=.15,Z=.85;function I(t,e){if(t.length===0)return {x:0,y:0};if(t.length===1)return t[0];let o=0;for(let i=1;i<t.length;i++){let l=t[i].x-t[i-1].x,c=t[i].y-t[i-1].y;o+=Math.sqrt(l*l+c*c);}let n=o*e,r=0;for(let i=1;i<t.length;i++){let l=t[i].x-t[i-1].x,c=t[i].y-t[i-1].y,s=Math.sqrt(l*l+c*c);if(r+s>=n){let u=s===0?0:(n-r)/s;return {x:t[i-1].x+l*u,y:t[i-1].y+c*u}}r+=s;}return t[t.length-1]}function j(t){return {start:I(t,O),mid:I(t,.5),end:I(t,Z)}}function ft(t){return t?"w"in t&&"h"in t?{w:t.w,h:t.h}:"r"in t?{w:t.r*2,h:t.r*2}:"rx"in t&&"ry"in t?{w:t.rx*2,h:t.ry*2}:"size"in t?{w:t.size,h:t.size}:{w:60,h:60}:{w:60,h:60}}function Lt(t,e){let o=chunkOZAFCKI7_js.d(t),n=ft(chunkOZAFCKI7_js.e(t)),r=n.w,i=n.h,l=e.loopSide||"top",c=e.loopSize||30,s=Math.min(20,(l==="top"||l==="bottom"?r:i)*.8),u="",a,d,b,E,$;switch(l){case "top":{let x=o.x-s/2,p=o.y-i/2,g=o.x+s/2,h=o.y-i/2,V=p-c*1.5;u=`M ${x} ${p} C ${x-s/2} ${V}, ${g+s/2} ${V}, ${g} ${h}`,E={x,y:p},$={x:g,y:h},a={x,y:p-c*.2},d={x:o.x,y:p-c},b={x:g,y:h-c*.2};break}case "bottom":{let x=o.x-s/2,p=o.y+i/2,g=o.x+s/2,h=o.y+i/2,V=p+c*1.5;u=`M ${x} ${p} C ${x-s/2} ${V}, ${g+s/2} ${V}, ${g} ${h}`,E={x,y:p},$={x:g,y:h},a={x,y:p+c*.2},d={x:o.x,y:p+c},b={x:g,y:h+c*.2};break}case "left":{let x=o.x-r/2,p=o.y-s/2,g=o.x-r/2,h=o.y+s/2,V=x-c*1.5;u=`M ${x} ${p} C ${V} ${p-s/2}, ${V} ${h+s/2}, ${g} ${h}`,E={x,y:p},$={x:g,y:h},a={x:x-c*.2,y:p},d={x:x-c,y:o.y},b={x:g-c*.2,y:h};break}case "right":{let x=o.x+r/2,p=o.y-s/2,g=o.x+r/2,h=o.y+s/2,V=x+c*1.5;u=`M ${x} ${p} C ${V} ${p-s/2}, ${V} ${h+s/2}, ${g} ${h}`,E={x,y:p},$={x:g,y:h},a={x:x+c*.2,y:p},d={x:x+c,y:o.y},b={x:g+c*.2,y:h};break}}return {d:u,start:a,mid:d,end:b,exitPoint:E,entryPoint:$}}function yt(t,e){return t.x>=e.x&&t.x<=e.x+e.w&&t.y>=e.y&&t.y<=e.y+e.h}function J(t,e,o){let n=t.x-e.x,r=t.y-e.y;return n*n+r*r<=o*o}function q(t,e){let o=t.x-e.x,n=t.y-e.y;return o*o+n*n}function mt(t,e,o){let n=q(e,o);if(n===0)return q(t,e);let r=((t.x-e.x)*(o.x-e.x)+(t.y-e.y)*(o.y-e.y))/n;return r=Math.max(0,Math.min(1,r)),q(t,{x:e.x+r*(o.x-e.x),y:e.y+r*(o.y-e.y)})}function pt(t,e=10){let o=t.match(/[a-zA-Z][^a-zA-Z]*/g);if(!o)return [];let n=[],r=0,i=0,l=0,c=0;for(let s of o){let u=s[0],a=s.substring(1).trim().split(/[\s,]+/).filter(d=>d!=="").map(parseFloat);switch(u.toUpperCase()){case "M":a.length>=2&&(r=a[0],i=a[1],l=r,c=i,n.push({x:r,y:i}));break;case "L":for(let d=0;d<a.length;d+=2)r=a[d],i=a[d+1],n.push({x:r,y:i});break;case "Q":for(let d=0;d<a.length;d+=4){let b=a[d],E=a[d+1],$=a[d+2],x=a[d+3];for(let p=1;p<=e;p++){let g=p/e,h=1-g,V=h*h*r+2*h*g*b+g*g*$,z=h*h*i+2*h*g*E+g*g*x;n.push({x:V,y:z});}r=$,i=x;}break;case "C":for(let d=0;d<a.length;d+=6){let b=a[d],E=a[d+1],$=a[d+2],x=a[d+3],p=a[d+4],g=a[d+5];for(let h=1;h<=e;h++){let V=h/e,z=1-V,T=z*z*z*r+3*z*z*V*b+3*z*V*V*$+V*V*V*p,S=z*z*z*i+3*z*z*V*E+3*z*V*V*x+V*V*V*g;n.push({x:T,y:S});}r=p,i=g;}break;case "Z":r=l,i=c,n.push({x:r,y:i});break}}return n}function xt(t,e){if(e.length===0)return 1/0;if(e.length===1)return Math.sqrt(q(t,e[0]));let o=1/0;for(let n=0;n<e.length-1;n++){let r=mt(t,e[n],e[n+1]);r<o&&(o=r);}return Math.sqrt(o)}function X(t){let e=0,o=0,n=t.shape,r=t.runtime?.x??t.pos.x,i=t.runtime?.y??t.pos.y;return t.runtime?.width!==void 0?e=t.runtime.width:"w"in n?e=n.w:"r"in n?e=n.r*2:"rx"in n&&"ry"in n?(e=n.rx*2,o=n.ry*2):"size"in n?e=n.size:"outerR"in n&&(e=n.outerR*2),t.runtime?.height!==void 0?o=t.runtime.height:"h"in n?o=n.h:o===0&&(o=e),{x:r-e/2,y:i-o/2,w:e,h:o}}function ht(t,e){let o=X(t);if(!yt(e,o))return false;let n=t.shape,r={x:t.runtime?.x??t.pos.x,y:t.runtime?.y??t.pos.y};if(n.kind==="circle"){let i=t.runtime?.radius??n.r;return J(e,r,i)}if(n.kind==="ellipse"){let i=t.runtime?.width!==void 0?t.runtime.width/2:n.rx,l=t.runtime?.height!==void 0?t.runtime.height/2:n.ry,c=e.x-r.x,s=e.y-r.y;return c*c/(i*i)+s*s/(l*l)<=1}return true}function gt(t,e){if(!t.compartments||t.compartments.length===0)return;let o={x:t.runtime?.x??t.pos.x,y:t.runtime?.y??t.pos.y},n=X(t),r=o.y-n.h/2,i=e.y-r;for(let l of t.compartments)if(i>=l.y&&i<l.y+l.height)return l.id}function Vt(t,e,o){if(!t.compartments)return;let n=t.compartments.find(s=>s.id===e);if(!n?.entries||n.entries.length===0)return;let r={x:t.runtime?.x??t.pos.x,y:t.runtime?.y??t.pos.y},i=X(t),l=r.y-i.h/2,c=o.y-l-n.y;for(let s of n.entries)if(c>=s.y&&c<s.y+s.height)return s.id}function At(t,e,o={}){let{edgeTolerance:n=5,portTolerance:r=10}=o;for(let i of t.nodes){if(!i.ports||i.ports.length===0)continue;let l={x:i.runtime?.x??i.pos.x,y:i.runtime?.y??i.pos.y};for(let c of i.ports){let s={x:l.x+c.offset.x,y:l.y+c.offset.y};if(J(e,s,r))return {type:"port",nodeId:i.id,portId:c.id,position:s}}}for(let i=t.nodes.length-1;i>=0;i--){let l=t.nodes[i];if(ht(l,e)){let c=gt(l,e),s=c!==void 0?Vt(l,c,e):void 0;return {type:"node",id:l.id,compartmentId:c,entryId:s}}}for(let i=t.edges.length-1;i>=0;i--){let l=t.edges[i],c=bt(t,l.id,e),s=l.hitArea??n;if(c<=s)return {type:"edge",id:l.id}}return null}function Tt(t,e){let o=[];for(let n of t.nodes){let r=X(n);!(r.x>e.x+e.w||r.x+r.w<e.x||r.y>e.y+e.h||r.y+r.h<e.y)&&o.push({type:"node",id:n.id});}for(let n of t.edges){let r=n.from?t.nodes.find(E=>E.id===n.from):void 0,i=n.to?t.nodes.find(E=>E.id===n.to):void 0;if(n.from&&!r||n.to&&!i||!r&&!n.fromAt&&!i&&!n.toAt)continue;let l=r?{x:r.runtime?.x??r.pos.x,y:r.runtime?.y??r.pos.y}:n.fromAt??{x:0,y:0},c=i?{x:i.runtime?.x??i.pos.x,y:i.runtime?.y??i.pos.y}:n.toAt??{x:0,y:0},s=Math.min(l.x,c.x)-10,u=Math.max(l.x,c.x)+10,a=Math.min(l.y,c.y)-10,d=Math.max(l.y,c.y)+10;!(s>e.x+e.w||u<e.x||a>e.y+e.h||d<e.y)&&o.push({type:"edge",id:n.id});}return o}function St(t,e,o){let{maxDistance:n}=o,r=null,i=n*n;for(let l of t.nodes){if(!l.ports)continue;let c={x:l.runtime?.x??l.pos.x,y:l.runtime?.y??l.pos.y};for(let s of l.ports){let u={x:c.x+s.offset.x,y:c.y+s.offset.y},a=q(e,u);a<=i&&(i=a,r={nodeId:l.id,portId:s.id,position:u,distance:Math.sqrt(a)});}}return r}function bt(t,e,o){let n=t.edges.find(a=>a.id===e);if(!n)return 1/0;let r=n.from?t.nodes.find(a=>a.id===n.from):null,i=n.to?t.nodes.find(a=>a.id===n.to):null;if(n.from&&!r||n.to&&!i||!r&&!n.fromAt&&!i&&!n.toAt)return 1/0;let{start:l,end:c}=Q(r??null,i??null,n),s=U(l,c,n.routing,n.waypoints),u=pt(s.d,10);return xt(o,u)}exports.a=vt;exports.b=nt;exports.c=$t;exports.d=rt;exports.e=Q;exports.f=U;exports.g=Lt;exports.h=yt;exports.i=q;exports.j=X;exports.k=At;exports.l=Tt;exports.m=St;exports.n=bt;
|