vizcraft 1.10.0 → 1.10.1
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/dist/index.js +8 -8
- package/dist/index.mjs +8 -8
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# vizcraft
|
|
2
2
|
|
|
3
|
+
## 1.10.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#120](https://github.com/ChipiKaf/vizcraft/pull/120) [`df0fc64`](https://github.com/ChipiKaf/vizcraft/commit/df0fc644dbe07e4d6b8a0aae04c554f69efcc993) Thanks [@ChipiKaf](https://github.com/ChipiKaf)! - Fix entry height calculation to account for text wrapping when `maxWidth` is set on compartment entries. Entries that wrap to multiple lines now correctly compute their height and y-offsets, preventing overlap with subsequent entries.
|
|
8
|
+
|
|
3
9
|
## 1.10.0
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
package/dist/index.js
CHANGED
|
@@ -103,16 +103,16 @@
|
|
|
103
103
|
stroke-linejoin: round;
|
|
104
104
|
stroke-width: 2;
|
|
105
105
|
}
|
|
106
|
-
`;var Ye=class{nodeAnims=new Map;edgeAnims=new Map;constructor(){}registerNode(e,t){return this.nodeAnims.set(e,t),this}registerEdge(e,t){return this.edgeAnims.set(e,t),this}getNodeRenderer(e){return this.nodeAnims.get(e)}getEdgeRenderer(e){return this.edgeAnims.get(e)}},
|
|
106
|
+
`;var Ye=class{nodeAnims=new Map;edgeAnims=new Map;constructor(){}registerNode(e,t){return this.nodeAnims.set(e,t),this}registerEdge(e,t){return this.edgeAnims.set(e,t),this}getNodeRenderer(e){return this.nodeAnims.get(e)}getEdgeRenderer(e){return this.edgeAnims.get(e)}},_t={getClass:()=>"viz-anim-flow",getStyle:({spec:r})=>({"--viz-anim-duration":r.params?.duration??"2s"})},ke=new Ye().registerEdge("flow",_t);var Xe=class{overlays=new Map;register(e,t){return this.overlays.set(e,t),this}get(e){return this.overlays.get(e)}},Rt={render:({spec:r,nodesById:e})=>{let{from:t,to:i,progress:l}=r.params,a=e.get(t),d=e.get(i);if(!a||!d)return "";let c=a.pos.x+(d.pos.x-a.pos.x)*l,n=a.pos.y+(d.pos.y-a.pos.y)*l,u=Math.abs(r.params.magnitude??1);u>1&&(u=1);let f=2+u*4,g=r.className??"viz-signal";return `
|
|
107
107
|
<g transform="translate(${c}, ${n})">
|
|
108
|
-
<g class="${
|
|
108
|
+
<g class="${g}">
|
|
109
109
|
<circle r="10" fill="transparent" stroke="none" />
|
|
110
|
-
<circle r="${
|
|
110
|
+
<circle r="${f}" class="viz-signal-shape" />
|
|
111
111
|
</g>
|
|
112
112
|
</g>
|
|
113
|
-
`}},_t={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(([v,m])=>{let h=parseInt(v,10),E=t.padding.x+h*u+u/2,$=r.className||"viz-grid-label";f+=`<text x="${E}" y="${c}" class="${$}" text-anchor="middle">${m}</text>`;}),d&&Object.entries(d).forEach(([v,m])=>{let h=parseInt(v,10),E=t.padding.y+h*g+g/2,$=r.className||"viz-grid-label";f+=`<text x="${n}" y="${E}" dy=".35em" class="${$}" text-anchor="middle">${m}</text>`;}),f}},Rt={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,v=n.pos.x+g,m=n.pos.y+f,h=a.get(c.id);h||(h=document.createElementNS(l,"circle"),h.setAttribute("data-id",c.id),h.setAttribute("r","6"),t.appendChild(h)),h.setAttribute("cx",String(v)),h.setAttribute("cy",String(m));let E=r.className??"viz-data-point";h.getAttribute("class")!==E&&h.setAttribute("class",E);}),a.forEach((c,n)=>{d.has(n)||c.remove();});}},Dt={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",v=a!==void 0?` rx="${a}"`:"",m=d!==void 0?` ry="${d}"`:"",h=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}"${v}${m}${h} 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:v}=r.params,m=r.className??"viz-overlay-rect",h=e.querySelector("rect");h||(h=document.createElementNS(t,"rect"),e.appendChild(h)),h.setAttribute("x",String(i)),h.setAttribute("y",String(l)),h.setAttribute("width",String(a)),h.setAttribute("height",String(d)),g===void 0?(h.setAttribute("fill","#3b82f6"),h.setAttribute("fill-opacity","0.12")):(h.setAttribute("fill",g),h.removeAttribute("fill-opacity")),f===void 0?(h.setAttribute("stroke","#3b82f6"),h.setAttribute("stroke-opacity","0.9")):(h.setAttribute("stroke",f),h.removeAttribute("stroke-opacity")),h.setAttribute("stroke-width",String(v??3)),c!==void 0?h.setAttribute("rx",String(c)):h.removeAttribute("rx"),n!==void 0?h.setAttribute("ry",String(n)):h.removeAttribute("ry"),u!==void 0?h.setAttribute("opacity",String(u)):h.removeAttribute("opacity"),h.setAttribute("class",m);}},Gt={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);}},Lt={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}"`:"",v=d!==void 0?` font-size="${d}"`:"",m=c!==void 0?` font-weight="${c}"`:"",h=n!==void 0?` text-anchor="${n}"`:"",E=u!==void 0?` dominant-baseline="${u}"`:"";return `<text x="${e}" y="${t}" fill="${a??"#111"}"${f}${v}${m}${h}${E} 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,v=r.className??"viz-overlay-text",m=e.querySelector("text");m||(m=document.createElementNS(t,"text"),e.appendChild(m)),m.setAttribute("x",String(i)),m.setAttribute("y",String(l)),m.setAttribute("fill",c??"#111"),d!==void 0?m.setAttribute("opacity",String(d)):m.removeAttribute("opacity"),n!==void 0?m.setAttribute("font-size",String(n)):m.removeAttribute("font-size"),u!==void 0?m.setAttribute("font-weight",String(u)):m.removeAttribute("font-weight"),g!==void 0?m.setAttribute("text-anchor",g):m.removeAttribute("text-anchor"),f!==void 0?m.setAttribute("dominant-baseline",f):m.removeAttribute("dominant-baseline"),m.setAttribute("class",v),m.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 v=vt(r.progress??0),m=xt(g),h=xt(f);l=m.x+(h.x-m.x)*v+t,a=m.y+(h.y-m.y)*v+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 Tt={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((v,m)=>{let h=g.get(v.id);if(!h)return;let E={spec:v,nodesById:e,edgesById:t,scene:i,registry:g},$=v.key?`key:${v.key}`:`idx:${m}:${v.id}`;f+=`<g data-viz-role="overlay-child" data-overlay-child-id="${$}">`,f+=h.render(E),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(m=>{if(m instanceof SVGGElement){let h=m.getAttribute("data-overlay-child-id");h&&f.set(h,m);}});let v=new Set;c.forEach((m,h)=>{let E=d.get(m.id);if(!E)return;let $=m.key?`key:${m.key}`:`idx:${h}:${m.id}`;v.add($);let b=f.get($);b||(b=document.createElementNS(g,"g"),b.setAttribute("data-viz-role","overlay-child"),b.setAttribute("data-overlay-child-id",$),a.appendChild(b));let w={spec:m,nodesById:e,edgesById:t,scene:i,registry:d};E.update?E.update(w,b):b.innerHTML=E.render(w);}),f.forEach((m,h)=>{v.has(h)||m.remove();});}},ye=new Xe().register("signal",Pt).register("grid-labels",_t).register("data-points",Rt).register("rect",Dt).register("circle",Gt).register("text",Lt).register("group",Tt);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 Pr(r){let e=new ze;return r(e),e.build()}var Mt={solid:"",dashed:"8, 4",dotted:"2, 4","dash-dot":"8, 4, 2, 4"};function be(r){return !r||r==="solid"?"":Mt[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",Te={dx:2,dy:2,blur:4,color:"rgba(0,0,0,0.2)"};function It(r){return {dx:r.dx??Te.dx,dy:r.dy??Te.dy,blur:r.blur??Te.blur,color:r.color??Te.color}}function Ht(r){let e=r.color.replace(/[^a-zA-Z0-9]/g,"_");return `viz-shadow-${r.dx}-${r.dy}-${r.blur}-${e}`}function Wt(r,e){let t=It(e),i=Ht(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 qt(r){return `viz-sketch-${r}`}function Ft(r,e){let t=(r^e*2654435761)>>>0|1;return t^=t<<13,t^=t>>>17,t^=t<<5,(t>>>0)/4294967296}function Ce(r,e,t,i){return t+Ft(r,e)*(i-t)}function At(r,e){let t=qt(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=Ce(e,1,.009,.015).toFixed(4),c=Ce(e,2,2.5,4).toFixed(1),n=Ce(e,3,3,5).toFixed(1),u=Ce(e,4,.3,1.6).toFixed(2),g=Ce(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 v=document.createElementNS(X,"feTurbulence");v.setAttribute("type","fractalNoise"),v.setAttribute("baseFrequency",d),v.setAttribute("numOctaves","2"),v.setAttribute("seed",String(a)),v.setAttribute("result","n2"),l.appendChild(v);let m=document.createElementNS(X,"feDisplacementMap");m.setAttribute("in","SourceGraphic"),m.setAttribute("in2","n1"),m.setAttribute("scale",c),m.setAttribute("xChannelSelector","R"),m.setAttribute("yChannelSelector","G"),m.setAttribute("result","s1"),l.appendChild(m);let h=document.createElementNS(X,"feDisplacementMap");h.setAttribute("in","SourceGraphic"),h.setAttribute("in2","n2"),h.setAttribute("scale",n),h.setAttribute("xChannelSelector","G"),h.setAttribute("yChannelSelector","R"),h.setAttribute("result","s2"),l.appendChild(h);let E=document.createElementNS(X,"feOffset");E.setAttribute("in","s2"),E.setAttribute("dx",u),E.setAttribute("dy",g),E.setAttribute("result","s2off"),l.appendChild(E);let $=document.createElementNS(X,"feComposite");$.setAttribute("in","s1"),$.setAttribute("in2","s2off"),$.setAttribute("operator","over"),l.appendChild($),i.appendChild(l);}}return t}function Kt(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 jt(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}-${jt(e)}`:`${i}${l}`}function Ut(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 kt(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=Ut(t,e);c&&d.appendChild(c),a.appendChild(d);}}return l}function Ne(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,v=r.querySelector('[data-viz-layer="nodes"]')||r.querySelector(".viz-layer-nodes");if(v){let h=Array.from(v.querySelectorAll("g[data-id]"));for(let E of h){let $=E.getAttribute("data-id");if(!$)continue;t.set($,E);let b=E.querySelector('[data-viz-role="node-shape"]')||E.querySelector(".viz-node-shape");b&&i.set($,b);let w=E.querySelector('[data-viz-role="node-label"]')||E.querySelector(".viz-node-label");w&&l.set($,w);let _=E.querySelector('[data-viz-role="node-image"]')||E.querySelector(".viz-node-image");_&&a.set($,_);let B=E.querySelector('[data-viz-role="node-icon"]')||E.querySelector(".viz-node-icon");B&&d.set($,B);let s=E.querySelector('[data-viz-role="node-svg"]')||E.querySelector(".viz-node-svg");s&&c.set($,s);}}let m=r.querySelector('[data-viz-layer="edges"]')||r.querySelector(".viz-layer-edges");if(m){let h=Array.from(m.querySelectorAll("g[data-id]"));for(let E of h){let $=E.getAttribute("data-id");if(!$)continue;n.set($,E);let b=E.querySelector('[data-viz-role="edge-line"]')||E.querySelector(".viz-edge");b&&u.set($,b);let w=E.querySelector('[data-viz-role="edge-hit"]')||E.querySelector(".viz-edge-hit");w&&g.set($,w);let _=Array.from(E.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 Zt(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:v}=chunkOZAFCKI7_js.d(n);if(n.parentId){let B=i.get(n.parentId);B&&(f+=B.dx,v+=B.dy);}let m=chunkOZAFCKI7_js.e(n);chunkOZAFCKI7_js.g(g,m,{x:f,y:v});let{w:h,h:E}=Zt(m);if(h>0&&E>0){let B=e.nodeImagesById.get(n.id);if(B&&n.image){let S=Je(f,v,h,E,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,v,h,E,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,v,h,E,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 m&&"h"in m){let B=u.querySelector('[data-viz-role="container-header"]');if(B){let s=m.w,x=m.h,S=v-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=v+(n.label.dy||0);if(n.container?.headerHeight&&"h"in m&&!n.label.dy){let S=m.h;s=v-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=Wt(e.svg,n.style.shadow);g.setAttribute("filter",`url(#${B})`);}else g.removeAttribute("filter");if(n.style?.sketch||r.sketch?.enabled){let B=Kt(n.style,n.id),s=At(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} ${v}) rotate(${s}) scale(${B}) translate(${-f} ${-v})`);}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(v+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,v=n.to?t.get(n.to)??null:null;if(n.from&&!f||n.to&&!v||!f&&!n.fromAt&&!v&&!n.toAt)continue;let m;if(f&&v&&f===v)m=chunkHBGEN4P6_js.f(f,n);else {let b=chunkHBGEN4P6_js.d(f,v,n);m=chunkHBGEN4P6_js.e(b.start,b.end,n.routing,n.waypoints);}if(l){let b=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 chunkHBGEN4P6_js.f(_,w).d;let s=chunkHBGEN4P6_js.d(_,B,w);return chunkHBGEN4P6_js.e(s.start,s.end,w.routing,w.waypoints).d};try{let w=l(n,r,b);typeof w=="string"&&w&&(m.d=w);}catch(w){console.warn(`RuntimePatcher: edge path resolver threw for edge ${n.id}`,w);}}if(g.setAttribute("d",m.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 b=n.style?.stroke?kt(e.svg,n.style.stroke,n.markerEnd,"end"):Qe(n.markerEnd,void 0,"end");g.setAttribute("marker-end",`url(#${b})`);}else g.removeAttribute("marker-end");if(n.markerStart&&n.markerStart!=="none"){let b=n.style?.stroke?kt(e.svg,n.style.stroke,n.markerStart,"start"):Qe(n.markerStart,void 0,"start");g.setAttribute("marker-start",`url(#${b})`);}else g.removeAttribute("marker-start");let h=e.edgeHitsById.get(n.id);h&&h.setAttribute("d",m.d);let E=e.edgeLabelsById.get(n.id);if(E){let b=Be(n);E.forEach((w,_)=>{let B=b[_];if(!B)return;let s=we(B,m);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 b=0;for(let B=0;B<n.id.length;B++)b=Math.imul(31,b)+n.id.charCodeAt(B)|0;let w=Math.abs(b),_=At(e.svg,w);g.setAttribute("filter",`url(#${_})`),u.classList.contains("viz-sketch")||u.classList.add("viz-sketch");}else {let b=g.getAttribute("filter");b&&b.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((v,m)=>(v.zIndex||0)-(m.zIndex||0));let g=e.nodeGroupsById.get(n);if(!g)continue;let f=g.querySelector(':scope > [data-viz-role="container-children"]');if(f){let v=f.firstElementChild;for(let m of u){let h=e.nodeGroupsById.get(m.id);h&&(v!==h?f.insertBefore(h,v):v=v.nextElementSibling);}}}}function Yt(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 Xt=1.2;function ue(r,e,t,i={}){let{className:l="",fill:a,fontSize:d,fontWeight:c,fontFamily:n,textAnchor:u="middle",dominantBaseline:g="middle",maxWidth:f,lineHeight:v=Xt,verticalAlign:m="middle",overflow:h}=i,E=12;if(typeof d=="number")E=d;else if(typeof d=="string"){let G=parseFloat(d);isNaN(G)||(E=G);}let $=typeof t!="string",b=[],w=[];if($)w=Jt(t.tokens);else if(b=Yt(t,f,E),f&&h&&h!=="visible")if(h==="ellipsis"&&b.length>2){let G=b[1];G&&(b=[b[0],G.substring(0,Math.max(0,G.length-3))+"..."]);}else h==="clip"&&b.length>2&&(b=[b[0],b[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:b.length,x=0;m==="middle"?x=-((s-1)*v)/2:m==="bottom"?x=-((s-1)*v):m==="top"&&(x=0);let S=$?w.map((G,o)=>{let C=Et(o,x,v),A=G.map(F=>Qt(F)).join("");return `<tspan data-viz-role="text-line" x="${r}" dy="${C}">${A}</tspan>`}):b.map((G,o)=>{let C=Et(o,x,v);return `<tspan data-viz-role="text-line" x="${r}" dy="${C}">${tt(G)}</tspan>`});return `<text x="${r}" y="${e}" class="${l}"${B}>${S.join("")}</text>`}function Et(r,e,t){return r===0?e===0?"0":`${e}em`:`${t}em`}function Jt(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 Qt(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(" "):""}>${tt(r.text)}</tspan>`;return r.href?`<a href="${$e(r.href)}">${l}</a>`:l}function $e(r){return tt(r)}function tt(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});t.height!==void 0&&i.height(t.height);});}var er=30,rt=16,it=10;function tr(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){let a=l.label&&typeof l.label.fontSize=="number"?l.label.fontSize:rt;i+=a*(l.label?.lineHeight??1.2);}return i}if(!r.label)return er;let e=(r.label.text.match(/\n/g)?.length??0)+1,t=typeof r.label.fontSize=="number"?r.label.fontSize:rt;return e*t*(r.label.lineHeight??1.2)+it*2}function rr(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=tr(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 v=(g.label&&typeof g.label.fontSize=="number"?g.label.fontSize:rt)*(g.label?.lineHeight??1.2),m={id:g.id,y:u,height:v,text:g.text};return g.label&&(m.label=g.label),g.onClick&&(m.onClick=g.onClick),g.tooltip&&(m.tooltip=g.tooltip),u+=v,m});}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}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}};return this._pending.entries.push({id:e,text:t,label:l,onClick:i?.onClick,tooltip:i?.tooltip}),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=rr(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.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}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 ir(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="${ir(e.color)}" flood-opacity="1"/></filter>`}function ve(r){return `viz-sketch-${r}`}function nr(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+nr(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 Re(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 sr(r){return typeof r=="object"&&r!==null&&"then"in r&&typeof r.then=="function"}function or(r){return r.replace(/[^a-zA-Z0-9]/g,"_")}function ge(r,e,t="end"){if(r==="none")return "";let i=`viz-${r}`,l=t==="start"?"-start":"";return e?`${i}${l}-${or(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 fe(r){return r.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}var lr={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=lr[r];if(!l)return "";let a=fe(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 Ae(r,e,t,i){let{x:l,y:a}=chunkOZAFCKI7_js.d(r),d=chunkHBGEN4P6_js.i(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 wt(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 ke=new WeakMap,qe=new WeakMap;function ar(r,e){Object.entries(e).forEach(([t,i])=>{i===void 0?r.removeAttribute(t):r.setAttribute(t,String(i));});}function dr(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=Ne(i,{edgePathResolver:this._edgePathResolver});ke.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(sr(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=ke.get(i);l?l.edgePathResolver=e:ke.set(i,Ne(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=chunk5W3PZTNU_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=chunkHBGEN4P6_js.c(e,l,c,n),this._addTooltipA11y(l,i);}let a;if(l&&t?.panZoom){let d=l.querySelector(".viz-viewport");d&&(a=chunkHBGEN4P6_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
|
+
`}},Dt={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,f=(l-t.padding.y*2)/t.rows,g="";return a&&Object.entries(a).forEach(([b,m])=>{let h=parseInt(b,10),k=t.padding.x+h*u+u/2,$=r.className||"viz-grid-label";g+=`<text x="${k}" y="${c}" class="${$}" text-anchor="middle">${m}</text>`;}),d&&Object.entries(d).forEach(([b,m])=>{let h=parseInt(b,10),k=t.padding.y+h*f+f/2,$=r.className||"viz-grid-label";g+=`<text x="${n}" y="${k}" dy=".35em" class="${$}" text-anchor="middle">${m}</text>`;}),g}},Gt={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,f=a.pos.y+n,g=r.className??"viz-data-point";i+=`<circle data-id="${l.id}" cx="${u}" cy="${f}" r="6" class="${g}" />`;}),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),f=(u%5-2)*10,g=(u%3-1)*10,b=n.pos.x+f,m=n.pos.y+g,h=a.get(c.id);h||(h=document.createElementNS(l,"circle"),h.setAttribute("data-id",c.id),h.setAttribute("r","6"),t.appendChild(h)),h.setAttribute("cx",String(b)),h.setAttribute("cy",String(m));let k=r.className??"viz-data-point";h.getAttribute("class")!==k&&h.setAttribute("class",k);}),a.forEach((c,n)=>{d.has(n)||c.remove();});}},Lt={render:({spec:r})=>{let{x:e,y:t,w:i,h:l,rx:a,ry:d,opacity:c,fill:n,stroke:u,strokeWidth:f}=r.params,g=r.className??"viz-overlay-rect",b=a!==void 0?` rx="${a}"`:"",m=d!==void 0?` ry="${d}"`:"",h=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="${f??3}"${b}${m}${h} class="${g}" />`},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:f,stroke:g,strokeWidth:b}=r.params,m=r.className??"viz-overlay-rect",h=e.querySelector("rect");h||(h=document.createElementNS(t,"rect"),e.appendChild(h)),h.setAttribute("x",String(i)),h.setAttribute("y",String(l)),h.setAttribute("width",String(a)),h.setAttribute("height",String(d)),f===void 0?(h.setAttribute("fill","#3b82f6"),h.setAttribute("fill-opacity","0.12")):(h.setAttribute("fill",f),h.removeAttribute("fill-opacity")),g===void 0?(h.setAttribute("stroke","#3b82f6"),h.setAttribute("stroke-opacity","0.9")):(h.setAttribute("stroke",g),h.removeAttribute("stroke-opacity")),h.setAttribute("stroke-width",String(b??3)),c!==void 0?h.setAttribute("rx",String(c)):h.removeAttribute("rx"),n!==void 0?h.setAttribute("ry",String(n)):h.removeAttribute("ry"),u!==void 0?h.setAttribute("opacity",String(u)):h.removeAttribute("opacity"),h.setAttribute("class",m);}},Tt={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,f=r.className??"viz-overlay-circle",g=e.querySelector("circle");g||(g=document.createElementNS(t,"circle"),e.appendChild(g)),g.setAttribute("cx",String(i)),g.setAttribute("cy",String(l)),g.setAttribute("r",String(a)),c===void 0?(g.setAttribute("fill","#3b82f6"),g.setAttribute("fill-opacity","0.12")):(g.setAttribute("fill",c),g.removeAttribute("fill-opacity")),n===void 0?(g.setAttribute("stroke","#3b82f6"),g.setAttribute("stroke-opacity","0.9")):(g.setAttribute("stroke",n),g.removeAttribute("stroke-opacity")),g.setAttribute("stroke-width",String(u??3)),d!==void 0?g.setAttribute("opacity",String(d)):g.removeAttribute("opacity"),g.setAttribute("class",f);}},Mt={render:({spec:r})=>{let{x:e,y:t,text:i,opacity:l,fill:a,fontSize:d,fontWeight:c,textAnchor:n,dominantBaseline:u}=r.params,f=r.className??"viz-overlay-text",g=l!==void 0?` opacity="${l}"`:"",b=d!==void 0?` font-size="${d}"`:"",m=c!==void 0?` font-weight="${c}"`:"",h=n!==void 0?` text-anchor="${n}"`:"",k=u!==void 0?` dominant-baseline="${u}"`:"";return `<text x="${e}" y="${t}" fill="${a??"#111"}"${g}${b}${m}${h}${k} class="${f}">${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:f,dominantBaseline:g}=r.params,b=r.className??"viz-overlay-text",m=e.querySelector("text");m||(m=document.createElementNS(t,"text"),e.appendChild(m)),m.setAttribute("x",String(i)),m.setAttribute("y",String(l)),m.setAttribute("fill",c??"#111"),d!==void 0?m.setAttribute("opacity",String(d)):m.removeAttribute("opacity"),n!==void 0?m.setAttribute("font-size",String(n)):m.removeAttribute("font-size"),u!==void 0?m.setAttribute("font-weight",String(u)):m.removeAttribute("font-weight"),f!==void 0?m.setAttribute("text-anchor",f):m.removeAttribute("text-anchor"),g!==void 0?m.setAttribute("dominant-baseline",g):m.removeAttribute("dominant-baseline"),m.setAttribute("class",b),m.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 f=e.get(r.from),g=e.get(r.to);if(f&&g){let b=vt(r.progress??0),m=xt(f),h=xt(g);l=m.x+(h.x-m.x)*b+t,a=m.y+(h.y-m.y)*b+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 It={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}"`:"",f=l;if(!f)return `<g transform="${n}"${u}></g>`;let g=`<g transform="${n}"${u}>`;return a.forEach((b,m)=>{let h=f.get(b.id);if(!h)return;let k={spec:b,nodesById:e,edgesById:t,scene:i,registry:f},$=b.key?`key:${b.key}`:`idx:${m}:${b.id}`;g+=`<g data-viz-role="overlay-child" data-overlay-child-id="${$}">`,g+=h.render(k),g+="</g>";}),g+="</g>",g},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 f="http://www.w3.org/2000/svg",g=new Map;Array.from(a.children).forEach(m=>{if(m instanceof SVGGElement){let h=m.getAttribute("data-overlay-child-id");h&&g.set(h,m);}});let b=new Set;c.forEach((m,h)=>{let k=d.get(m.id);if(!k)return;let $=m.key?`key:${m.key}`:`idx:${h}:${m.id}`;b.add($);let v=g.get($);v||(v=document.createElementNS(f,"g"),v.setAttribute("data-viz-role","overlay-child"),v.setAttribute("data-overlay-child-id",$),a.appendChild(v));let w={spec:m,nodesById:e,edgesById:t,scene:i,registry:d};k.update?k.update(w,v):v.innerHTML=k.render(w);}),g.forEach((m,h)=>{b.has(h)||m.remove();});}},ye=new Xe().register("signal",Rt).register("grid-labels",Dt).register("data-points",Gt).register("rect",Lt).register("circle",Tt).register("text",Mt).register("group",It);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 _r(r){let e=new ze;return r(e),e.build()}var Ht={solid:"",dashed:"8, 4",dotted:"2, 4","dash-dot":"8, 4, 2, 4"};function be(r){return !r||r==="solid"?"":Ht[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",Te={dx:2,dy:2,blur:4,color:"rgba(0,0,0,0.2)"};function Wt(r){return {dx:r.dx??Te.dx,dy:r.dy??Te.dy,blur:r.blur??Te.blur,color:r.color??Te.color}}function qt(r){let e=r.color.replace(/[^a-zA-Z0-9]/g,"_");return `viz-shadow-${r.dx}-${r.dy}-${r.blur}-${e}`}function Ft(r,e){let t=Wt(e),i=qt(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 Kt(r){return `viz-sketch-${r}`}function jt(r,e){let t=(r^e*2654435761)>>>0|1;return t^=t<<13,t^=t>>>17,t^=t<<5,(t>>>0)/4294967296}function Ce(r,e,t,i){return t+jt(r,e)*(i-t)}function At(r,e){let t=Kt(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=Ce(e,1,.009,.015).toFixed(4),c=Ce(e,2,2.5,4).toFixed(1),n=Ce(e,3,3,5).toFixed(1),u=Ce(e,4,.3,1.6).toFixed(2),f=Ce(e,5,.2,1.3).toFixed(2),g=document.createElementNS(X,"feTurbulence");g.setAttribute("type","fractalNoise"),g.setAttribute("baseFrequency","0.008"),g.setAttribute("numOctaves","2"),g.setAttribute("seed",String(e)),g.setAttribute("result","n1"),l.appendChild(g);let b=document.createElementNS(X,"feTurbulence");b.setAttribute("type","fractalNoise"),b.setAttribute("baseFrequency",d),b.setAttribute("numOctaves","2"),b.setAttribute("seed",String(a)),b.setAttribute("result","n2"),l.appendChild(b);let m=document.createElementNS(X,"feDisplacementMap");m.setAttribute("in","SourceGraphic"),m.setAttribute("in2","n1"),m.setAttribute("scale",c),m.setAttribute("xChannelSelector","R"),m.setAttribute("yChannelSelector","G"),m.setAttribute("result","s1"),l.appendChild(m);let h=document.createElementNS(X,"feDisplacementMap");h.setAttribute("in","SourceGraphic"),h.setAttribute("in2","n2"),h.setAttribute("scale",n),h.setAttribute("xChannelSelector","G"),h.setAttribute("yChannelSelector","R"),h.setAttribute("result","s2"),l.appendChild(h);let k=document.createElementNS(X,"feOffset");k.setAttribute("in","s2"),k.setAttribute("dx",u),k.setAttribute("dy",f),k.setAttribute("result","s2off"),l.appendChild(k);let $=document.createElementNS(X,"feComposite");$.setAttribute("in","s1"),$.setAttribute("in2","s2off"),$.setAttribute("operator","over"),l.appendChild($),i.appendChild(l);}}return t}function Ut(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 Zt(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}-${Zt(e)}`:`${i}${l}`}function Yt(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 Et(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=Yt(t,e);c&&d.appendChild(c),a.appendChild(d);}}return l}function Ne(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,f=new Map,g=new Map,b=r.querySelector('[data-viz-layer="nodes"]')||r.querySelector(".viz-layer-nodes");if(b){let h=Array.from(b.querySelectorAll("g[data-id]"));for(let k of h){let $=k.getAttribute("data-id");if(!$)continue;t.set($,k);let v=k.querySelector('[data-viz-role="node-shape"]')||k.querySelector(".viz-node-shape");v&&i.set($,v);let w=k.querySelector('[data-viz-role="node-label"]')||k.querySelector(".viz-node-label");w&&l.set($,w);let _=k.querySelector('[data-viz-role="node-image"]')||k.querySelector(".viz-node-image");_&&a.set($,_);let B=k.querySelector('[data-viz-role="node-icon"]')||k.querySelector(".viz-node-icon");B&&d.set($,B);let s=k.querySelector('[data-viz-role="node-svg"]')||k.querySelector(".viz-node-svg");s&&c.set($,s);}}let m=r.querySelector('[data-viz-layer="edges"]')||r.querySelector(".viz-layer-edges");if(m){let h=Array.from(m.querySelectorAll("g[data-id]"));for(let k of h){let $=k.getAttribute("data-id");if(!$)continue;n.set($,k);let v=k.querySelector('[data-viz-role="edge-line"]')||k.querySelector(".viz-edge");v&&u.set($,v);let w=k.querySelector('[data-viz-role="edge-hit"]')||k.querySelector(".viz-edge-hit");w&&f.set($,w);let _=Array.from(k.querySelectorAll('[data-viz-role="edge-label"],.viz-edge-label'));_.length>0&&g.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:f,edgeLabelsById:g}}function Xt(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,f=0,g=0;switch(c){case "above":g=-i/2-a/2;break;case "below":g=i/2+a/2;break;case "left":f=-t/2-l/2;break;case "right":f=t/2+l/2;break;}return {x:r+f-l/2+n,y:e+g-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,f=(n.runtime?.y??n.pos.y)-n.pos.y;(u!==0||f!==0)&&i.set(n.id,{dx:u,dy:f});}for(let n of r.nodes){let u=e.nodeGroupsById.get(n.id),f=e.nodeShapesById.get(n.id);if(!u||!f)continue;let{x:g,y:b}=chunkOZAFCKI7_js.d(n);if(n.parentId){let B=i.get(n.parentId);B&&(g+=B.dx,b+=B.dy);}let m=chunkOZAFCKI7_js.e(n);chunkOZAFCKI7_js.g(f,m,{x:g,y:b});let{w:h,h:k}=Xt(m);if(h>0&&k>0){let B=e.nodeImagesById.get(n.id);if(B&&n.image){let S=Je(g,b,h,k,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(g,b,h,k,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(g,b,h,k,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 m&&"h"in m){let B=u.querySelector('[data-viz-role="container-header"]');if(B){let s=m.w,x=m.h,S=b-x/2+n.container.headerHeight;B.setAttribute("x1",String(g-s/2)),B.setAttribute("y1",String(S)),B.setAttribute("x2",String(g+s/2)),B.setAttribute("y2",String(S));}}let $=e.nodeLabelsById.get(n.id);if($&&n.label){let B=g+(n.label.dx||0),s=b+(n.label.dy||0);if(n.container?.headerHeight&&"h"in m&&!n.label.dy){let S=m.h;s=b-S/2+n.container.headerHeight/2,B=g+(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),f.removeAttribute("opacity")):(u.style.removeProperty("opacity"),n.style?.opacity!==void 0?f.setAttribute("opacity",String(n.style.opacity)):f.removeAttribute("opacity")),n.style?.shadow){let B=Ft(e.svg,n.style.shadow);f.setAttribute("filter",`url(#${B})`);}else f.removeAttribute("filter");if(n.style?.sketch||r.sketch?.enabled){let B=Ut(n.style,n.id),s=At(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(${g} ${b}) rotate(${s}) scale(${B}) translate(${-g} ${-b})`);}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(g+S.offset.x)),s.setAttribute("cy",String(b+S.offset.y)));});}let l=e.edgePathResolver;for(let n of r.edges){let u=e.edgeGroupsById.get(n.id),f=e.edgeLinesById.get(n.id);if(!u||!f)continue;let g=n.from?t.get(n.from)??null:null,b=n.to?t.get(n.to)??null:null;if(n.from&&!g||n.to&&!b||!g&&!n.fromAt&&!b&&!n.toAt)continue;let m;if(g&&b&&g===b)m=chunkHBGEN4P6_js.f(g,n);else {let v=chunkHBGEN4P6_js.d(g,b,n);m=chunkHBGEN4P6_js.e(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 chunkHBGEN4P6_js.f(_,w).d;let s=chunkHBGEN4P6_js.d(_,B,w);return chunkHBGEN4P6_js.e(s.start,s.end,w.routing,w.waypoints).d};try{let w=l(n,r,v);typeof w=="string"&&w&&(m.d=w);}catch(w){console.warn(`RuntimePatcher: edge path resolver threw for edge ${n.id}`,w);}}if(f.setAttribute("d",m.d),n.style?.stroke!==void 0&&(f.style.stroke=n.style.stroke),n.style?.strokeWidth!==void 0&&(f.style.strokeWidth=String(n.style.strokeWidth)),n.style?.fill!==void 0&&(f.style.fill=n.style.fill),n.style?.opacity!==void 0&&(f.style.opacity=String(n.style.opacity)),n.style?.strokeDasharray!==void 0&&(f.style.strokeDasharray=be(n.style.strokeDasharray)),n.markerEnd&&n.markerEnd!=="none"){let v=n.style?.stroke?Et(e.svg,n.style.stroke,n.markerEnd,"end"):Qe(n.markerEnd,void 0,"end");f.setAttribute("marker-end",`url(#${v})`);}else f.removeAttribute("marker-end");if(n.markerStart&&n.markerStart!=="none"){let v=n.style?.stroke?Et(e.svg,n.style.stroke,n.markerStart,"start"):Qe(n.markerStart,void 0,"start");f.setAttribute("marker-start",`url(#${v})`);}else f.removeAttribute("marker-start");let h=e.edgeHitsById.get(n.id);h&&h.setAttribute("d",m.d);let k=e.edgeLabelsById.get(n.id);if(k){let v=Be(n);k.forEach((w,_)=>{let B=v[_];if(!B)return;let s=we(B,m);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?(f.style.strokeDashoffset=String(n.runtime.strokeDashoffset),f.setAttribute("stroke-dashoffset",String(n.runtime.strokeDashoffset))):(f.style.removeProperty("stroke-dashoffset"),f.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),_=At(e.svg,w);f.setAttribute("filter",`url(#${_})`),u.classList.contains("viz-sketch")||u.classList.add("viz-sketch");}else {let v=f.getAttribute("filter");v&&v.startsWith("url(#viz-sketch-")&&f.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 f=e.nodeGroupsById.get(u.id);f&&(n!==f?c.insertBefore(f,n):n=n.nextElementSibling);}}for(let[n,u]of d.entries()){u.sort((b,m)=>(b.zIndex||0)-(m.zIndex||0));let f=e.nodeGroupsById.get(n);if(!f)continue;let g=f.querySelector(':scope > [data-viz-role="container-children"]');if(g){let b=g.firstElementChild;for(let m of u){let h=e.nodeGroupsById.get(m.id);h&&(b!==h?g.insertBefore(h,b):b=b.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 f=n?`${n} ${u}`:u;f.length<=a?n=f:n?(l.push(n),n=u):(l.push(u),n="");}n&&l.push(n);}return l}var Jt=1.2;function ue(r,e,t,i={}){let{className:l="",fill:a,fontSize:d,fontWeight:c,fontFamily:n,textAnchor:u="middle",dominantBaseline:f="middle",maxWidth:g,lineHeight:b=Jt,verticalAlign:m="middle",overflow:h}=i,k=12;if(typeof d=="number")k=d;else if(typeof d=="string"){let G=parseFloat(d);isNaN(G)||(k=G);}let $=typeof t!="string",v=[],w=[];if($)w=Qt(t.tokens);else if(v=tt(t,g,k),g&&h&&h!=="visible")if(h==="ellipsis"&&v.length>2){let G=v[1];G&&(v=[v[0],G.substring(0,Math.max(0,G.length-3))+"..."]);}else h==="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}"`),f&&_.push(`dominant-baseline="${f}"`);let B=_.length>0?" "+_.join(" "):"",s=$?w.length:v.length,x=0;m==="middle"?x=-((s-1)*b)/2:m==="bottom"?x=-((s-1)*b):m==="top"&&(x=0);let S=$?w.map((G,o)=>{let C=kt(o,x,b),A=G.map(F=>er(F)).join("");return `<tspan data-viz-role="text-line" x="${r}" dy="${C}">${A}</tspan>`}):v.map((G,o)=>{let C=kt(o,x,b);return `<tspan data-viz-role="text-line" x="${r}" dy="${C}">${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 Qt(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 er(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});t.height!==void 0&&i.height(t.height);});}var tr=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}function rr(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 tr;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 ir(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=rr(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(f=>{let g=Bt(f),b={id:f.id,y:u,height:g,text:f.text};return f.label&&(b.label=f.label),f.onClick&&(b.onClick=f.onClick),f.tooltip&&(b.tooltip=f.tooltip),u+=g,b});}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}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}};return this._pending.entries.push({id:e,text:t,label:l,onClick:i?.onClick,tooltip:i?.tooltip}),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,f=l.padding.x+e*n,g=l.padding.y+t*u;return i==="center"?(f+=n/2,g+=u/2):i==="end"&&(f+=n,g+=u),this.nodeDef.pos={x:f,y:g},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=ir(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.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}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 nr(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="${nr(e.color)}" flood-opacity="1"/></filter>`}function ve(r){return `viz-sketch-${r}`}function sr(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+sr(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 Re(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 or(r){return typeof r=="object"&&r!==null&&"then"in r&&typeof r.then=="function"}function lr(r){return r.replace(/[^a-zA-Z0-9]/g,"_")}function ge(r,e,t="end"){if(r==="none")return "";let i=`viz-${r}`,l=t==="start"?"-start":"";return e?`${i}${l}-${lr(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 fe(r){return r.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}var ar={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=ar[r];if(!l)return "";let a=fe(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 Ae(r,e,t,i){let{x:l,y:a}=chunkOZAFCKI7_js.d(r),d=chunkHBGEN4P6_js.i(r),c=i?.position??"center",n=i?.dx??0,u=i?.dy??0,f=0,g=0;switch(c){case "above":g=-d.h/2-t/2;break;case "below":g=d.h/2+t/2;break;case "left":f=-d.w/2-e/2;break;case "right":f=d.w/2+e/2;break;}return {x:l+f-e/2+n,y:a+g-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 Ct(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 Ee=new WeakMap,qe=new WeakMap;function dr(r,e){Object.entries(e).forEach(([t,i])=>{i===void 0?r.removeAttribute(t):r.setAttribute(t,String(i));});}function ur(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=Ne(i,{edgePathResolver:this._edgePathResolver});Ee.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(or(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=Ee.get(i);l?l.edgePathResolver=e:Ee.set(i,Ne(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=chunk5W3PZTNU_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=chunkHBGEN4P6_js.c(e,l,c,n),this._addTooltipA11y(l,i);}let a;if(l&&t?.panZoom){let d=l.querySelector(".viz-viewport");d&&(a=chunkHBGEN4P6_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(...chunk5W3PZTNU_js.b(g));qe.get(e)?.stop();let n={version:"viz-anim/1",tweens:d.flatMap(g=>g.tweens)},u=chunk5W3PZTNU_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=ke.get(i);l||(l=Ne(i,{edgePathResolver:this._edgePathResolver}),ke.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(b=>[b.id,b])),n=new Map(t.edges.map(b=>[b.id,b])),u="http://www.w3.org/2000/svg",g=Array.from(a.children).filter(b=>b.tagName==="g"),f=new Map;g.forEach(b=>{let w=b.getAttribute("data-overlay-id");w&&f.set(w,b);});let v=d.length===f.size,m=!v,h=[];if(!m)for(let b of d){let w=b.key||b.id;if(!f.has(w)){m=true;break}b[chunk5W3PZTNU_js.a]&&h.push(b);}if(!m&&h.length===0)return;let E=new Set;(m?d:h).forEach(b=>{let w=ye.get(b.id);if(!w)return;let _=b.key||b.id;E.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-${b.id}${b.className?` ${b.className}`:""}`;B.getAttribute("class")!==s&&B.setAttribute("class",s);let S={spec:b,nodesById:c,edgesById:n,scene:t,registry:ye};w.update?w.update(S,B):B.innerHTML=w.render(S),delete b[chunk5W3PZTNU_js.a];}),v||g.forEach(b=>{let w=b.getAttribute("data-overlay-id");w&&!E.has(w)&&b.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 C=document.createElementNS(n,"defs"),A=new Set,F=new Map;a.forEach(p=>{let N=p.style?.stroke;if(p.markerEnd&&p.markerEnd!=="none"){let y=ge(p.markerEnd,N,"end");A.has(y)||(A.add(y),F.set(y,We(p.markerEnd,N??"currentColor",y,"end")));}if(p.markerStart&&p.markerStart!=="none"){let y=ge(p.markerStart,N,"start");A.has(y)||(A.add(y),F.set(y,We(p.markerStart,N??"currentColor",y,"start")));}}),A.forEach(p=>{let N=document.createElementNS(n,"marker");N.setAttribute("id",p),N.setAttribute("viewBox","0 0 10 10"),N.setAttribute("markerWidth","10"),N.setAttribute("markerHeight","10"),N.setAttribute("refX","9"),N.setAttribute("refY","5");let y=p.includes("-start");N.setAttribute("orient",y?"auto-start-reverse":"auto");let V=document.createElementNS(n,"svg");V.innerHTML=F.get(p)??"";let k=V.querySelector("marker");if(k)for(;k.firstChild;)N.appendChild(k.firstChild);C.appendChild(N);});let R=new Map;l.forEach(p=>{if(p.style?.shadow){let N=Oe(p.style.shadow),y=Pe(N);R.has(y)||R.set(y,N);}}),R.forEach((p,N)=>{let y=document.createElementNS(n,"svg");y.innerHTML=ot(N,p);let V=y.querySelector("filter");V&&C.appendChild(V);});let Y=new Set,j=e.sketch?.enabled;l.forEach(p=>{(p.style?.sketch||j)&&Y.add(Re(p.style,p.id));}),a.forEach(p=>{if(p.style?.sketch||j){let N=0;for(let y=0;y<p.id.length;y++)N=Math.imul(31,N)+p.id.charCodeAt(y)|0;Y.add(Math.abs(N));}}),Y.forEach(p=>{let N=ve(p),y=document.createElementNS(n,"svg");y.innerHTML=lt(N,p);let V=y.querySelector("filter");V&&C.appendChild(V);}),u.appendChild(C);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 re=document.createElementNS(n,"g");re.setAttribute("class","viz-layer-nodes"),re.setAttribute("data-viz-layer","nodes"),q.appendChild(re);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"),v=u.querySelector('[data-viz-layer="overlays"]')||u.querySelector(".viz-layer-overlays");if(!g||!f||!v){this._renderSceneToDOM(e,t);return}let m=Array.from(g.children).filter(o=>o.tagName==="g"),h=new Map;m.forEach(o=>{let C=o.getAttribute("data-id");C&&h.set(C,o);});let E=new Set;a.forEach(o=>{let C=He(o,c);if(!C)return;let{start:A,end:F}=C;E.add(o.id);let R=h.get(o.id);if(!R){R=document.createElementNS(n,"g"),R.setAttribute("data-id",o.id),R.setAttribute("data-viz-role","edge-group"),g.appendChild(R);let p=document.createElementNS(n,"path");p.setAttribute("class","viz-edge"),p.setAttribute("data-viz-role","edge-line"),R.appendChild(p);}let Y=`viz-edge-group ${o.className||""}`,j=o.style?.sketch||e.sketch?.enabled;j&&(Y+=" viz-sketch"),R.removeAttribute("style"),o.animations&&o.animations.forEach(p=>{if(p.when===false)return;let N=Ee.getEdgeRenderer(p.id);if(N){if(N.getClass&&(Y+=` ${N.getClass({spec:p,element:o})}`),N.getStyle){let y=N.getStyle({spec:p,element:o});Object.entries(y).forEach(([V,k])=>{R.style.setProperty(V,String(k));});}}else Y+=` ${Fe(p.id)}`,Ke(p.params).forEach(([y,V])=>{R.style.setProperty(y,V);});}),R.setAttribute("class",Y);let q;if(A&&F&&A===F)q=chunkHBGEN4P6_js.f(A,o);else {let p=chunkHBGEN4P6_js.d(A,F,o);q=chunkHBGEN4P6_js.e(p.start,p.end,o.routing,o.waypoints);}if(this._edgePathResolver){let p=N=>{let y=He(N,c);if(!y)return "";if(y.start&&y.end&&y.start===y.end)return chunkHBGEN4P6_js.f(y.start,N).d;let V=chunkHBGEN4P6_js.d(y.start,y.end,N);return chunkHBGEN4P6_js.e(V.start,V.end,N.routing,N.waypoints).d};try{let N=this._edgePathResolver(o,e,p);typeof N=="string"&&N&&(q.d=N);}catch(N){console.warn(`VizBuilder: edge path resolver threw for edge ${o.id}`,N);}}o.runtime?.opacity!==void 0?R.style.opacity=String(o.runtime.opacity):R.style.removeProperty("opacity");let P=R.querySelector('[data-viz-role="edge-line"]')||R.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 p=ge(o.markerEnd,o.style?.stroke,"end");P.setAttribute("marker-end",`url(#${p})`);}else P.removeAttribute("marker-end");if(o.markerStart&&o.markerStart!=="none"){let p=ge(o.markerStart,o.style?.stroke,"start");P.setAttribute("marker-start",`url(#${p})`);}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 p=0;for(let y=0;y<o.id.length;y++)p=Math.imul(31,p)+o.id.charCodeAt(y)|0;let N=Math.abs(p);P.setAttribute("filter",`url(#${ve(N)})`);}else P.removeAttribute("filter");let re=R.querySelector('[data-viz-role="edge-hit"]')||R.querySelector(".viz-edge-hit");if(re&&re.remove(),o.hitArea||o.onClick){let p=document.createElementNS(n,"path");p.setAttribute("class","viz-edge-hit"),p.setAttribute("data-viz-role","edge-hit"),p.setAttribute("d",q.d),p.setAttribute("stroke","transparent"),p.setAttribute("stroke-width",String(o.hitArea||10)),p.style.cursor=o.onClick?"pointer":"",o.onClick&&p.addEventListener("click",N=>{N.stopPropagation(),o.onClick(o.id,o);}),R.appendChild(p);}R.querySelectorAll('[data-viz-role="edge-label"],.viz-edge-label').forEach(p=>p.remove()),Be(o).forEach((p,N)=>{let y=we(p,q),V=`viz-edge-label ${p.className||""}`,k=ue(y.x,y.y,p.rich??p.text,{className:V,fill:p.fill,fontSize:p.fontSize,fontWeight:p.fontWeight,fontFamily:p.fontFamily,textAnchor:"middle",dominantBaseline:"middle",maxWidth:p.maxWidth,lineHeight:p.lineHeight,verticalAlign:p.verticalAlign,overflow:p.overflow}).replace("<text ",`<text data-viz-role="edge-label" data-label-index="${N}" data-label-position="${p.position}" `);R.insertAdjacentHTML("beforeend",k);});}),m.forEach(o=>{let C=o.getAttribute("data-id");C&&!E.has(C)&&o.remove();});let $=new Map,b=[];l.forEach(o=>{if(o.parentId){let C=$.get(o.parentId);C||(C=[],$.set(o.parentId,C)),C.push(o);}else b.push(o);}),b.sort((o,C)=>(o.zIndex||0)-(C.zIndex||0)),$.forEach(o=>o.sort((C,A)=>(C.zIndex||0)-(A.zIndex||0)));let w=Array.from(f.querySelectorAll('g[data-viz-role="node-group"]')),_=new Map;w.forEach(o=>{let C=o.getAttribute("data-id");C&&_.set(C,o);});let B=new Set,s=(o,C)=>{B.add(o.id);let A=_.get(o.id);A||(A=document.createElementNS(n,"g"),A.setAttribute("data-id",o.id),A.setAttribute("data-viz-role","node-group")),C.appendChild(A);let F=!!o.container,R=`viz-node-group${F?" viz-container":""} ${o.className||""}`,Y=o.style?.sketch||e.sketch?.enabled;Y&&(R+=" viz-sketch"),A.removeAttribute("style"),o.animations&&o.animations.forEach(z=>{if(z.when===false)return;let O=Ee.getNodeRenderer(z.id);if(O){if(O.getClass&&(R+=` ${O.getClass({spec:z,element:o})}`),O.getStyle){let Z=O.getStyle({spec:z,element:o});Object.entries(Z).forEach(([H,te])=>{A.style.setProperty(H,String(te));});}}else R+=` ${Fe(z.id)}`,Ke(z.params).forEach(([Z,H])=>{A.style.setProperty(Z,H);});}),A.setAttribute("class",R),A._clickHandler=o.onClick?z=>{z.stopPropagation(),o.onClick(o.id,o);}:null,A.hasAttribute("data-click-initialized")||(A.addEventListener("click",z=>{A._clickHandler&&A._clickHandler(z);}),A.setAttribute("data-click-initialized","true")),A.style.cursor=o.onClick?"pointer":"";let{x:j,y:q}=chunkOZAFCKI7_js.d(o),P=A.querySelector('[data-viz-role="node-shape"]')||A.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"),A.prepend(P)),chunkOZAFCKI7_js.g(P,o.shape,{x:j,y:q});let p=be(o.style?.strokeDasharray),N=o.style?.shadow?`url(#${Pe(Oe(o.style.shadow))})`:void 0;if(ar(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":p||void 0,filter:N}),Y){let z=Re(o.style,o.id);A.setAttribute("filter",`url(#${ve(z)})`);}else A.removeAttribute("filter");let y=A.querySelector(':scope > [data-viz-role="node-image"], :scope > .viz-node-image');y&&y.remove();let V=A.querySelector(':scope > [data-viz-role="node-icon"], :scope > .viz-node-icon');V&&V.remove();let k=A.querySelector(':scope > [data-viz-role="node-svg"], :scope > .viz-node-svg');k&&k.remove();let D=P,W=z=>{A.insertBefore(z,D.nextSibling),D=z;};if(o.image){let z=Ae(o,o.image.width,o.image.height,{position:o.image.position,dx:o.image.dx,dy:o.image.dy}),O=document.createElementNS(n,"image");O.setAttribute("class","viz-node-image"),O.setAttribute("data-viz-role","node-image"),O.setAttribute("x",String(z.x)),O.setAttribute("y",String(z.y)),O.setAttribute("width",String(o.image.width)),O.setAttribute("height",String(o.image.height)),O.setAttribute("href",o.image.href),o.image.preserveAspectRatio&&O.setAttribute("preserveAspectRatio",o.image.preserveAspectRatio),W(O);}if(o.icon){let z=chunkOZAFCKI7_js.b.get(o.icon.id);if(!z)console.warn(`VizCraft: icon '${o.icon.id}' not found. Use registerIcon().`);else {let O=Ae(o,o.icon.size,o.icon.size,{position:o.icon.position,dx:o.icon.dx,dy:o.icon.dy}),Z=document.createElementNS(n,"g");Z.setAttribute("class","viz-node-icon"),Z.setAttribute("data-viz-role","node-icon"),Z.setAttribute("transform",`translate(${O.x} ${O.y})`),o.icon.color&&Z.setAttribute("style",`color:${o.icon.color}`),Z.innerHTML=at(z,o.icon.size,o.icon.size),W(Z);}}if(o.svgContent){let z=Ae(o,o.svgContent.width,o.svgContent.height,{position:o.svgContent.position,dx:o.svgContent.dx,dy:o.svgContent.dy}),O=document.createElementNS(n,"g");O.setAttribute("class","viz-node-svg"),O.setAttribute("data-viz-role","node-svg"),O.setAttribute("transform",`translate(${z.x} ${z.y})`),O.innerHTML=wt(o.svgContent.content,o.svgContent.width,o.svgContent.height),W(O);}if(F&&o.container.headerHeight&&"w"in o.shape&&"h"in o.shape){let z=o.shape.w,O=o.shape.h,Z=q-O/2+o.container.headerHeight,H=A.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"),A.appendChild(H)),H.setAttribute("x1",String(j-z/2)),H.setAttribute("y1",String(Z)),H.setAttribute("x2",String(j+z/2)),H.setAttribute("y2",String(Z)),H.setAttribute("stroke",o.style?.stroke??"#111"),H.setAttribute("stroke-width",String(o.style?.strokeWidth??2));}else {let z=A.querySelector('[data-viz-role="container-header"]');z&&z.remove();}let K=o.compartments&&o.compartments.length>0;if(A.querySelectorAll('[data-viz-role="compartment-divider"],[data-viz-role="compartment-label"],[data-viz-role="compartment-entry"]').forEach(z=>z.remove()),K&&"w"in o.shape){let z=o.shape.w,O=o.shape.h,Z=q-O/2,H=8;for(let te=0;te<o.compartments.length;te++){let I=o.compartments[te];if(te>0){let L=Z+I.y,U=document.createElementNS(n,"line");U.setAttribute("class","viz-compartment-divider"),U.setAttribute("data-viz-role","compartment-divider"),U.setAttribute("data-compartment",I.id),U.setAttribute("x1",String(j-z/2)),U.setAttribute("y1",String(L)),U.setAttribute("x2",String(j+z/2)),U.setAttribute("y2",String(L)),U.setAttribute("stroke",o.style?.stroke??"#111"),U.setAttribute("stroke-width",String(o.style?.strokeWidth??2)),A.appendChild(U);}if(I.entries&&I.entries.length>0)for(let L of I.entries){let U=j-z/2+H+(L.label?.dx||0),se=Z+I.y+L.y+L.height/2+(L.label?.dy||0),oe=`viz-compartment-entry ${L.label?.className||""}`,me=ue(U,se,L.label?.rich??L.text,{className:oe,fill:L.label?.fill,fontSize:L.label?.fontSize,fontWeight:L.label?.fontWeight,fontFamily:L.label?.fontFamily,textAnchor:L.label?.textAnchor||"start",dominantBaseline:L.label?.dominantBaseline||"middle",maxWidth:L.label?.maxWidth??z-H*2,lineHeight:L.label?.lineHeight,verticalAlign:L.label?.verticalAlign,overflow:L.label?.overflow}).replace("<text ",`<text data-viz-role="compartment-entry" data-compartment="${I.id}" data-entry="${L.id}" `);A.insertAdjacentHTML("beforeend",me);}else if(I.label){let L=j-z/2+H+(I.label.dx||0),U=Z+I.y+I.height/2+(I.label.dy||0),se=`viz-compartment-label ${I.label.className||""}`,oe=ue(L,U,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??z-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}" `);A.insertAdjacentHTML("beforeend",oe);}}for(let te of o.compartments)if(te.entries)for(let I of te.entries){if(!I.onClick)continue;let L=A.querySelector(`[data-viz-role="compartment-entry"][data-compartment="${te.id}"][data-entry="${I.id}"]`);L&&(L.addEventListener("click",U=>{U.stopPropagation(),I.onClick();}),L.style.cursor="pointer");}}let Q=j+(o.label?.dx||0),T=q+(o.label?.dy||0),M=!!o.label&&!K;if(o.label&&F&&o.container.headerHeight&&"h"in o.shape&&!o.label.dy){let z=o.shape.h;T=q-z/2+o.container.headerHeight/2,Q=j+(o.label.dx||0);}let ee=A.querySelector('[data-viz-role="node-label"]')||A.querySelector(".viz-node-label");if(ee&&(ee.remove(),ee=null),o.label&&M){let z=`viz-node-label ${o.label.className||""}`,O=ue(Q,T,o.label.rich??o.label.text,{className:z,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" ');A.insertAdjacentHTML("beforeend",O),ee=A.querySelector('[data-viz-role="node-label"]');}if(A.querySelectorAll('[data-viz-role="badge"]').forEach(z=>z.remove()),o.badges&&o.badges.length>0){let z=chunkOZAFCKI7_js.o(o.shape),O=z.width/2,Z=z.height/2;for(let H of o.badges){let te=H.fontSize??10,I=3,L=te+I*2,U=Math.max(te*H.text.length*.7+I*2,L),se,oe;H.position==="top-left"?(se=j-O-U/4,oe=q-Z-L/4):H.position==="top-right"?(se=j+O-U*3/4,oe=q-Z-L/4):H.position==="bottom-left"?(se=j-O-U/4,oe=q+Z-L*3/4):(se=j+O-U*3/4,oe=q+Z-L*3/4);let me=document.createElementNS(n,"g");if(me.setAttribute("class","viz-badge"),me.setAttribute("data-viz-role","badge"),H.background){let pe=document.createElementNS(n,"rect");pe.setAttribute("x",String(se)),pe.setAttribute("y",String(oe)),pe.setAttribute("width",String(U)),pe.setAttribute("height",String(L)),pe.setAttribute("rx",String(L/2)),pe.setAttribute("fill",H.background),me.appendChild(pe);}let ce=document.createElementNS(n,"text");ce.setAttribute("x",String(se+U/2)),ce.setAttribute("y",String(oe+L/2)),ce.setAttribute("text-anchor","middle"),ce.setAttribute("dominant-baseline","central"),ce.setAttribute("font-size",String(te)),H.fill&&ce.setAttribute("fill",H.fill),ce.textContent=H.text,me.appendChild(ce),A.appendChild(me);}}A.querySelectorAll('[data-viz-role="port"]').forEach(z=>z.remove()),o.ports&&o.ports.length>0&&o.ports.forEach(z=>{let O=document.createElementNS(n,"circle");O.setAttribute("cx",String(j+z.offset.x)),O.setAttribute("cy",String(q+z.offset.y)),O.setAttribute("r","4"),O.setAttribute("class","viz-port"),O.setAttribute("data-viz-role","port"),O.setAttribute("data-node",o.id),O.setAttribute("data-port",z.id),A.appendChild(O);});let he=$.get(o.id);if(he&&he.length>0){let z=A.querySelector(':scope > [data-viz-role="container-children"]');z||(z=document.createElementNS(n,"g"),z.setAttribute("class","viz-container-children"),z.setAttribute("data-viz-role","container-children"),A.appendChild(z)),he.forEach(O=>s(O,z));}else {let z=A.querySelector(':scope > [data-viz-role="container-children"]');z&&z.remove();}};b.forEach(o=>s(o,f)),w.forEach(o=>{let C=o.getAttribute("data-id");C&&!B.has(C)&&o.remove();});let x=Array.from(v.children).filter(o=>o.tagName==="g"),S=new Map;x.forEach(o=>{let C=o.getAttribute("data-overlay-id");C&&S.set(C,o);});let G=new Set;d&&d.length>0&&d.forEach(o=>{let C=ye.get(o.id);if(C){let A=o.key||o.id;G.add(A);let F=S.get(A);F||(F=document.createElementNS(n,"g"),F.setAttribute("data-overlay-id",A),F.setAttribute("data-viz-role","overlay-group"),v.appendChild(F)),F.setAttribute("class",`viz-overlay-${o.id}${o.className?` ${o.className}`:""}`);let R={spec:o,nodesById:c,edgesById:new Map(a.map(Y=>[Y.id,Y])),scene:e,registry:ye};C.update?C.update(R,F):F.innerHTML=C.render(R);}}),x.forEach(o=>{let C=o.getAttribute("data-overlay-id");C&&!G.has(C)&&o.remove();}),ke.set(u,Ne(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 A=n.get(s.parentId);A&&(S+=A.dx,G+=A.dy);}(x.x!==void 0||x.y!==void 0||S!==s.pos.x||G!==s.pos.y)&&(x.x=S,x.y=G);let C=Object.keys(x).length>0?x:void 0;return {...s,runtime:C}}),g=d.map(s=>i?s:{...s,runtime:void 0}),f={...e,nodes:u,edges:g},v=new Map(u.map(s=>[s.id,s])),m=new Map(g.map(s=>[s.id,s])),h=`<svg viewBox="0 0 ${l.w} ${l.h}" xmlns="http://www.w3.org/2000/svg">`;h+=`<style>${Ze}</style>`,h+=`
|
|
117
|
-
<defs>`;let
|
|
118
|
-
</defs>`,h+='<g class="viz-layer-edges" data-viz-layer="edges">',g.forEach(s=>{let x=He(s,v);if(!x)return;let{start:S,end:G}=x,o="",C="";s.animations&&s.animations.forEach(y=>{if(y.when===false)return;let V=Ee.getEdgeRenderer(y.id);if(V){if(V.getClass&&(o+=` ${V.getClass({spec:y,element:s})}`),V.getStyle){let k=V.getStyle({spec:y,element:s});Object.entries(k).forEach(([D,W])=>{C+=`${D}: ${W}; `;});}}else o+=` ${Fe(y.id)}`,Ke(y.params).forEach(([k,D])=>{C+=`${k}: ${D}; `;});});let A=s.markerEnd&&s.markerEnd!=="none"?`marker-end="url(#${ge(s.markerEnd,s.style?.stroke,"end")})"`:"",F=s.markerStart&&s.markerStart!=="none"?`marker-start="url(#${ge(s.markerStart,s.style?.stroke,"start")})"`:"",R;if(S&&G&&S===G)R=chunkHBGEN4P6_js.f(S,s);else {let y=chunkHBGEN4P6_js.d(S,G,s);R=chunkHBGEN4P6_js.e(y.start,y.end,s.routing,s.waypoints);}if(this._edgePathResolver){let y=V=>{let k=He(V,v);if(!k)return "";if(k.start&&k.end&&k.start===k.end)return chunkHBGEN4P6_js.f(k.start,V).d;let D=chunkHBGEN4P6_js.d(k.start,k.end,V);return chunkHBGEN4P6_js.e(D.start,D.end,V.routing,V.waypoints).d};try{let V=this._edgePathResolver(s,f,k=>y(k));typeof V=="string"&&V&&(R.d=V);}catch(V){console.warn(`VizBuilder: edge path resolver threw for edge ${s.id}`,V);}}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,re=P?" viz-sketch":"";h+=`<g data-id="${s.id}" data-viz-role="edge-group" class="viz-edge-group${re} ${s.className||""} ${o}" style="${C}${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 y=be(s.style.strokeDasharray);y&&(J+=`stroke-dasharray: ${y}; `);}let p="";if(P){let y=0;for(let V=0;V<s.id.length;V++)y=Math.imul(31,y)+s.id.charCodeAt(V)|0;p=` filter="url(#${ve(Math.abs(y))})"`;}h+=`<path d="${R.d}" class="viz-edge" data-viz-role="edge-line" ${A} ${F} style="${J}"${q}${p} />`,Be(s).forEach((y,V)=>{let k=we(y,R),D=`viz-edge-label ${y.className||""}`,K=ue(k.x,k.y,y.rich??y.text,{className:D,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="${V}" data-label-position="${y.position}" `);h+=K;}),h+="</g>";}),h+="</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),C="",A="";s.runtime?.opacity!==void 0&&(A+=`opacity: ${s.runtime.opacity}; `),s.animations&&s.animations.forEach(k=>{if(k.when===false)return;let D=Ee.getNodeRenderer(k.id);if(D){if(D.getClass&&(C+=` ${D.getClass({spec:k,element:s})}`),D.getStyle){let W=D.getStyle({spec:k,element:s});Object.entries(W).forEach(([K,Q])=>{A+=`${K}: ${Q}; `;});}}else C+=` ${Fe(k.id)}`,Ke(k.params).forEach(([W,K])=>{A+=`${W}: ${K}; `;});});let F=!!s.container,R=s.style?.sketch||w,Y=`viz-node-group${F?" viz-container":""}${R?" viz-sketch":""} ${s.className||""} ${C}`,j=s.runtime?.scale,q=s.runtime?.rotation,P="";if(R){let k=Re(s.style,s.id);P=` filter="url(#${ve(k)})"`;}let re=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="${A}"${re}${P}>`;let J=be(s.style?.strokeDasharray),p=s.style?.shadow?`url(#${Pe(Oe(s.style.shadow))})`:void 0,N=dr({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:p});if(x+=chunkOZAFCKI7_js.h(o,{x:S,y:G},N),s.image){let k=Ae(s,s.image.width,s.image.height,{position:s.image.position,dx:s.image.dx,dy:s.image.dy}),D=s.image.preserveAspectRatio?` preserveAspectRatio="${fe(s.image.preserveAspectRatio)}"`:"",W=fe(s.image.href);x+=`<image x="${k.x}" y="${k.y}" width="${s.image.width}" height="${s.image.height}" href="${W}"${D} class="viz-node-image" data-viz-role="node-image" />`;}if(s.icon){let k=chunkOZAFCKI7_js.b.get(s.icon.id);if(!k)console.warn(`VizCraft: icon '${s.icon.id}' not found. Use registerIcon().`);else {let D=Ae(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:${fe(s.icon.color)}"`:"",K=at(k,s.icon.size,s.icon.size);x+=`<g transform="translate(${D.x} ${D.y})" class="viz-node-icon" data-viz-role="node-icon"${W}>${K}</g>`;}}if(s.svgContent){let k=Ae(s,s.svgContent.width,s.svgContent.height,{position:s.svgContent.position,dx:s.svgContent.dx,dy:s.svgContent.dy}),D=wt(s.svgContent.content,s.svgContent.width,s.svgContent.height);x+=`<g transform="translate(${k.x} ${k.y})" class="viz-node-svg" data-viz-role="node-svg">${D}</g>`;}if(F&&s.container.headerHeight&&"w"in o&&"h"in o){let k=o.w,D=o.h,W=G-D/2+s.container.headerHeight;x+=`<line x1="${S-k/2}" y1="${W}" x2="${S+k/2}" y2="${W}" stroke="${s.style?.stroke??"#111"}" stroke-width="${s.style?.strokeWidth??2}" class="viz-container-header" data-viz-role="container-header" />`;}let y=s.compartments&&s.compartments.length>0;if(y&&"w"in o){let k=o.w,D=o.h,W=G-D/2,K=8;for(let Q=0;Q<s.compartments.length;Q++){let T=s.compartments[Q];if(Q>0){let M=W+T.y;x+=`<line x1="${S-k/2}" y1="${M}" x2="${S+k/2}" y2="${M}" stroke="${s.style?.stroke??"#111"}" stroke-width="${s.style?.strokeWidth??2}" class="viz-compartment-divider" data-viz-role="compartment-divider" data-compartment="${T.id}" />`;}if(T.entries&&T.entries.length>0)for(let M of T.entries){let ee=S-k/2+K+(M.label?.dx||0),ie=W+T.y+M.y+M.height/2+(M.label?.dy||0),ne=`viz-compartment-entry ${M.label?.className||""}`,he=ue(ee,ie,M.label?.rich??M.text,{className:ne,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??k-K*2,lineHeight:M.label?.lineHeight,verticalAlign:M.label?.verticalAlign,overflow:M.label?.overflow}).replace("<text ",`<text data-viz-role="compartment-entry" data-compartment="${fe(T.id)}" data-entry="${fe(M.id)}" `);x+=he;}else if(T.label){let M=S-k/2+K+(T.label.dx||0),ee=W+T.y+T.height/2+(T.label.dy||0),ie=`viz-compartment-label ${T.label.className||""}`,ne=ue(M,ee,T.label.rich??T.label.text,{className:ie,fill:T.label.fill,fontSize:T.label.fontSize,fontWeight:T.label.fontWeight,fontFamily:T.label.fontFamily,textAnchor:T.label.textAnchor||"start",dominantBaseline:T.label.dominantBaseline||"middle",maxWidth:T.label.maxWidth??k-K*2,lineHeight:T.label.lineHeight,verticalAlign:T.label.verticalAlign,overflow:T.label.overflow}).replace("<text ",`<text data-viz-role="compartment-label" data-compartment="${T.id}" `);x+=ne;}}}if(s.label&&!y){let k=S+(s.label.dx||0),D=G+(s.label.dy||0);if(F&&s.container.headerHeight&&"h"in o&&!s.label.dy){let T=o.h;D=G-T/2+s.container.headerHeight/2,k=S+(s.label.dx||0);}let W=`viz-node-label ${s.label.className||""}`,Q=ue(k,D,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 k=chunkOZAFCKI7_js.o(o),D=k.width/2,W=k.height/2;for(let K of s.badges){let Q=K.fontSize??10,T=3,M=Q+T*2,ee=Math.max(Q*K.text.length*.7+T*2,M),ie,ne;if(K.position==="top-left"?(ie=S-D-ee/4,ne=G-W-M/4):K.position==="top-right"?(ie=S+D-ee*3/4,ne=G-W-M/4):K.position==="bottom-left"?(ie=S-D-ee/4,ne=G+W-M*3/4):(ie=S+D-ee*3/4,ne=G+W-M*3/4),x+='<g class="viz-badge" data-viz-role="badge">',K.background){let O=fe(K.background);x+=`<rect x="${ie}" y="${ne}" width="${ee}" height="${M}" rx="${M/2}" fill="${O}" />`;}let he=K.fill?` fill="${fe(K.fill)}"`:"",z=K.text.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");x+=`<text x="${ie+ee/2}" y="${ne+M/2}" text-anchor="middle" dominant-baseline="central" font-size="${Q}"${he}>${z}</text>`,x+="</g>";}}s.ports&&s.ports.length>0&&s.ports.forEach(k=>{let D=S+k.offset.x,W=G+k.offset.y;x+=`<circle cx="${D}" cy="${W}" r="4" class="viz-port" data-viz-role="port" data-node="${s.id}" data-port="${k.id}" />`;});let V=_.get(s.id);return V&&V.length>0&&(x+='<g class="viz-container-children" data-viz-role="container-children">',V.forEach(k=>{x+=B(k);}),x+="</g>"),x+="</g>",x};return h+='<g class="viz-layer-nodes" data-viz-layer="nodes">',u.forEach(s=>{s.parentId||(h+=B(s));}),h+="</g>",c&&c.length>0&&(h+='<g class="viz-layer-overlays" data-viz-layer="overlays">',c.forEach(s=>{let x=ye.get(s.id);x&&(h+=x.render({spec:s,nodesById:v,edgesById:m,scene:f,registry:ye}));}),h+="</g>"),h+="</svg>",h}};function yi(){return new dt}function xi(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 ur(t,i)}function ur(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=chunkHBGEN4P6_js.f(t,r);a=n,d=n.exitPoint,c=n.entryPoint;}else {let n=chunkHBGEN4P6_js.d(t,i,r);a=chunkHBGEN4P6_js.e(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 chunk5W3PZTNU_js.c}});Object.defineProperty(exports,"OVERLAY_RUNTIME_DIRTY",{enumerable:true,get:function(){return chunk5W3PZTNU_js.a}});Object.defineProperty(exports,"buildAnimationSpec",{enumerable:true,get:function(){return chunk5W3PZTNU_js.d}});Object.defineProperty(exports,"createBuilderPlayback",{enumerable:true,get:function(){return chunk5W3PZTNU_js.f}});Object.defineProperty(exports,"createScenePlayback",{enumerable:true,get:function(){return chunk5W3PZTNU_js.e}});Object.defineProperty(exports,"playAnimationSpec",{enumerable:true,get:function(){return chunk5W3PZTNU_js.g}});Object.defineProperty(exports,"computeEdgeEndpoints",{enumerable:true,get:function(){return chunkHBGEN4P6_js.d}});Object.defineProperty(exports,"computeEdgePath",{enumerable:true,get:function(){return chunkHBGEN4P6_js.e}});Object.defineProperty(exports,"computeSelfLoop",{enumerable:true,get:function(){return chunkHBGEN4P6_js.f}});Object.defineProperty(exports,"distanceSquare",{enumerable:true,get:function(){return chunkHBGEN4P6_js.h}});Object.defineProperty(exports,"edgeDistance",{enumerable:true,get:function(){return chunkHBGEN4P6_js.m}});Object.defineProperty(exports,"getEffectiveNodeBounds",{enumerable:true,get:function(){return chunkHBGEN4P6_js.i}});Object.defineProperty(exports,"hitTest",{enumerable:true,get:function(){return chunkHBGEN4P6_js.j}});Object.defineProperty(exports,"hitTestRect",{enumerable:true,get:function(){return chunkHBGEN4P6_js.k}});Object.defineProperty(exports,"nearestPort",{enumerable:true,get:function(){return chunkHBGEN4P6_js.l}});Object.defineProperty(exports,"pointInRect",{enumerable:true,get:function(){return chunkHBGEN4P6_js.g}});Object.defineProperty(exports,"setupPanZoom",{enumerable:true,get:function(){return chunkHBGEN4P6_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=Pr;exports.collectEdgeLabels=Be;exports.coreCircleOverlay=Gt;exports.coreDataPointOverlay=Rt;exports.coreFlowAnimation=Ot;exports.coreGridLabelsOverlay=_t;exports.coreGroupOverlay=Tt;exports.coreRectOverlay=Dt;exports.coreSignalOverlay=Pt;exports.coreTextOverlay=Lt;exports.defaultCoreAnimationRegistry=Ee;exports.defaultCoreOverlayRegistry=ye;exports.resolveDasharray=be;exports.resolveEdgeGeometry=xi;exports.resolveEdgeGeometryFromData=ur;exports.resolveEdgeLabelPosition=we;exports.viz=yi;
|
|
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 f of d)c.push(...chunk5W3PZTNU_js.b(f));qe.get(e)?.stop();let n={version:"viz-anim/1",tweens:d.flatMap(f=>f.tweens)},u=chunk5W3PZTNU_js.f({builder:this,container:e,extendAdapter:c.length>0?f=>{for(let g of c)g(f);}: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=Ee.get(i);l||(l=Ne(i,{edgePathResolver:this._edgePathResolver}),Ee.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",f=Array.from(a.children).filter(v=>v.tagName==="g"),g=new Map;f.forEach(v=>{let w=v.getAttribute("data-overlay-id");w&&g.set(w,v);});let b=d.length===g.size,m=!b,h=[];if(!m)for(let v of d){let w=v.key||v.id;if(!g.has(w)){m=true;break}v[chunk5W3PZTNU_js.a]&&h.push(v);}if(!m&&h.length===0)return;let k=new Set;(m?d:h).forEach(v=>{let w=ye.get(v.id);if(!w)return;let _=v.key||v.id;k.add(_);let B=g.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[chunk5W3PZTNU_js.a];}),b||f.forEach(v=>{let w=v.getAttribute("data-overlay-id");w&&!k.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 C=document.createElementNS(n,"defs"),A=new Set,F=new Map;a.forEach(p=>{let N=p.style?.stroke;if(p.markerEnd&&p.markerEnd!=="none"){let y=ge(p.markerEnd,N,"end");A.has(y)||(A.add(y),F.set(y,We(p.markerEnd,N??"currentColor",y,"end")));}if(p.markerStart&&p.markerStart!=="none"){let y=ge(p.markerStart,N,"start");A.has(y)||(A.add(y),F.set(y,We(p.markerStart,N??"currentColor",y,"start")));}}),A.forEach(p=>{let N=document.createElementNS(n,"marker");N.setAttribute("id",p),N.setAttribute("viewBox","0 0 10 10"),N.setAttribute("markerWidth","10"),N.setAttribute("markerHeight","10"),N.setAttribute("refX","9"),N.setAttribute("refY","5");let y=p.includes("-start");N.setAttribute("orient",y?"auto-start-reverse":"auto");let V=document.createElementNS(n,"svg");V.innerHTML=F.get(p)??"";let E=V.querySelector("marker");if(E)for(;E.firstChild;)N.appendChild(E.firstChild);C.appendChild(N);});let R=new Map;l.forEach(p=>{if(p.style?.shadow){let N=Oe(p.style.shadow),y=Pe(N);R.has(y)||R.set(y,N);}}),R.forEach((p,N)=>{let y=document.createElementNS(n,"svg");y.innerHTML=ot(N,p);let V=y.querySelector("filter");V&&C.appendChild(V);});let Y=new Set,j=e.sketch?.enabled;l.forEach(p=>{(p.style?.sketch||j)&&Y.add(Re(p.style,p.id));}),a.forEach(p=>{if(p.style?.sketch||j){let N=0;for(let y=0;y<p.id.length;y++)N=Math.imul(31,N)+p.id.charCodeAt(y)|0;Y.add(Math.abs(N));}}),Y.forEach(p=>{let N=ve(p),y=document.createElementNS(n,"svg");y.innerHTML=lt(N,p);let V=y.querySelector("filter");V&&C.appendChild(V);}),u.appendChild(C);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 re=document.createElementNS(n,"g");re.setAttribute("class","viz-layer-nodes"),re.setAttribute("data-viz-layer","nodes"),q.appendChild(re);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 f=u.querySelector('[data-viz-layer="edges"]')||u.querySelector(".viz-layer-edges"),g=u.querySelector('[data-viz-layer="nodes"]')||u.querySelector(".viz-layer-nodes"),b=u.querySelector('[data-viz-layer="overlays"]')||u.querySelector(".viz-layer-overlays");if(!f||!g||!b){this._renderSceneToDOM(e,t);return}let m=Array.from(f.children).filter(o=>o.tagName==="g"),h=new Map;m.forEach(o=>{let C=o.getAttribute("data-id");C&&h.set(C,o);});let k=new Set;a.forEach(o=>{let C=He(o,c);if(!C)return;let{start:A,end:F}=C;k.add(o.id);let R=h.get(o.id);if(!R){R=document.createElementNS(n,"g"),R.setAttribute("data-id",o.id),R.setAttribute("data-viz-role","edge-group"),f.appendChild(R);let p=document.createElementNS(n,"path");p.setAttribute("class","viz-edge"),p.setAttribute("data-viz-role","edge-line"),R.appendChild(p);}let Y=`viz-edge-group ${o.className||""}`,j=o.style?.sketch||e.sketch?.enabled;j&&(Y+=" viz-sketch"),R.removeAttribute("style"),o.animations&&o.animations.forEach(p=>{if(p.when===false)return;let N=ke.getEdgeRenderer(p.id);if(N){if(N.getClass&&(Y+=` ${N.getClass({spec:p,element:o})}`),N.getStyle){let y=N.getStyle({spec:p,element:o});Object.entries(y).forEach(([V,E])=>{R.style.setProperty(V,String(E));});}}else Y+=` ${Fe(p.id)}`,Ke(p.params).forEach(([y,V])=>{R.style.setProperty(y,V);});}),R.setAttribute("class",Y);let q;if(A&&F&&A===F)q=chunkHBGEN4P6_js.f(A,o);else {let p=chunkHBGEN4P6_js.d(A,F,o);q=chunkHBGEN4P6_js.e(p.start,p.end,o.routing,o.waypoints);}if(this._edgePathResolver){let p=N=>{let y=He(N,c);if(!y)return "";if(y.start&&y.end&&y.start===y.end)return chunkHBGEN4P6_js.f(y.start,N).d;let V=chunkHBGEN4P6_js.d(y.start,y.end,N);return chunkHBGEN4P6_js.e(V.start,V.end,N.routing,N.waypoints).d};try{let N=this._edgePathResolver(o,e,p);typeof N=="string"&&N&&(q.d=N);}catch(N){console.warn(`VizBuilder: edge path resolver threw for edge ${o.id}`,N);}}o.runtime?.opacity!==void 0?R.style.opacity=String(o.runtime.opacity):R.style.removeProperty("opacity");let P=R.querySelector('[data-viz-role="edge-line"]')||R.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 p=ge(o.markerEnd,o.style?.stroke,"end");P.setAttribute("marker-end",`url(#${p})`);}else P.removeAttribute("marker-end");if(o.markerStart&&o.markerStart!=="none"){let p=ge(o.markerStart,o.style?.stroke,"start");P.setAttribute("marker-start",`url(#${p})`);}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 p=0;for(let y=0;y<o.id.length;y++)p=Math.imul(31,p)+o.id.charCodeAt(y)|0;let N=Math.abs(p);P.setAttribute("filter",`url(#${ve(N)})`);}else P.removeAttribute("filter");let re=R.querySelector('[data-viz-role="edge-hit"]')||R.querySelector(".viz-edge-hit");if(re&&re.remove(),o.hitArea||o.onClick){let p=document.createElementNS(n,"path");p.setAttribute("class","viz-edge-hit"),p.setAttribute("data-viz-role","edge-hit"),p.setAttribute("d",q.d),p.setAttribute("stroke","transparent"),p.setAttribute("stroke-width",String(o.hitArea||10)),p.style.cursor=o.onClick?"pointer":"",o.onClick&&p.addEventListener("click",N=>{N.stopPropagation(),o.onClick(o.id,o);}),R.appendChild(p);}R.querySelectorAll('[data-viz-role="edge-label"],.viz-edge-label').forEach(p=>p.remove()),Be(o).forEach((p,N)=>{let y=we(p,q),V=`viz-edge-label ${p.className||""}`,E=ue(y.x,y.y,p.rich??p.text,{className:V,fill:p.fill,fontSize:p.fontSize,fontWeight:p.fontWeight,fontFamily:p.fontFamily,textAnchor:"middle",dominantBaseline:"middle",maxWidth:p.maxWidth,lineHeight:p.lineHeight,verticalAlign:p.verticalAlign,overflow:p.overflow}).replace("<text ",`<text data-viz-role="edge-label" data-label-index="${N}" data-label-position="${p.position}" `);R.insertAdjacentHTML("beforeend",E);});}),m.forEach(o=>{let C=o.getAttribute("data-id");C&&!k.has(C)&&o.remove();});let $=new Map,v=[];l.forEach(o=>{if(o.parentId){let C=$.get(o.parentId);C||(C=[],$.set(o.parentId,C)),C.push(o);}else v.push(o);}),v.sort((o,C)=>(o.zIndex||0)-(C.zIndex||0)),$.forEach(o=>o.sort((C,A)=>(C.zIndex||0)-(A.zIndex||0)));let w=Array.from(g.querySelectorAll('g[data-viz-role="node-group"]')),_=new Map;w.forEach(o=>{let C=o.getAttribute("data-id");C&&_.set(C,o);});let B=new Set,s=(o,C)=>{B.add(o.id);let A=_.get(o.id);A||(A=document.createElementNS(n,"g"),A.setAttribute("data-id",o.id),A.setAttribute("data-viz-role","node-group")),C.appendChild(A);let F=!!o.container,R=`viz-node-group${F?" viz-container":""} ${o.className||""}`,Y=o.style?.sketch||e.sketch?.enabled;Y&&(R+=" viz-sketch"),A.removeAttribute("style"),o.animations&&o.animations.forEach(z=>{if(z.when===false)return;let O=ke.getNodeRenderer(z.id);if(O){if(O.getClass&&(R+=` ${O.getClass({spec:z,element:o})}`),O.getStyle){let Z=O.getStyle({spec:z,element:o});Object.entries(Z).forEach(([H,te])=>{A.style.setProperty(H,String(te));});}}else R+=` ${Fe(z.id)}`,Ke(z.params).forEach(([Z,H])=>{A.style.setProperty(Z,H);});}),A.setAttribute("class",R),A._clickHandler=o.onClick?z=>{z.stopPropagation(),o.onClick(o.id,o);}:null,A.hasAttribute("data-click-initialized")||(A.addEventListener("click",z=>{A._clickHandler&&A._clickHandler(z);}),A.setAttribute("data-click-initialized","true")),A.style.cursor=o.onClick?"pointer":"";let{x:j,y:q}=chunkOZAFCKI7_js.d(o),P=A.querySelector('[data-viz-role="node-shape"]')||A.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"),A.prepend(P)),chunkOZAFCKI7_js.g(P,o.shape,{x:j,y:q});let p=be(o.style?.strokeDasharray),N=o.style?.shadow?`url(#${Pe(Oe(o.style.shadow))})`:void 0;if(dr(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":p||void 0,filter:N}),Y){let z=Re(o.style,o.id);A.setAttribute("filter",`url(#${ve(z)})`);}else A.removeAttribute("filter");let y=A.querySelector(':scope > [data-viz-role="node-image"], :scope > .viz-node-image');y&&y.remove();let V=A.querySelector(':scope > [data-viz-role="node-icon"], :scope > .viz-node-icon');V&&V.remove();let E=A.querySelector(':scope > [data-viz-role="node-svg"], :scope > .viz-node-svg');E&&E.remove();let D=P,W=z=>{A.insertBefore(z,D.nextSibling),D=z;};if(o.image){let z=Ae(o,o.image.width,o.image.height,{position:o.image.position,dx:o.image.dx,dy:o.image.dy}),O=document.createElementNS(n,"image");O.setAttribute("class","viz-node-image"),O.setAttribute("data-viz-role","node-image"),O.setAttribute("x",String(z.x)),O.setAttribute("y",String(z.y)),O.setAttribute("width",String(o.image.width)),O.setAttribute("height",String(o.image.height)),O.setAttribute("href",o.image.href),o.image.preserveAspectRatio&&O.setAttribute("preserveAspectRatio",o.image.preserveAspectRatio),W(O);}if(o.icon){let z=chunkOZAFCKI7_js.b.get(o.icon.id);if(!z)console.warn(`VizCraft: icon '${o.icon.id}' not found. Use registerIcon().`);else {let O=Ae(o,o.icon.size,o.icon.size,{position:o.icon.position,dx:o.icon.dx,dy:o.icon.dy}),Z=document.createElementNS(n,"g");Z.setAttribute("class","viz-node-icon"),Z.setAttribute("data-viz-role","node-icon"),Z.setAttribute("transform",`translate(${O.x} ${O.y})`),o.icon.color&&Z.setAttribute("style",`color:${o.icon.color}`),Z.innerHTML=at(z,o.icon.size,o.icon.size),W(Z);}}if(o.svgContent){let z=Ae(o,o.svgContent.width,o.svgContent.height,{position:o.svgContent.position,dx:o.svgContent.dx,dy:o.svgContent.dy}),O=document.createElementNS(n,"g");O.setAttribute("class","viz-node-svg"),O.setAttribute("data-viz-role","node-svg"),O.setAttribute("transform",`translate(${z.x} ${z.y})`),O.innerHTML=Ct(o.svgContent.content,o.svgContent.width,o.svgContent.height),W(O);}if(F&&o.container.headerHeight&&"w"in o.shape&&"h"in o.shape){let z=o.shape.w,O=o.shape.h,Z=q-O/2+o.container.headerHeight,H=A.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"),A.appendChild(H)),H.setAttribute("x1",String(j-z/2)),H.setAttribute("y1",String(Z)),H.setAttribute("x2",String(j+z/2)),H.setAttribute("y2",String(Z)),H.setAttribute("stroke",o.style?.stroke??"#111"),H.setAttribute("stroke-width",String(o.style?.strokeWidth??2));}else {let z=A.querySelector('[data-viz-role="container-header"]');z&&z.remove();}let K=o.compartments&&o.compartments.length>0;if(A.querySelectorAll('[data-viz-role="compartment-divider"],[data-viz-role="compartment-label"],[data-viz-role="compartment-entry"]').forEach(z=>z.remove()),K&&"w"in o.shape){let z=o.shape.w,O=o.shape.h,Z=q-O/2,H=8;for(let te=0;te<o.compartments.length;te++){let I=o.compartments[te];if(te>0){let L=Z+I.y,U=document.createElementNS(n,"line");U.setAttribute("class","viz-compartment-divider"),U.setAttribute("data-viz-role","compartment-divider"),U.setAttribute("data-compartment",I.id),U.setAttribute("x1",String(j-z/2)),U.setAttribute("y1",String(L)),U.setAttribute("x2",String(j+z/2)),U.setAttribute("y2",String(L)),U.setAttribute("stroke",o.style?.stroke??"#111"),U.setAttribute("stroke-width",String(o.style?.strokeWidth??2)),A.appendChild(U);}if(I.entries&&I.entries.length>0)for(let L of I.entries){let U=j-z/2+H+(L.label?.dx||0),se=Z+I.y+L.y+L.height/2+(L.label?.dy||0),oe=`viz-compartment-entry ${L.label?.className||""}`,me=ue(U,se,L.label?.rich??L.text,{className:oe,fill:L.label?.fill,fontSize:L.label?.fontSize,fontWeight:L.label?.fontWeight,fontFamily:L.label?.fontFamily,textAnchor:L.label?.textAnchor||"start",dominantBaseline:L.label?.dominantBaseline||"middle",maxWidth:L.label?.maxWidth??z-H*2,lineHeight:L.label?.lineHeight,verticalAlign:L.label?.verticalAlign,overflow:L.label?.overflow}).replace("<text ",`<text data-viz-role="compartment-entry" data-compartment="${I.id}" data-entry="${L.id}" `);A.insertAdjacentHTML("beforeend",me);}else if(I.label){let L=j-z/2+H+(I.label.dx||0),U=Z+I.y+I.height/2+(I.label.dy||0),se=`viz-compartment-label ${I.label.className||""}`,oe=ue(L,U,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??z-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}" `);A.insertAdjacentHTML("beforeend",oe);}}for(let te of o.compartments)if(te.entries)for(let I of te.entries){if(!I.onClick)continue;let L=A.querySelector(`[data-viz-role="compartment-entry"][data-compartment="${te.id}"][data-entry="${I.id}"]`);L&&(L.addEventListener("click",U=>{U.stopPropagation(),I.onClick();}),L.style.cursor="pointer");}}let Q=j+(o.label?.dx||0),T=q+(o.label?.dy||0),M=!!o.label&&!K;if(o.label&&F&&o.container.headerHeight&&"h"in o.shape&&!o.label.dy){let z=o.shape.h;T=q-z/2+o.container.headerHeight/2,Q=j+(o.label.dx||0);}let ee=A.querySelector('[data-viz-role="node-label"]')||A.querySelector(".viz-node-label");if(ee&&(ee.remove(),ee=null),o.label&&M){let z=`viz-node-label ${o.label.className||""}`,O=ue(Q,T,o.label.rich??o.label.text,{className:z,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" ');A.insertAdjacentHTML("beforeend",O),ee=A.querySelector('[data-viz-role="node-label"]');}if(A.querySelectorAll('[data-viz-role="badge"]').forEach(z=>z.remove()),o.badges&&o.badges.length>0){let z=chunkOZAFCKI7_js.o(o.shape),O=z.width/2,Z=z.height/2;for(let H of o.badges){let te=H.fontSize??10,I=3,L=te+I*2,U=Math.max(te*H.text.length*.7+I*2,L),se,oe;H.position==="top-left"?(se=j-O-U/4,oe=q-Z-L/4):H.position==="top-right"?(se=j+O-U*3/4,oe=q-Z-L/4):H.position==="bottom-left"?(se=j-O-U/4,oe=q+Z-L*3/4):(se=j+O-U*3/4,oe=q+Z-L*3/4);let me=document.createElementNS(n,"g");if(me.setAttribute("class","viz-badge"),me.setAttribute("data-viz-role","badge"),H.background){let pe=document.createElementNS(n,"rect");pe.setAttribute("x",String(se)),pe.setAttribute("y",String(oe)),pe.setAttribute("width",String(U)),pe.setAttribute("height",String(L)),pe.setAttribute("rx",String(L/2)),pe.setAttribute("fill",H.background),me.appendChild(pe);}let ce=document.createElementNS(n,"text");ce.setAttribute("x",String(se+U/2)),ce.setAttribute("y",String(oe+L/2)),ce.setAttribute("text-anchor","middle"),ce.setAttribute("dominant-baseline","central"),ce.setAttribute("font-size",String(te)),H.fill&&ce.setAttribute("fill",H.fill),ce.textContent=H.text,me.appendChild(ce),A.appendChild(me);}}A.querySelectorAll('[data-viz-role="port"]').forEach(z=>z.remove()),o.ports&&o.ports.length>0&&o.ports.forEach(z=>{let O=document.createElementNS(n,"circle");O.setAttribute("cx",String(j+z.offset.x)),O.setAttribute("cy",String(q+z.offset.y)),O.setAttribute("r","4"),O.setAttribute("class","viz-port"),O.setAttribute("data-viz-role","port"),O.setAttribute("data-node",o.id),O.setAttribute("data-port",z.id),A.appendChild(O);});let he=$.get(o.id);if(he&&he.length>0){let z=A.querySelector(':scope > [data-viz-role="container-children"]');z||(z=document.createElementNS(n,"g"),z.setAttribute("class","viz-container-children"),z.setAttribute("data-viz-role","container-children"),A.appendChild(z)),he.forEach(O=>s(O,z));}else {let z=A.querySelector(':scope > [data-viz-role="container-children"]');z&&z.remove();}};v.forEach(o=>s(o,g)),w.forEach(o=>{let C=o.getAttribute("data-id");C&&!B.has(C)&&o.remove();});let x=Array.from(b.children).filter(o=>o.tagName==="g"),S=new Map;x.forEach(o=>{let C=o.getAttribute("data-overlay-id");C&&S.set(C,o);});let G=new Set;d&&d.length>0&&d.forEach(o=>{let C=ye.get(o.id);if(C){let A=o.key||o.id;G.add(A);let F=S.get(A);F||(F=document.createElementNS(n,"g"),F.setAttribute("data-overlay-id",A),F.setAttribute("data-viz-role","overlay-group"),b.appendChild(F)),F.setAttribute("class",`viz-overlay-${o.id}${o.className?` ${o.className}`:""}`);let R={spec:o,nodesById:c,edgesById:new Map(a.map(Y=>[Y.id,Y])),scene:e,registry:ye};C.update?C.update(R,F):F.innerHTML=C.render(R);}}),x.forEach(o=>{let C=o.getAttribute("data-overlay-id");C&&!G.has(C)&&o.remove();}),Ee.set(u,Ne(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 A=n.get(s.parentId);A&&(S+=A.dx,G+=A.dy);}(x.x!==void 0||x.y!==void 0||S!==s.pos.x||G!==s.pos.y)&&(x.x=S,x.y=G);let C=Object.keys(x).length>0?x:void 0;return {...s,runtime:C}}),f=d.map(s=>i?s:{...s,runtime:void 0}),g={...e,nodes:u,edges:f},b=new Map(u.map(s=>[s.id,s])),m=new Map(f.map(s=>[s.id,s])),h=`<svg viewBox="0 0 ${l.w} ${l.h}" xmlns="http://www.w3.org/2000/svg">`;h+=`<style>${Ze}</style>`,h+=`
|
|
117
|
+
<defs>`;let k=new Set;d.forEach(s=>{let x=s.style?.stroke;if(s.markerEnd&&s.markerEnd!=="none"){let S=ge(s.markerEnd,x,"end");k.has(S)||(k.add(S),h+=We(s.markerEnd,x??"currentColor",S,"end"));}if(s.markerStart&&s.markerStart!=="none"){let S=ge(s.markerStart,x,"start");k.has(S)||(k.add(S),h+=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)=>{h+=ot(x,s);});let v=new Set,w=g.sketch?.enabled;u.forEach(s=>{(s.style?.sketch||w)&&v.add(Re(s.style,s.id));}),f.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=>{h+=lt(ve(s),s);}),h+=`
|
|
118
|
+
</defs>`,h+='<g class="viz-layer-edges" data-viz-layer="edges">',f.forEach(s=>{let x=He(s,b);if(!x)return;let{start:S,end:G}=x,o="",C="";s.animations&&s.animations.forEach(y=>{if(y.when===false)return;let V=ke.getEdgeRenderer(y.id);if(V){if(V.getClass&&(o+=` ${V.getClass({spec:y,element:s})}`),V.getStyle){let E=V.getStyle({spec:y,element:s});Object.entries(E).forEach(([D,W])=>{C+=`${D}: ${W}; `;});}}else o+=` ${Fe(y.id)}`,Ke(y.params).forEach(([E,D])=>{C+=`${E}: ${D}; `;});});let A=s.markerEnd&&s.markerEnd!=="none"?`marker-end="url(#${ge(s.markerEnd,s.style?.stroke,"end")})"`:"",F=s.markerStart&&s.markerStart!=="none"?`marker-start="url(#${ge(s.markerStart,s.style?.stroke,"start")})"`:"",R;if(S&&G&&S===G)R=chunkHBGEN4P6_js.f(S,s);else {let y=chunkHBGEN4P6_js.d(S,G,s);R=chunkHBGEN4P6_js.e(y.start,y.end,s.routing,s.waypoints);}if(this._edgePathResolver){let y=V=>{let E=He(V,b);if(!E)return "";if(E.start&&E.end&&E.start===E.end)return chunkHBGEN4P6_js.f(E.start,V).d;let D=chunkHBGEN4P6_js.d(E.start,E.end,V);return chunkHBGEN4P6_js.e(D.start,D.end,V.routing,V.waypoints).d};try{let V=this._edgePathResolver(s,g,E=>y(E));typeof V=="string"&&V&&(R.d=V);}catch(V){console.warn(`VizBuilder: edge path resolver threw for edge ${s.id}`,V);}}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,re=P?" viz-sketch":"";h+=`<g data-id="${s.id}" data-viz-role="edge-group" class="viz-edge-group${re} ${s.className||""} ${o}" style="${C}${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 y=be(s.style.strokeDasharray);y&&(J+=`stroke-dasharray: ${y}; `);}let p="";if(P){let y=0;for(let V=0;V<s.id.length;V++)y=Math.imul(31,y)+s.id.charCodeAt(V)|0;p=` filter="url(#${ve(Math.abs(y))})"`;}h+=`<path d="${R.d}" class="viz-edge" data-viz-role="edge-line" ${A} ${F} style="${J}"${q}${p} />`,Be(s).forEach((y,V)=>{let E=we(y,R),D=`viz-edge-label ${y.className||""}`,K=ue(E.x,E.y,y.rich??y.text,{className:D,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="${V}" data-label-position="${y.position}" `);h+=K;}),h+="</g>";}),h+="</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),C="",A="";s.runtime?.opacity!==void 0&&(A+=`opacity: ${s.runtime.opacity}; `),s.animations&&s.animations.forEach(E=>{if(E.when===false)return;let D=ke.getNodeRenderer(E.id);if(D){if(D.getClass&&(C+=` ${D.getClass({spec:E,element:s})}`),D.getStyle){let W=D.getStyle({spec:E,element:s});Object.entries(W).forEach(([K,Q])=>{A+=`${K}: ${Q}; `;});}}else C+=` ${Fe(E.id)}`,Ke(E.params).forEach(([W,K])=>{A+=`${W}: ${K}; `;});});let F=!!s.container,R=s.style?.sketch||w,Y=`viz-node-group${F?" viz-container":""}${R?" viz-sketch":""} ${s.className||""} ${C}`,j=s.runtime?.scale,q=s.runtime?.rotation,P="";if(R){let E=Re(s.style,s.id);P=` filter="url(#${ve(E)})"`;}let re=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="${A}"${re}${P}>`;let J=be(s.style?.strokeDasharray),p=s.style?.shadow?`url(#${Pe(Oe(s.style.shadow))})`:void 0,N=ur({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:p});if(x+=chunkOZAFCKI7_js.h(o,{x:S,y:G},N),s.image){let E=Ae(s,s.image.width,s.image.height,{position:s.image.position,dx:s.image.dx,dy:s.image.dy}),D=s.image.preserveAspectRatio?` preserveAspectRatio="${fe(s.image.preserveAspectRatio)}"`:"",W=fe(s.image.href);x+=`<image x="${E.x}" y="${E.y}" width="${s.image.width}" height="${s.image.height}" href="${W}"${D} class="viz-node-image" data-viz-role="node-image" />`;}if(s.icon){let E=chunkOZAFCKI7_js.b.get(s.icon.id);if(!E)console.warn(`VizCraft: icon '${s.icon.id}' not found. Use registerIcon().`);else {let D=Ae(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:${fe(s.icon.color)}"`:"",K=at(E,s.icon.size,s.icon.size);x+=`<g transform="translate(${D.x} ${D.y})" class="viz-node-icon" data-viz-role="node-icon"${W}>${K}</g>`;}}if(s.svgContent){let E=Ae(s,s.svgContent.width,s.svgContent.height,{position:s.svgContent.position,dx:s.svgContent.dx,dy:s.svgContent.dy}),D=Ct(s.svgContent.content,s.svgContent.width,s.svgContent.height);x+=`<g transform="translate(${E.x} ${E.y})" class="viz-node-svg" data-viz-role="node-svg">${D}</g>`;}if(F&&s.container.headerHeight&&"w"in o&&"h"in o){let E=o.w,D=o.h,W=G-D/2+s.container.headerHeight;x+=`<line x1="${S-E/2}" y1="${W}" x2="${S+E/2}" y2="${W}" stroke="${s.style?.stroke??"#111"}" stroke-width="${s.style?.strokeWidth??2}" class="viz-container-header" data-viz-role="container-header" />`;}let y=s.compartments&&s.compartments.length>0;if(y&&"w"in o){let E=o.w,D=o.h,W=G-D/2,K=8;for(let Q=0;Q<s.compartments.length;Q++){let T=s.compartments[Q];if(Q>0){let M=W+T.y;x+=`<line x1="${S-E/2}" y1="${M}" x2="${S+E/2}" y2="${M}" stroke="${s.style?.stroke??"#111"}" stroke-width="${s.style?.strokeWidth??2}" class="viz-compartment-divider" data-viz-role="compartment-divider" data-compartment="${T.id}" />`;}if(T.entries&&T.entries.length>0)for(let M of T.entries){let ee=S-E/2+K+(M.label?.dx||0),ie=W+T.y+M.y+M.height/2+(M.label?.dy||0),ne=`viz-compartment-entry ${M.label?.className||""}`,he=ue(ee,ie,M.label?.rich??M.text,{className:ne,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??E-K*2,lineHeight:M.label?.lineHeight,verticalAlign:M.label?.verticalAlign,overflow:M.label?.overflow}).replace("<text ",`<text data-viz-role="compartment-entry" data-compartment="${fe(T.id)}" data-entry="${fe(M.id)}" `);x+=he;}else if(T.label){let M=S-E/2+K+(T.label.dx||0),ee=W+T.y+T.height/2+(T.label.dy||0),ie=`viz-compartment-label ${T.label.className||""}`,ne=ue(M,ee,T.label.rich??T.label.text,{className:ie,fill:T.label.fill,fontSize:T.label.fontSize,fontWeight:T.label.fontWeight,fontFamily:T.label.fontFamily,textAnchor:T.label.textAnchor||"start",dominantBaseline:T.label.dominantBaseline||"middle",maxWidth:T.label.maxWidth??E-K*2,lineHeight:T.label.lineHeight,verticalAlign:T.label.verticalAlign,overflow:T.label.overflow}).replace("<text ",`<text data-viz-role="compartment-label" data-compartment="${T.id}" `);x+=ne;}}}if(s.label&&!y){let E=S+(s.label.dx||0),D=G+(s.label.dy||0);if(F&&s.container.headerHeight&&"h"in o&&!s.label.dy){let T=o.h;D=G-T/2+s.container.headerHeight/2,E=S+(s.label.dx||0);}let W=`viz-node-label ${s.label.className||""}`,Q=ue(E,D,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 E=chunkOZAFCKI7_js.o(o),D=E.width/2,W=E.height/2;for(let K of s.badges){let Q=K.fontSize??10,T=3,M=Q+T*2,ee=Math.max(Q*K.text.length*.7+T*2,M),ie,ne;if(K.position==="top-left"?(ie=S-D-ee/4,ne=G-W-M/4):K.position==="top-right"?(ie=S+D-ee*3/4,ne=G-W-M/4):K.position==="bottom-left"?(ie=S-D-ee/4,ne=G+W-M*3/4):(ie=S+D-ee*3/4,ne=G+W-M*3/4),x+='<g class="viz-badge" data-viz-role="badge">',K.background){let O=fe(K.background);x+=`<rect x="${ie}" y="${ne}" width="${ee}" height="${M}" rx="${M/2}" fill="${O}" />`;}let he=K.fill?` fill="${fe(K.fill)}"`:"",z=K.text.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");x+=`<text x="${ie+ee/2}" y="${ne+M/2}" text-anchor="middle" dominant-baseline="central" font-size="${Q}"${he}>${z}</text>`,x+="</g>";}}s.ports&&s.ports.length>0&&s.ports.forEach(E=>{let D=S+E.offset.x,W=G+E.offset.y;x+=`<circle cx="${D}" cy="${W}" r="4" class="viz-port" data-viz-role="port" data-node="${s.id}" data-port="${E.id}" />`;});let V=_.get(s.id);return V&&V.length>0&&(x+='<g class="viz-container-children" data-viz-role="container-children">',V.forEach(E=>{x+=B(E);}),x+="</g>"),x+="</g>",x};return h+='<g class="viz-layer-nodes" data-viz-layer="nodes">',u.forEach(s=>{s.parentId||(h+=B(s));}),h+="</g>",c&&c.length>0&&(h+='<g class="viz-layer-overlays" data-viz-layer="overlays">',c.forEach(s=>{let x=ye.get(s.id);x&&(h+=x.render({spec:s,nodesById:b,edgesById:m,scene:g,registry:ye}));}),h+="</g>"),h+="</svg>",h}};function vi(){return new dt}function Ai(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 cr(t,i)}function cr(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=chunkHBGEN4P6_js.f(t,r);a=n,d=n.exitPoint,c=n.entryPoint;}else {let n=chunkHBGEN4P6_js.d(t,i,r);a=chunkHBGEN4P6_js.e(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 chunk5W3PZTNU_js.c}});Object.defineProperty(exports,"OVERLAY_RUNTIME_DIRTY",{enumerable:true,get:function(){return chunk5W3PZTNU_js.a}});Object.defineProperty(exports,"buildAnimationSpec",{enumerable:true,get:function(){return chunk5W3PZTNU_js.d}});Object.defineProperty(exports,"createBuilderPlayback",{enumerable:true,get:function(){return chunk5W3PZTNU_js.f}});Object.defineProperty(exports,"createScenePlayback",{enumerable:true,get:function(){return chunk5W3PZTNU_js.e}});Object.defineProperty(exports,"playAnimationSpec",{enumerable:true,get:function(){return chunk5W3PZTNU_js.g}});Object.defineProperty(exports,"computeEdgeEndpoints",{enumerable:true,get:function(){return chunkHBGEN4P6_js.d}});Object.defineProperty(exports,"computeEdgePath",{enumerable:true,get:function(){return chunkHBGEN4P6_js.e}});Object.defineProperty(exports,"computeSelfLoop",{enumerable:true,get:function(){return chunkHBGEN4P6_js.f}});Object.defineProperty(exports,"distanceSquare",{enumerable:true,get:function(){return chunkHBGEN4P6_js.h}});Object.defineProperty(exports,"edgeDistance",{enumerable:true,get:function(){return chunkHBGEN4P6_js.m}});Object.defineProperty(exports,"getEffectiveNodeBounds",{enumerable:true,get:function(){return chunkHBGEN4P6_js.i}});Object.defineProperty(exports,"hitTest",{enumerable:true,get:function(){return chunkHBGEN4P6_js.j}});Object.defineProperty(exports,"hitTestRect",{enumerable:true,get:function(){return chunkHBGEN4P6_js.k}});Object.defineProperty(exports,"nearestPort",{enumerable:true,get:function(){return chunkHBGEN4P6_js.l}});Object.defineProperty(exports,"pointInRect",{enumerable:true,get:function(){return chunkHBGEN4P6_js.g}});Object.defineProperty(exports,"setupPanZoom",{enumerable:true,get:function(){return chunkHBGEN4P6_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=_r;exports.collectEdgeLabels=Be;exports.coreCircleOverlay=Tt;exports.coreDataPointOverlay=Gt;exports.coreFlowAnimation=_t;exports.coreGridLabelsOverlay=Dt;exports.coreGroupOverlay=It;exports.coreRectOverlay=Lt;exports.coreSignalOverlay=Rt;exports.coreTextOverlay=Mt;exports.defaultCoreAnimationRegistry=ke;exports.defaultCoreOverlayRegistry=ye;exports.resolveDasharray=be;exports.resolveEdgeGeometry=Ai;exports.resolveEdgeGeometryFromData=cr;exports.resolveEdgeLabelPosition=we;exports.viz=vi;
|
package/dist/index.mjs
CHANGED
|
@@ -103,16 +103,16 @@ import {d as d$1,b,f as f$1,a as a$1}from'./chunk-R5DAQ3FO.mjs';export{c as Anim
|
|
|
103
103
|
stroke-linejoin: round;
|
|
104
104
|
stroke-width: 2;
|
|
105
105
|
}
|
|
106
|
-
`;var Ye=class{nodeAnims=new Map;edgeAnims=new Map;constructor(){}registerNode(e,t){return this.nodeAnims.set(e,t),this}registerEdge(e,t){return this.edgeAnims.set(e,t),this}getNodeRenderer(e){return this.nodeAnims.get(e)}getEdgeRenderer(e){return this.edgeAnims.get(e)}},
|
|
106
|
+
`;var Ye=class{nodeAnims=new Map;edgeAnims=new Map;constructor(){}registerNode(e,t){return this.nodeAnims.set(e,t),this}registerEdge(e,t){return this.edgeAnims.set(e,t),this}getNodeRenderer(e){return this.nodeAnims.get(e)}getEdgeRenderer(e){return this.edgeAnims.get(e)}},_t={getClass:()=>"viz-anim-flow",getStyle:({spec:r})=>({"--viz-anim-duration":r.params?.duration??"2s"})},ke=new Ye().registerEdge("flow",_t);var Xe=class{overlays=new Map;register(e,t){return this.overlays.set(e,t),this}get(e){return this.overlays.get(e)}},Rt={render:({spec:r,nodesById:e})=>{let{from:t,to:i,progress:l}=r.params,a=e.get(t),d=e.get(i);if(!a||!d)return "";let c=a.pos.x+(d.pos.x-a.pos.x)*l,n=a.pos.y+(d.pos.y-a.pos.y)*l,u=Math.abs(r.params.magnitude??1);u>1&&(u=1);let f=2+u*4,g=r.className??"viz-signal";return `
|
|
107
107
|
<g transform="translate(${c}, ${n})">
|
|
108
|
-
<g class="${
|
|
108
|
+
<g class="${g}">
|
|
109
109
|
<circle r="10" fill="transparent" stroke="none" />
|
|
110
|
-
<circle r="${
|
|
110
|
+
<circle r="${f}" class="viz-signal-shape" />
|
|
111
111
|
</g>
|
|
112
112
|
</g>
|
|
113
|
-
`}},_t={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(([v,m])=>{let h=parseInt(v,10),E=t.padding.x+h*u+u/2,$=r.className||"viz-grid-label";f+=`<text x="${E}" y="${c}" class="${$}" text-anchor="middle">${m}</text>`;}),d&&Object.entries(d).forEach(([v,m])=>{let h=parseInt(v,10),E=t.padding.y+h*g+g/2,$=r.className||"viz-grid-label";f+=`<text x="${n}" y="${E}" dy=".35em" class="${$}" text-anchor="middle">${m}</text>`;}),f}},Rt={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,v=n.pos.x+g,m=n.pos.y+f,h=a.get(c.id);h||(h=document.createElementNS(l,"circle"),h.setAttribute("data-id",c.id),h.setAttribute("r","6"),t.appendChild(h)),h.setAttribute("cx",String(v)),h.setAttribute("cy",String(m));let E=r.className??"viz-data-point";h.getAttribute("class")!==E&&h.setAttribute("class",E);}),a.forEach((c,n)=>{d.has(n)||c.remove();});}},Dt={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",v=a!==void 0?` rx="${a}"`:"",m=d!==void 0?` ry="${d}"`:"",h=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}"${v}${m}${h} 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:v}=r.params,m=r.className??"viz-overlay-rect",h=e.querySelector("rect");h||(h=document.createElementNS(t,"rect"),e.appendChild(h)),h.setAttribute("x",String(i)),h.setAttribute("y",String(l)),h.setAttribute("width",String(a)),h.setAttribute("height",String(d)),g===void 0?(h.setAttribute("fill","#3b82f6"),h.setAttribute("fill-opacity","0.12")):(h.setAttribute("fill",g),h.removeAttribute("fill-opacity")),f===void 0?(h.setAttribute("stroke","#3b82f6"),h.setAttribute("stroke-opacity","0.9")):(h.setAttribute("stroke",f),h.removeAttribute("stroke-opacity")),h.setAttribute("stroke-width",String(v??3)),c!==void 0?h.setAttribute("rx",String(c)):h.removeAttribute("rx"),n!==void 0?h.setAttribute("ry",String(n)):h.removeAttribute("ry"),u!==void 0?h.setAttribute("opacity",String(u)):h.removeAttribute("opacity"),h.setAttribute("class",m);}},Gt={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);}},Lt={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}"`:"",v=d!==void 0?` font-size="${d}"`:"",m=c!==void 0?` font-weight="${c}"`:"",h=n!==void 0?` text-anchor="${n}"`:"",E=u!==void 0?` dominant-baseline="${u}"`:"";return `<text x="${e}" y="${t}" fill="${a??"#111"}"${f}${v}${m}${h}${E} 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,v=r.className??"viz-overlay-text",m=e.querySelector("text");m||(m=document.createElementNS(t,"text"),e.appendChild(m)),m.setAttribute("x",String(i)),m.setAttribute("y",String(l)),m.setAttribute("fill",c??"#111"),d!==void 0?m.setAttribute("opacity",String(d)):m.removeAttribute("opacity"),n!==void 0?m.setAttribute("font-size",String(n)):m.removeAttribute("font-size"),u!==void 0?m.setAttribute("font-weight",String(u)):m.removeAttribute("font-weight"),g!==void 0?m.setAttribute("text-anchor",g):m.removeAttribute("text-anchor"),f!==void 0?m.setAttribute("dominant-baseline",f):m.removeAttribute("dominant-baseline"),m.setAttribute("class",v),m.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 v=vt(r.progress??0),m=xt(g),h=xt(f);l=m.x+(h.x-m.x)*v+t,a=m.y+(h.y-m.y)*v+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 Tt={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((v,m)=>{let h=g.get(v.id);if(!h)return;let E={spec:v,nodesById:e,edgesById:t,scene:i,registry:g},$=v.key?`key:${v.key}`:`idx:${m}:${v.id}`;f+=`<g data-viz-role="overlay-child" data-overlay-child-id="${$}">`,f+=h.render(E),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(m=>{if(m instanceof SVGGElement){let h=m.getAttribute("data-overlay-child-id");h&&f.set(h,m);}});let v=new Set;c.forEach((m,h)=>{let E=d.get(m.id);if(!E)return;let $=m.key?`key:${m.key}`:`idx:${h}:${m.id}`;v.add($);let b=f.get($);b||(b=document.createElementNS(g,"g"),b.setAttribute("data-viz-role","overlay-child"),b.setAttribute("data-overlay-child-id",$),a.appendChild(b));let w={spec:m,nodesById:e,edgesById:t,scene:i,registry:d};E.update?E.update(w,b):b.innerHTML=E.render(w);}),f.forEach((m,h)=>{v.has(h)||m.remove();});}},ye=new Xe().register("signal",Pt).register("grid-labels",_t).register("data-points",Rt).register("rect",Dt).register("circle",Gt).register("text",Lt).register("group",Tt);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 Pr(r){let e=new ze;return r(e),e.build()}var Mt={solid:"",dashed:"8, 4",dotted:"2, 4","dash-dot":"8, 4, 2, 4"};function be(r){return !r||r==="solid"?"":Mt[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",Te={dx:2,dy:2,blur:4,color:"rgba(0,0,0,0.2)"};function It(r){return {dx:r.dx??Te.dx,dy:r.dy??Te.dy,blur:r.blur??Te.blur,color:r.color??Te.color}}function Ht(r){let e=r.color.replace(/[^a-zA-Z0-9]/g,"_");return `viz-shadow-${r.dx}-${r.dy}-${r.blur}-${e}`}function Wt(r,e){let t=It(e),i=Ht(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 qt(r){return `viz-sketch-${r}`}function Ft(r,e){let t=(r^e*2654435761)>>>0|1;return t^=t<<13,t^=t>>>17,t^=t<<5,(t>>>0)/4294967296}function Ce(r,e,t,i){return t+Ft(r,e)*(i-t)}function At(r,e){let t=qt(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=Ce(e,1,.009,.015).toFixed(4),c=Ce(e,2,2.5,4).toFixed(1),n=Ce(e,3,3,5).toFixed(1),u=Ce(e,4,.3,1.6).toFixed(2),g=Ce(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 v=document.createElementNS(X,"feTurbulence");v.setAttribute("type","fractalNoise"),v.setAttribute("baseFrequency",d),v.setAttribute("numOctaves","2"),v.setAttribute("seed",String(a)),v.setAttribute("result","n2"),l.appendChild(v);let m=document.createElementNS(X,"feDisplacementMap");m.setAttribute("in","SourceGraphic"),m.setAttribute("in2","n1"),m.setAttribute("scale",c),m.setAttribute("xChannelSelector","R"),m.setAttribute("yChannelSelector","G"),m.setAttribute("result","s1"),l.appendChild(m);let h=document.createElementNS(X,"feDisplacementMap");h.setAttribute("in","SourceGraphic"),h.setAttribute("in2","n2"),h.setAttribute("scale",n),h.setAttribute("xChannelSelector","G"),h.setAttribute("yChannelSelector","R"),h.setAttribute("result","s2"),l.appendChild(h);let E=document.createElementNS(X,"feOffset");E.setAttribute("in","s2"),E.setAttribute("dx",u),E.setAttribute("dy",g),E.setAttribute("result","s2off"),l.appendChild(E);let $=document.createElementNS(X,"feComposite");$.setAttribute("in","s1"),$.setAttribute("in2","s2off"),$.setAttribute("operator","over"),l.appendChild($),i.appendChild(l);}}return t}function Kt(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 jt(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}-${jt(e)}`:`${i}${l}`}function Ut(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 kt(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=Ut(t,e);c&&d.appendChild(c),a.appendChild(d);}}return l}function Ne(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,v=r.querySelector('[data-viz-layer="nodes"]')||r.querySelector(".viz-layer-nodes");if(v){let h=Array.from(v.querySelectorAll("g[data-id]"));for(let E of h){let $=E.getAttribute("data-id");if(!$)continue;t.set($,E);let b=E.querySelector('[data-viz-role="node-shape"]')||E.querySelector(".viz-node-shape");b&&i.set($,b);let w=E.querySelector('[data-viz-role="node-label"]')||E.querySelector(".viz-node-label");w&&l.set($,w);let _=E.querySelector('[data-viz-role="node-image"]')||E.querySelector(".viz-node-image");_&&a.set($,_);let B=E.querySelector('[data-viz-role="node-icon"]')||E.querySelector(".viz-node-icon");B&&d.set($,B);let s=E.querySelector('[data-viz-role="node-svg"]')||E.querySelector(".viz-node-svg");s&&c.set($,s);}}let m=r.querySelector('[data-viz-layer="edges"]')||r.querySelector(".viz-layer-edges");if(m){let h=Array.from(m.querySelectorAll("g[data-id]"));for(let E of h){let $=E.getAttribute("data-id");if(!$)continue;n.set($,E);let b=E.querySelector('[data-viz-role="edge-line"]')||E.querySelector(".viz-edge");b&&u.set($,b);let w=E.querySelector('[data-viz-role="edge-hit"]')||E.querySelector(".viz-edge-hit");w&&g.set($,w);let _=Array.from(E.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 Zt(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$2){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$2.nodeGroupsById.get(n.id),g$1=e$2.nodeShapesById.get(n.id);if(!u||!g$1)continue;let{x:f,y:v}=d$2(n);if(n.parentId){let B=i.get(n.parentId);B&&(f+=B.dx,v+=B.dy);}let m=e$1(n);g(g$1,m,{x:f,y:v});let{w:h,h:E}=Zt(m);if(h>0&&E>0){let B=e$2.nodeImagesById.get(n.id);if(B&&n.image){let S=Je(f,v,h,E,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$2.nodeIconsById.get(n.id);if(s&&n.icon){let S=Je(f,v,h,E,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$2.nodeSvgsById.get(n.id);if(x&&n.svgContent){let S=Je(f,v,h,E,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 m&&"h"in m){let B=u.querySelector('[data-viz-role="container-header"]');if(B){let s=m.w,x=m.h,S=v-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$2.nodeLabelsById.get(n.id);if($&&n.label){let B=f+(n.label.dx||0),s=v+(n.label.dy||0);if(n.container?.headerHeight&&"h"in m&&!n.label.dy){let S=m.h;s=v-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$1.removeAttribute("opacity")):(u.style.removeProperty("opacity"),n.style?.opacity!==void 0?g$1.setAttribute("opacity",String(n.style.opacity)):g$1.removeAttribute("opacity")),n.style?.shadow){let B=Wt(e$2.svg,n.style.shadow);g$1.setAttribute("filter",`url(#${B})`);}else g$1.removeAttribute("filter");if(n.style?.sketch||r.sketch?.enabled){let B=Kt(n.style,n.id),s=At(e$2.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} ${v}) rotate(${s}) scale(${B}) translate(${-f} ${-v})`);}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(v+S.offset.y)));});}let l=e$2.edgePathResolver;for(let n of r.edges){let u=e$2.edgeGroupsById.get(n.id),g=e$2.edgeLinesById.get(n.id);if(!u||!g)continue;let f$1=n.from?t.get(n.from)??null:null,v=n.to?t.get(n.to)??null:null;if(n.from&&!f$1||n.to&&!v||!f$1&&!n.fromAt&&!v&&!n.toAt)continue;let m;if(f$1&&v&&f$1===v)m=f(f$1,n);else {let b=d(f$1,v,n);m=e(b.start,b.end,n.routing,n.waypoints);}if(l){let b=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 f(_,w).d;let s=d(_,B,w);return e(s.start,s.end,w.routing,w.waypoints).d};try{let w=l(n,r,b);typeof w=="string"&&w&&(m.d=w);}catch(w){console.warn(`RuntimePatcher: edge path resolver threw for edge ${n.id}`,w);}}if(g.setAttribute("d",m.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 b=n.style?.stroke?kt(e$2.svg,n.style.stroke,n.markerEnd,"end"):Qe(n.markerEnd,void 0,"end");g.setAttribute("marker-end",`url(#${b})`);}else g.removeAttribute("marker-end");if(n.markerStart&&n.markerStart!=="none"){let b=n.style?.stroke?kt(e$2.svg,n.style.stroke,n.markerStart,"start"):Qe(n.markerStart,void 0,"start");g.setAttribute("marker-start",`url(#${b})`);}else g.removeAttribute("marker-start");let h=e$2.edgeHitsById.get(n.id);h&&h.setAttribute("d",m.d);let E=e$2.edgeLabelsById.get(n.id);if(E){let b=Be(n);E.forEach((w,_)=>{let B=b[_];if(!B)return;let s=we(B,m);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 b=0;for(let B=0;B<n.id.length;B++)b=Math.imul(31,b)+n.id.charCodeAt(B)|0;let w=Math.abs(b),_=At(e$2.svg,w);g.setAttribute("filter",`url(#${_})`),u.classList.contains("viz-sketch")||u.classList.add("viz-sketch");}else {let b=g.getAttribute("filter");b&&b.startsWith("url(#viz-sketch-")&&g.removeAttribute("filter"),u.classList.contains("viz-sketch")&&u.classList.remove("viz-sketch");}}let a=[],d$1=new Map;for(let n of r.nodes)if(n.parentId){let u=d$1.get(n.parentId);u||(u=[],d$1.set(n.parentId,u)),u.push(n);}else a.push(n);a.sort((n,u)=>(n.zIndex||0)-(u.zIndex||0));let c=e$2.svg.querySelector('[data-viz-layer="nodes"]')||e$2.svg.querySelector(".viz-layer-nodes");if(c){let n=c.firstElementChild;for(let u of a){let g=e$2.nodeGroupsById.get(u.id);g&&(n!==g?c.insertBefore(g,n):n=n.nextElementSibling);}}for(let[n,u]of d$1.entries()){u.sort((v,m)=>(v.zIndex||0)-(m.zIndex||0));let g=e$2.nodeGroupsById.get(n);if(!g)continue;let f=g.querySelector(':scope > [data-viz-role="container-children"]');if(f){let v=f.firstElementChild;for(let m of u){let h=e$2.nodeGroupsById.get(m.id);h&&(v!==h?f.insertBefore(h,v):v=v.nextElementSibling);}}}}function Yt(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 Xt=1.2;function ue(r,e,t,i={}){let{className:l="",fill:a,fontSize:d,fontWeight:c,fontFamily:n,textAnchor:u="middle",dominantBaseline:g="middle",maxWidth:f,lineHeight:v=Xt,verticalAlign:m="middle",overflow:h}=i,E=12;if(typeof d=="number")E=d;else if(typeof d=="string"){let G=parseFloat(d);isNaN(G)||(E=G);}let $=typeof t!="string",b=[],w=[];if($)w=Jt(t.tokens);else if(b=Yt(t,f,E),f&&h&&h!=="visible")if(h==="ellipsis"&&b.length>2){let G=b[1];G&&(b=[b[0],G.substring(0,Math.max(0,G.length-3))+"..."]);}else h==="clip"&&b.length>2&&(b=[b[0],b[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:b.length,x=0;m==="middle"?x=-((s-1)*v)/2:m==="bottom"?x=-((s-1)*v):m==="top"&&(x=0);let S=$?w.map((G,o)=>{let C=Et(o,x,v),A=G.map(F=>Qt(F)).join("");return `<tspan data-viz-role="text-line" x="${r}" dy="${C}">${A}</tspan>`}):b.map((G,o)=>{let C=Et(o,x,v);return `<tspan data-viz-role="text-line" x="${r}" dy="${C}">${tt(G)}</tspan>`});return `<text x="${r}" y="${e}" class="${l}"${B}>${S.join("")}</text>`}function Et(r,e,t){return r===0?e===0?"0":`${e}em`:`${t}em`}function Jt(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 Qt(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(" "):""}>${tt(r.text)}</tspan>`;return r.href?`<a href="${$e(r.href)}">${l}</a>`:l}function $e(r){return tt(r)}function tt(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});t.height!==void 0&&i.height(t.height);});}var er=30,rt=16,it=10;function tr(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){let a=l.label&&typeof l.label.fontSize=="number"?l.label.fontSize:rt;i+=a*(l.label?.lineHeight??1.2);}return i}if(!r.label)return er;let e=(r.label.text.match(/\n/g)?.length??0)+1,t=typeof r.label.fontSize=="number"?r.label.fontSize:rt;return e*t*(r.label.lineHeight??1.2)+it*2}function rr(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=tr(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 v=(g.label&&typeof g.label.fontSize=="number"?g.label.fontSize:rt)*(g.label?.lineHeight??1.2),m={id:g.id,y:u,height:v,text:g.text};return g.label&&(m.label=g.label),g.onClick&&(m.onClick=g.onClick),g.tooltip&&(m.tooltip=g.tooltip),u+=v,m});}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}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}};return this._pending.entries.push({id:e,text:t,label:l,onClick:i?.onClick,tooltip:i?.tooltip}),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=rr(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.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}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 ir(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="${ir(e.color)}" flood-opacity="1"/></filter>`}function ve(r){return `viz-sketch-${r}`}function nr(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+nr(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 Re(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 sr(r){return typeof r=="object"&&r!==null&&"then"in r&&typeof r.then=="function"}function or(r){return r.replace(/[^a-zA-Z0-9]/g,"_")}function ge(r,e,t="end"){if(r==="none")return "";let i=`viz-${r}`,l=t==="start"?"-start":"";return e?`${i}${l}-${or(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 fe(r){return r.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}var lr={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=lr[r];if(!l)return "";let a=fe(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 Ae(r,e,t,i$1){let{x:l,y:a}=d$2(r),d=i(r),c=i$1?.position??"center",n=i$1?.dx??0,u=i$1?.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 wt(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 ke=new WeakMap,qe=new WeakMap;function ar(r,e){Object.entries(e).forEach(([t,i])=>{i===void 0?r.removeAttribute(t):r.setAttribute(t,String(i));});}function dr(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=Ne(i,{edgePathResolver:this._edgePathResolver});ke.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(sr(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=ke.get(i);l?l.edgePathResolver=e:ke.set(i,Ne(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=d$1(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$1=new Map(i.nodes.map(u=>[u.id,u])),n=new Map(i.edges.map(u=>[u.id,u]));this._tooltipController=c(e,l,c$1,n),this._addTooltipA11y(l,i);}let a$1;if(l&&t?.panZoom){let d=l.querySelector(".viz-viewport");d&&(a$1=a(l,d,i,t));}return this._panZoomController=a$1,this._dispatchEvent("mount",{container:e,controller:a$1}),a$1}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
|
+
`}},Dt={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,f=(l-t.padding.y*2)/t.rows,g="";return a&&Object.entries(a).forEach(([b,m])=>{let h=parseInt(b,10),k=t.padding.x+h*u+u/2,$=r.className||"viz-grid-label";g+=`<text x="${k}" y="${c}" class="${$}" text-anchor="middle">${m}</text>`;}),d&&Object.entries(d).forEach(([b,m])=>{let h=parseInt(b,10),k=t.padding.y+h*f+f/2,$=r.className||"viz-grid-label";g+=`<text x="${n}" y="${k}" dy=".35em" class="${$}" text-anchor="middle">${m}</text>`;}),g}},Gt={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,f=a.pos.y+n,g=r.className??"viz-data-point";i+=`<circle data-id="${l.id}" cx="${u}" cy="${f}" r="6" class="${g}" />`;}),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),f=(u%5-2)*10,g=(u%3-1)*10,b=n.pos.x+f,m=n.pos.y+g,h=a.get(c.id);h||(h=document.createElementNS(l,"circle"),h.setAttribute("data-id",c.id),h.setAttribute("r","6"),t.appendChild(h)),h.setAttribute("cx",String(b)),h.setAttribute("cy",String(m));let k=r.className??"viz-data-point";h.getAttribute("class")!==k&&h.setAttribute("class",k);}),a.forEach((c,n)=>{d.has(n)||c.remove();});}},Lt={render:({spec:r})=>{let{x:e,y:t,w:i,h:l,rx:a,ry:d,opacity:c,fill:n,stroke:u,strokeWidth:f}=r.params,g=r.className??"viz-overlay-rect",b=a!==void 0?` rx="${a}"`:"",m=d!==void 0?` ry="${d}"`:"",h=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="${f??3}"${b}${m}${h} class="${g}" />`},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:f,stroke:g,strokeWidth:b}=r.params,m=r.className??"viz-overlay-rect",h=e.querySelector("rect");h||(h=document.createElementNS(t,"rect"),e.appendChild(h)),h.setAttribute("x",String(i)),h.setAttribute("y",String(l)),h.setAttribute("width",String(a)),h.setAttribute("height",String(d)),f===void 0?(h.setAttribute("fill","#3b82f6"),h.setAttribute("fill-opacity","0.12")):(h.setAttribute("fill",f),h.removeAttribute("fill-opacity")),g===void 0?(h.setAttribute("stroke","#3b82f6"),h.setAttribute("stroke-opacity","0.9")):(h.setAttribute("stroke",g),h.removeAttribute("stroke-opacity")),h.setAttribute("stroke-width",String(b??3)),c!==void 0?h.setAttribute("rx",String(c)):h.removeAttribute("rx"),n!==void 0?h.setAttribute("ry",String(n)):h.removeAttribute("ry"),u!==void 0?h.setAttribute("opacity",String(u)):h.removeAttribute("opacity"),h.setAttribute("class",m);}},Tt={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,f=r.className??"viz-overlay-circle",g=e.querySelector("circle");g||(g=document.createElementNS(t,"circle"),e.appendChild(g)),g.setAttribute("cx",String(i)),g.setAttribute("cy",String(l)),g.setAttribute("r",String(a)),c===void 0?(g.setAttribute("fill","#3b82f6"),g.setAttribute("fill-opacity","0.12")):(g.setAttribute("fill",c),g.removeAttribute("fill-opacity")),n===void 0?(g.setAttribute("stroke","#3b82f6"),g.setAttribute("stroke-opacity","0.9")):(g.setAttribute("stroke",n),g.removeAttribute("stroke-opacity")),g.setAttribute("stroke-width",String(u??3)),d!==void 0?g.setAttribute("opacity",String(d)):g.removeAttribute("opacity"),g.setAttribute("class",f);}},Mt={render:({spec:r})=>{let{x:e,y:t,text:i,opacity:l,fill:a,fontSize:d,fontWeight:c,textAnchor:n,dominantBaseline:u}=r.params,f=r.className??"viz-overlay-text",g=l!==void 0?` opacity="${l}"`:"",b=d!==void 0?` font-size="${d}"`:"",m=c!==void 0?` font-weight="${c}"`:"",h=n!==void 0?` text-anchor="${n}"`:"",k=u!==void 0?` dominant-baseline="${u}"`:"";return `<text x="${e}" y="${t}" fill="${a??"#111"}"${g}${b}${m}${h}${k} class="${f}">${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:f,dominantBaseline:g}=r.params,b=r.className??"viz-overlay-text",m=e.querySelector("text");m||(m=document.createElementNS(t,"text"),e.appendChild(m)),m.setAttribute("x",String(i)),m.setAttribute("y",String(l)),m.setAttribute("fill",c??"#111"),d!==void 0?m.setAttribute("opacity",String(d)):m.removeAttribute("opacity"),n!==void 0?m.setAttribute("font-size",String(n)):m.removeAttribute("font-size"),u!==void 0?m.setAttribute("font-weight",String(u)):m.removeAttribute("font-weight"),f!==void 0?m.setAttribute("text-anchor",f):m.removeAttribute("text-anchor"),g!==void 0?m.setAttribute("dominant-baseline",g):m.removeAttribute("dominant-baseline"),m.setAttribute("class",b),m.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 f=e.get(r.from),g=e.get(r.to);if(f&&g){let b=vt(r.progress??0),m=xt(f),h=xt(g);l=m.x+(h.x-m.x)*b+t,a=m.y+(h.y-m.y)*b+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 It={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}"`:"",f=l;if(!f)return `<g transform="${n}"${u}></g>`;let g=`<g transform="${n}"${u}>`;return a.forEach((b,m)=>{let h=f.get(b.id);if(!h)return;let k={spec:b,nodesById:e,edgesById:t,scene:i,registry:f},$=b.key?`key:${b.key}`:`idx:${m}:${b.id}`;g+=`<g data-viz-role="overlay-child" data-overlay-child-id="${$}">`,g+=h.render(k),g+="</g>";}),g+="</g>",g},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 f="http://www.w3.org/2000/svg",g=new Map;Array.from(a.children).forEach(m=>{if(m instanceof SVGGElement){let h=m.getAttribute("data-overlay-child-id");h&&g.set(h,m);}});let b=new Set;c.forEach((m,h)=>{let k=d.get(m.id);if(!k)return;let $=m.key?`key:${m.key}`:`idx:${h}:${m.id}`;b.add($);let v=g.get($);v||(v=document.createElementNS(f,"g"),v.setAttribute("data-viz-role","overlay-child"),v.setAttribute("data-overlay-child-id",$),a.appendChild(v));let w={spec:m,nodesById:e,edgesById:t,scene:i,registry:d};k.update?k.update(w,v):v.innerHTML=k.render(w);}),g.forEach((m,h)=>{b.has(h)||m.remove();});}},ye=new Xe().register("signal",Rt).register("grid-labels",Dt).register("data-points",Gt).register("rect",Lt).register("circle",Tt).register("text",Mt).register("group",It);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 _r(r){let e=new ze;return r(e),e.build()}var Ht={solid:"",dashed:"8, 4",dotted:"2, 4","dash-dot":"8, 4, 2, 4"};function be(r){return !r||r==="solid"?"":Ht[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",Te={dx:2,dy:2,blur:4,color:"rgba(0,0,0,0.2)"};function Wt(r){return {dx:r.dx??Te.dx,dy:r.dy??Te.dy,blur:r.blur??Te.blur,color:r.color??Te.color}}function qt(r){let e=r.color.replace(/[^a-zA-Z0-9]/g,"_");return `viz-shadow-${r.dx}-${r.dy}-${r.blur}-${e}`}function Ft(r,e){let t=Wt(e),i=qt(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 Kt(r){return `viz-sketch-${r}`}function jt(r,e){let t=(r^e*2654435761)>>>0|1;return t^=t<<13,t^=t>>>17,t^=t<<5,(t>>>0)/4294967296}function Ce(r,e,t,i){return t+jt(r,e)*(i-t)}function At(r,e){let t=Kt(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=Ce(e,1,.009,.015).toFixed(4),c=Ce(e,2,2.5,4).toFixed(1),n=Ce(e,3,3,5).toFixed(1),u=Ce(e,4,.3,1.6).toFixed(2),f=Ce(e,5,.2,1.3).toFixed(2),g=document.createElementNS(X,"feTurbulence");g.setAttribute("type","fractalNoise"),g.setAttribute("baseFrequency","0.008"),g.setAttribute("numOctaves","2"),g.setAttribute("seed",String(e)),g.setAttribute("result","n1"),l.appendChild(g);let b=document.createElementNS(X,"feTurbulence");b.setAttribute("type","fractalNoise"),b.setAttribute("baseFrequency",d),b.setAttribute("numOctaves","2"),b.setAttribute("seed",String(a)),b.setAttribute("result","n2"),l.appendChild(b);let m=document.createElementNS(X,"feDisplacementMap");m.setAttribute("in","SourceGraphic"),m.setAttribute("in2","n1"),m.setAttribute("scale",c),m.setAttribute("xChannelSelector","R"),m.setAttribute("yChannelSelector","G"),m.setAttribute("result","s1"),l.appendChild(m);let h=document.createElementNS(X,"feDisplacementMap");h.setAttribute("in","SourceGraphic"),h.setAttribute("in2","n2"),h.setAttribute("scale",n),h.setAttribute("xChannelSelector","G"),h.setAttribute("yChannelSelector","R"),h.setAttribute("result","s2"),l.appendChild(h);let k=document.createElementNS(X,"feOffset");k.setAttribute("in","s2"),k.setAttribute("dx",u),k.setAttribute("dy",f),k.setAttribute("result","s2off"),l.appendChild(k);let $=document.createElementNS(X,"feComposite");$.setAttribute("in","s1"),$.setAttribute("in2","s2off"),$.setAttribute("operator","over"),l.appendChild($),i.appendChild(l);}}return t}function Ut(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 Zt(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}-${Zt(e)}`:`${i}${l}`}function Yt(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 Et(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=Yt(t,e);c&&d.appendChild(c),a.appendChild(d);}}return l}function Ne(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,f=new Map,g=new Map,b=r.querySelector('[data-viz-layer="nodes"]')||r.querySelector(".viz-layer-nodes");if(b){let h=Array.from(b.querySelectorAll("g[data-id]"));for(let k of h){let $=k.getAttribute("data-id");if(!$)continue;t.set($,k);let v=k.querySelector('[data-viz-role="node-shape"]')||k.querySelector(".viz-node-shape");v&&i.set($,v);let w=k.querySelector('[data-viz-role="node-label"]')||k.querySelector(".viz-node-label");w&&l.set($,w);let _=k.querySelector('[data-viz-role="node-image"]')||k.querySelector(".viz-node-image");_&&a.set($,_);let B=k.querySelector('[data-viz-role="node-icon"]')||k.querySelector(".viz-node-icon");B&&d.set($,B);let s=k.querySelector('[data-viz-role="node-svg"]')||k.querySelector(".viz-node-svg");s&&c.set($,s);}}let m=r.querySelector('[data-viz-layer="edges"]')||r.querySelector(".viz-layer-edges");if(m){let h=Array.from(m.querySelectorAll("g[data-id]"));for(let k of h){let $=k.getAttribute("data-id");if(!$)continue;n.set($,k);let v=k.querySelector('[data-viz-role="edge-line"]')||k.querySelector(".viz-edge");v&&u.set($,v);let w=k.querySelector('[data-viz-role="edge-hit"]')||k.querySelector(".viz-edge-hit");w&&f.set($,w);let _=Array.from(k.querySelectorAll('[data-viz-role="edge-label"],.viz-edge-label'));_.length>0&&g.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:f,edgeLabelsById:g}}function Xt(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,f=0,g=0;switch(c){case "above":g=-i/2-a/2;break;case "below":g=i/2+a/2;break;case "left":f=-t/2-l/2;break;case "right":f=t/2+l/2;break;}return {x:r+f-l/2+n,y:e+g-a/2+u}}function et(r,e$2){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,f=(n.runtime?.y??n.pos.y)-n.pos.y;(u!==0||f!==0)&&i.set(n.id,{dx:u,dy:f});}for(let n of r.nodes){let u=e$2.nodeGroupsById.get(n.id),f=e$2.nodeShapesById.get(n.id);if(!u||!f)continue;let{x:g$1,y:b}=d$2(n);if(n.parentId){let B=i.get(n.parentId);B&&(g$1+=B.dx,b+=B.dy);}let m=e$1(n);g(f,m,{x:g$1,y:b});let{w:h,h:k}=Xt(m);if(h>0&&k>0){let B=e$2.nodeImagesById.get(n.id);if(B&&n.image){let S=Je(g$1,b,h,k,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$2.nodeIconsById.get(n.id);if(s&&n.icon){let S=Je(g$1,b,h,k,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$2.nodeSvgsById.get(n.id);if(x&&n.svgContent){let S=Je(g$1,b,h,k,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 m&&"h"in m){let B=u.querySelector('[data-viz-role="container-header"]');if(B){let s=m.w,x=m.h,S=b-x/2+n.container.headerHeight;B.setAttribute("x1",String(g$1-s/2)),B.setAttribute("y1",String(S)),B.setAttribute("x2",String(g$1+s/2)),B.setAttribute("y2",String(S));}}let $=e$2.nodeLabelsById.get(n.id);if($&&n.label){let B=g$1+(n.label.dx||0),s=b+(n.label.dy||0);if(n.container?.headerHeight&&"h"in m&&!n.label.dy){let S=m.h;s=b-S/2+n.container.headerHeight/2,B=g$1+(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),f.removeAttribute("opacity")):(u.style.removeProperty("opacity"),n.style?.opacity!==void 0?f.setAttribute("opacity",String(n.style.opacity)):f.removeAttribute("opacity")),n.style?.shadow){let B=Ft(e$2.svg,n.style.shadow);f.setAttribute("filter",`url(#${B})`);}else f.removeAttribute("filter");if(n.style?.sketch||r.sketch?.enabled){let B=Ut(n.style,n.id),s=At(e$2.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(${g$1} ${b}) rotate(${s}) scale(${B}) translate(${-g$1} ${-b})`);}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(g$1+S.offset.x)),s.setAttribute("cy",String(b+S.offset.y)));});}let l=e$2.edgePathResolver;for(let n of r.edges){let u=e$2.edgeGroupsById.get(n.id),f$1=e$2.edgeLinesById.get(n.id);if(!u||!f$1)continue;let g=n.from?t.get(n.from)??null:null,b=n.to?t.get(n.to)??null:null;if(n.from&&!g||n.to&&!b||!g&&!n.fromAt&&!b&&!n.toAt)continue;let m;if(g&&b&&g===b)m=f(g,n);else {let v=d(g,b,n);m=e(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 f(_,w).d;let s=d(_,B,w);return e(s.start,s.end,w.routing,w.waypoints).d};try{let w=l(n,r,v);typeof w=="string"&&w&&(m.d=w);}catch(w){console.warn(`RuntimePatcher: edge path resolver threw for edge ${n.id}`,w);}}if(f$1.setAttribute("d",m.d),n.style?.stroke!==void 0&&(f$1.style.stroke=n.style.stroke),n.style?.strokeWidth!==void 0&&(f$1.style.strokeWidth=String(n.style.strokeWidth)),n.style?.fill!==void 0&&(f$1.style.fill=n.style.fill),n.style?.opacity!==void 0&&(f$1.style.opacity=String(n.style.opacity)),n.style?.strokeDasharray!==void 0&&(f$1.style.strokeDasharray=be(n.style.strokeDasharray)),n.markerEnd&&n.markerEnd!=="none"){let v=n.style?.stroke?Et(e$2.svg,n.style.stroke,n.markerEnd,"end"):Qe(n.markerEnd,void 0,"end");f$1.setAttribute("marker-end",`url(#${v})`);}else f$1.removeAttribute("marker-end");if(n.markerStart&&n.markerStart!=="none"){let v=n.style?.stroke?Et(e$2.svg,n.style.stroke,n.markerStart,"start"):Qe(n.markerStart,void 0,"start");f$1.setAttribute("marker-start",`url(#${v})`);}else f$1.removeAttribute("marker-start");let h=e$2.edgeHitsById.get(n.id);h&&h.setAttribute("d",m.d);let k=e$2.edgeLabelsById.get(n.id);if(k){let v=Be(n);k.forEach((w,_)=>{let B=v[_];if(!B)return;let s=we(B,m);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?(f$1.style.strokeDashoffset=String(n.runtime.strokeDashoffset),f$1.setAttribute("stroke-dashoffset",String(n.runtime.strokeDashoffset))):(f$1.style.removeProperty("stroke-dashoffset"),f$1.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),_=At(e$2.svg,w);f$1.setAttribute("filter",`url(#${_})`),u.classList.contains("viz-sketch")||u.classList.add("viz-sketch");}else {let v=f$1.getAttribute("filter");v&&v.startsWith("url(#viz-sketch-")&&f$1.removeAttribute("filter"),u.classList.contains("viz-sketch")&&u.classList.remove("viz-sketch");}}let a=[],d$1=new Map;for(let n of r.nodes)if(n.parentId){let u=d$1.get(n.parentId);u||(u=[],d$1.set(n.parentId,u)),u.push(n);}else a.push(n);a.sort((n,u)=>(n.zIndex||0)-(u.zIndex||0));let c=e$2.svg.querySelector('[data-viz-layer="nodes"]')||e$2.svg.querySelector(".viz-layer-nodes");if(c){let n=c.firstElementChild;for(let u of a){let f=e$2.nodeGroupsById.get(u.id);f&&(n!==f?c.insertBefore(f,n):n=n.nextElementSibling);}}for(let[n,u]of d$1.entries()){u.sort((b,m)=>(b.zIndex||0)-(m.zIndex||0));let f=e$2.nodeGroupsById.get(n);if(!f)continue;let g=f.querySelector(':scope > [data-viz-role="container-children"]');if(g){let b=g.firstElementChild;for(let m of u){let h=e$2.nodeGroupsById.get(m.id);h&&(b!==h?g.insertBefore(h,b):b=b.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 f=n?`${n} ${u}`:u;f.length<=a?n=f:n?(l.push(n),n=u):(l.push(u),n="");}n&&l.push(n);}return l}var Jt=1.2;function ue(r,e,t,i={}){let{className:l="",fill:a,fontSize:d,fontWeight:c,fontFamily:n,textAnchor:u="middle",dominantBaseline:f="middle",maxWidth:g,lineHeight:b=Jt,verticalAlign:m="middle",overflow:h}=i,k=12;if(typeof d=="number")k=d;else if(typeof d=="string"){let G=parseFloat(d);isNaN(G)||(k=G);}let $=typeof t!="string",v=[],w=[];if($)w=Qt(t.tokens);else if(v=tt(t,g,k),g&&h&&h!=="visible")if(h==="ellipsis"&&v.length>2){let G=v[1];G&&(v=[v[0],G.substring(0,Math.max(0,G.length-3))+"..."]);}else h==="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}"`),f&&_.push(`dominant-baseline="${f}"`);let B=_.length>0?" "+_.join(" "):"",s=$?w.length:v.length,x=0;m==="middle"?x=-((s-1)*b)/2:m==="bottom"?x=-((s-1)*b):m==="top"&&(x=0);let S=$?w.map((G,o)=>{let C=kt(o,x,b),A=G.map(F=>er(F)).join("");return `<tspan data-viz-role="text-line" x="${r}" dy="${C}">${A}</tspan>`}):v.map((G,o)=>{let C=kt(o,x,b);return `<tspan data-viz-role="text-line" x="${r}" dy="${C}">${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 Qt(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 er(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});t.height!==void 0&&i.height(t.height);});}var tr=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}function rr(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 tr;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 ir(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=rr(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(f=>{let g=Bt(f),b={id:f.id,y:u,height:g,text:f.text};return f.label&&(b.label=f.label),f.onClick&&(b.onClick=f.onClick),f.tooltip&&(b.tooltip=f.tooltip),u+=g,b});}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}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}};return this._pending.entries.push({id:e,text:t,label:l,onClick:i?.onClick,tooltip:i?.tooltip}),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,f=l.padding.x+e*n,g=l.padding.y+t*u;return i==="center"?(f+=n/2,g+=u/2):i==="end"&&(f+=n,g+=u),this.nodeDef.pos={x:f,y:g},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=ir(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.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}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 nr(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="${nr(e.color)}" flood-opacity="1"/></filter>`}function ve(r){return `viz-sketch-${r}`}function sr(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+sr(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 Re(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 or(r){return typeof r=="object"&&r!==null&&"then"in r&&typeof r.then=="function"}function lr(r){return r.replace(/[^a-zA-Z0-9]/g,"_")}function ge(r,e,t="end"){if(r==="none")return "";let i=`viz-${r}`,l=t==="start"?"-start":"";return e?`${i}${l}-${lr(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 fe(r){return r.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}var ar={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=ar[r];if(!l)return "";let a=fe(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 Ae(r,e,t,i$1){let{x:l,y:a}=d$2(r),d=i(r),c=i$1?.position??"center",n=i$1?.dx??0,u=i$1?.dy??0,f=0,g=0;switch(c){case "above":g=-d.h/2-t/2;break;case "below":g=d.h/2+t/2;break;case "left":f=-d.w/2-e/2;break;case "right":f=d.w/2+e/2;break;}return {x:l+f-e/2+n,y:a+g-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 Ct(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 Ee=new WeakMap,qe=new WeakMap;function dr(r,e){Object.entries(e).forEach(([t,i])=>{i===void 0?r.removeAttribute(t):r.setAttribute(t,String(i));});}function ur(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=Ne(i,{edgePathResolver:this._edgePathResolver});Ee.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(or(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=Ee.get(i);l?l.edgePathResolver=e:Ee.set(i,Ne(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=d$1(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$1=new Map(i.nodes.map(u=>[u.id,u])),n=new Map(i.edges.map(u=>[u.id,u]));this._tooltipController=c(e,l,c$1,n),this._addTooltipA11y(l,i);}let a$1;if(l&&t?.panZoom){let d=l.querySelector(".viz-viewport");d&&(a$1=a(l,d,i,t));}return this._panZoomController=a$1,this._dispatchEvent("mount",{container:e,controller:a$1}),a$1}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(...b(g));qe.get(e)?.stop();let n={version:"viz-anim/1",tweens:d.flatMap(g=>g.tweens)},u=f$1({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=ke.get(i);l||(l=Ne(i,{edgePathResolver:this._edgePathResolver}),ke.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(b=>[b.id,b])),n=new Map(t.edges.map(b=>[b.id,b])),u="http://www.w3.org/2000/svg",g=Array.from(a.children).filter(b=>b.tagName==="g"),f=new Map;g.forEach(b=>{let w=b.getAttribute("data-overlay-id");w&&f.set(w,b);});let v=d.length===f.size,m=!v,h=[];if(!m)for(let b of d){let w=b.key||b.id;if(!f.has(w)){m=true;break}b[a$1]&&h.push(b);}if(!m&&h.length===0)return;let E=new Set;(m?d:h).forEach(b=>{let w=ye.get(b.id);if(!w)return;let _=b.key||b.id;E.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-${b.id}${b.className?` ${b.className}`:""}`;B.getAttribute("class")!==s&&B.setAttribute("class",s);let S={spec:b,nodesById:c,edgesById:n,scene:t,registry:ye};w.update?w.update(S,B):B.innerHTML=w.render(S),delete b[a$1];}),v||g.forEach(b=>{let w=b.getAttribute("data-overlay-id");w&&!E.has(w)&&b.remove();});}}_renderSceneToDOM(e$1,t){let{viewBox:i,nodes:l,edges:a,overlays:d$1}=e$1,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 C=document.createElementNS(n,"defs"),A=new Set,F=new Map;a.forEach(p=>{let N=p.style?.stroke;if(p.markerEnd&&p.markerEnd!=="none"){let y=ge(p.markerEnd,N,"end");A.has(y)||(A.add(y),F.set(y,We(p.markerEnd,N??"currentColor",y,"end")));}if(p.markerStart&&p.markerStart!=="none"){let y=ge(p.markerStart,N,"start");A.has(y)||(A.add(y),F.set(y,We(p.markerStart,N??"currentColor",y,"start")));}}),A.forEach(p=>{let N=document.createElementNS(n,"marker");N.setAttribute("id",p),N.setAttribute("viewBox","0 0 10 10"),N.setAttribute("markerWidth","10"),N.setAttribute("markerHeight","10"),N.setAttribute("refX","9"),N.setAttribute("refY","5");let y=p.includes("-start");N.setAttribute("orient",y?"auto-start-reverse":"auto");let V=document.createElementNS(n,"svg");V.innerHTML=F.get(p)??"";let k=V.querySelector("marker");if(k)for(;k.firstChild;)N.appendChild(k.firstChild);C.appendChild(N);});let R=new Map;l.forEach(p=>{if(p.style?.shadow){let N=Oe(p.style.shadow),y=Pe(N);R.has(y)||R.set(y,N);}}),R.forEach((p,N)=>{let y=document.createElementNS(n,"svg");y.innerHTML=ot(N,p);let V=y.querySelector("filter");V&&C.appendChild(V);});let Y=new Set,j=e$1.sketch?.enabled;l.forEach(p=>{(p.style?.sketch||j)&&Y.add(Re(p.style,p.id));}),a.forEach(p=>{if(p.style?.sketch||j){let N=0;for(let y=0;y<p.id.length;y++)N=Math.imul(31,N)+p.id.charCodeAt(y)|0;Y.add(Math.abs(N));}}),Y.forEach(p=>{let N=ve(p),y=document.createElementNS(n,"svg");y.innerHTML=lt(N,p);let V=y.querySelector("filter");V&&C.appendChild(V);}),u.appendChild(C);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 re=document.createElementNS(n,"g");re.setAttribute("class","viz-layer-nodes"),re.setAttribute("data-viz-layer","nodes"),q.appendChild(re);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$1=u.querySelector('[data-viz-layer="edges"]')||u.querySelector(".viz-layer-edges"),f$1=u.querySelector('[data-viz-layer="nodes"]')||u.querySelector(".viz-layer-nodes"),v=u.querySelector('[data-viz-layer="overlays"]')||u.querySelector(".viz-layer-overlays");if(!g$1||!f$1||!v){this._renderSceneToDOM(e$1,t);return}let m=Array.from(g$1.children).filter(o=>o.tagName==="g"),h=new Map;m.forEach(o=>{let C=o.getAttribute("data-id");C&&h.set(C,o);});let E=new Set;a.forEach(o=>{let C=He(o,c);if(!C)return;let{start:A,end:F}=C;E.add(o.id);let R=h.get(o.id);if(!R){R=document.createElementNS(n,"g"),R.setAttribute("data-id",o.id),R.setAttribute("data-viz-role","edge-group"),g$1.appendChild(R);let p=document.createElementNS(n,"path");p.setAttribute("class","viz-edge"),p.setAttribute("data-viz-role","edge-line"),R.appendChild(p);}let Y=`viz-edge-group ${o.className||""}`,j=o.style?.sketch||e$1.sketch?.enabled;j&&(Y+=" viz-sketch"),R.removeAttribute("style"),o.animations&&o.animations.forEach(p=>{if(p.when===false)return;let N=Ee.getEdgeRenderer(p.id);if(N){if(N.getClass&&(Y+=` ${N.getClass({spec:p,element:o})}`),N.getStyle){let y=N.getStyle({spec:p,element:o});Object.entries(y).forEach(([V,k])=>{R.style.setProperty(V,String(k));});}}else Y+=` ${Fe(p.id)}`,Ke(p.params).forEach(([y,V])=>{R.style.setProperty(y,V);});}),R.setAttribute("class",Y);let q;if(A&&F&&A===F)q=f(A,o);else {let p=d(A,F,o);q=e(p.start,p.end,o.routing,o.waypoints);}if(this._edgePathResolver){let p=N=>{let y=He(N,c);if(!y)return "";if(y.start&&y.end&&y.start===y.end)return f(y.start,N).d;let V=d(y.start,y.end,N);return e(V.start,V.end,N.routing,N.waypoints).d};try{let N=this._edgePathResolver(o,e$1,p);typeof N=="string"&&N&&(q.d=N);}catch(N){console.warn(`VizBuilder: edge path resolver threw for edge ${o.id}`,N);}}o.runtime?.opacity!==void 0?R.style.opacity=String(o.runtime.opacity):R.style.removeProperty("opacity");let P=R.querySelector('[data-viz-role="edge-line"]')||R.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 p=ge(o.markerEnd,o.style?.stroke,"end");P.setAttribute("marker-end",`url(#${p})`);}else P.removeAttribute("marker-end");if(o.markerStart&&o.markerStart!=="none"){let p=ge(o.markerStart,o.style?.stroke,"start");P.setAttribute("marker-start",`url(#${p})`);}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 p=0;for(let y=0;y<o.id.length;y++)p=Math.imul(31,p)+o.id.charCodeAt(y)|0;let N=Math.abs(p);P.setAttribute("filter",`url(#${ve(N)})`);}else P.removeAttribute("filter");let re=R.querySelector('[data-viz-role="edge-hit"]')||R.querySelector(".viz-edge-hit");if(re&&re.remove(),o.hitArea||o.onClick){let p=document.createElementNS(n,"path");p.setAttribute("class","viz-edge-hit"),p.setAttribute("data-viz-role","edge-hit"),p.setAttribute("d",q.d),p.setAttribute("stroke","transparent"),p.setAttribute("stroke-width",String(o.hitArea||10)),p.style.cursor=o.onClick?"pointer":"",o.onClick&&p.addEventListener("click",N=>{N.stopPropagation(),o.onClick(o.id,o);}),R.appendChild(p);}R.querySelectorAll('[data-viz-role="edge-label"],.viz-edge-label').forEach(p=>p.remove()),Be(o).forEach((p,N)=>{let y=we(p,q),V=`viz-edge-label ${p.className||""}`,k=ue(y.x,y.y,p.rich??p.text,{className:V,fill:p.fill,fontSize:p.fontSize,fontWeight:p.fontWeight,fontFamily:p.fontFamily,textAnchor:"middle",dominantBaseline:"middle",maxWidth:p.maxWidth,lineHeight:p.lineHeight,verticalAlign:p.verticalAlign,overflow:p.overflow}).replace("<text ",`<text data-viz-role="edge-label" data-label-index="${N}" data-label-position="${p.position}" `);R.insertAdjacentHTML("beforeend",k);});}),m.forEach(o=>{let C=o.getAttribute("data-id");C&&!E.has(C)&&o.remove();});let $=new Map,b=[];l.forEach(o=>{if(o.parentId){let C=$.get(o.parentId);C||(C=[],$.set(o.parentId,C)),C.push(o);}else b.push(o);}),b.sort((o,C)=>(o.zIndex||0)-(C.zIndex||0)),$.forEach(o=>o.sort((C,A)=>(C.zIndex||0)-(A.zIndex||0)));let w=Array.from(f$1.querySelectorAll('g[data-viz-role="node-group"]')),_=new Map;w.forEach(o=>{let C=o.getAttribute("data-id");C&&_.set(C,o);});let B=new Set,s=(o$1,C)=>{B.add(o$1.id);let A=_.get(o$1.id);A||(A=document.createElementNS(n,"g"),A.setAttribute("data-id",o$1.id),A.setAttribute("data-viz-role","node-group")),C.appendChild(A);let F=!!o$1.container,R=`viz-node-group${F?" viz-container":""} ${o$1.className||""}`,Y=o$1.style?.sketch||e$1.sketch?.enabled;Y&&(R+=" viz-sketch"),A.removeAttribute("style"),o$1.animations&&o$1.animations.forEach(z=>{if(z.when===false)return;let O=Ee.getNodeRenderer(z.id);if(O){if(O.getClass&&(R+=` ${O.getClass({spec:z,element:o$1})}`),O.getStyle){let Z=O.getStyle({spec:z,element:o$1});Object.entries(Z).forEach(([H,te])=>{A.style.setProperty(H,String(te));});}}else R+=` ${Fe(z.id)}`,Ke(z.params).forEach(([Z,H])=>{A.style.setProperty(Z,H);});}),A.setAttribute("class",R),A._clickHandler=o$1.onClick?z=>{z.stopPropagation(),o$1.onClick(o$1.id,o$1);}:null,A.hasAttribute("data-click-initialized")||(A.addEventListener("click",z=>{A._clickHandler&&A._clickHandler(z);}),A.setAttribute("data-click-initialized","true")),A.style.cursor=o$1.onClick?"pointer":"";let{x:j,y:q}=d$2(o$1),P=A.querySelector('[data-viz-role="node-shape"]')||A.querySelector(".viz-node-shape"),J=f$2(o$1.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"),A.prepend(P)),g(P,o$1.shape,{x:j,y:q});let p=be(o$1.style?.strokeDasharray),N=o$1.style?.shadow?`url(#${Pe(Oe(o$1.style.shadow))})`:void 0;if(ar(P,{fill:o$1.style?.fill??"none",stroke:o$1.style?.stroke??"#111","stroke-width":o$1.style?.strokeWidth??2,opacity:o$1.runtime?.opacity??o$1.style?.opacity,"stroke-dasharray":p||void 0,filter:N}),Y){let z=Re(o$1.style,o$1.id);A.setAttribute("filter",`url(#${ve(z)})`);}else A.removeAttribute("filter");let y=A.querySelector(':scope > [data-viz-role="node-image"], :scope > .viz-node-image');y&&y.remove();let V=A.querySelector(':scope > [data-viz-role="node-icon"], :scope > .viz-node-icon');V&&V.remove();let k=A.querySelector(':scope > [data-viz-role="node-svg"], :scope > .viz-node-svg');k&&k.remove();let D=P,W=z=>{A.insertBefore(z,D.nextSibling),D=z;};if(o$1.image){let z=Ae(o$1,o$1.image.width,o$1.image.height,{position:o$1.image.position,dx:o$1.image.dx,dy:o$1.image.dy}),O=document.createElementNS(n,"image");O.setAttribute("class","viz-node-image"),O.setAttribute("data-viz-role","node-image"),O.setAttribute("x",String(z.x)),O.setAttribute("y",String(z.y)),O.setAttribute("width",String(o$1.image.width)),O.setAttribute("height",String(o$1.image.height)),O.setAttribute("href",o$1.image.href),o$1.image.preserveAspectRatio&&O.setAttribute("preserveAspectRatio",o$1.image.preserveAspectRatio),W(O);}if(o$1.icon){let z=b$1.get(o$1.icon.id);if(!z)console.warn(`VizCraft: icon '${o$1.icon.id}' not found. Use registerIcon().`);else {let O=Ae(o$1,o$1.icon.size,o$1.icon.size,{position:o$1.icon.position,dx:o$1.icon.dx,dy:o$1.icon.dy}),Z=document.createElementNS(n,"g");Z.setAttribute("class","viz-node-icon"),Z.setAttribute("data-viz-role","node-icon"),Z.setAttribute("transform",`translate(${O.x} ${O.y})`),o$1.icon.color&&Z.setAttribute("style",`color:${o$1.icon.color}`),Z.innerHTML=at(z,o$1.icon.size,o$1.icon.size),W(Z);}}if(o$1.svgContent){let z=Ae(o$1,o$1.svgContent.width,o$1.svgContent.height,{position:o$1.svgContent.position,dx:o$1.svgContent.dx,dy:o$1.svgContent.dy}),O=document.createElementNS(n,"g");O.setAttribute("class","viz-node-svg"),O.setAttribute("data-viz-role","node-svg"),O.setAttribute("transform",`translate(${z.x} ${z.y})`),O.innerHTML=wt(o$1.svgContent.content,o$1.svgContent.width,o$1.svgContent.height),W(O);}if(F&&o$1.container.headerHeight&&"w"in o$1.shape&&"h"in o$1.shape){let z=o$1.shape.w,O=o$1.shape.h,Z=q-O/2+o$1.container.headerHeight,H=A.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"),A.appendChild(H)),H.setAttribute("x1",String(j-z/2)),H.setAttribute("y1",String(Z)),H.setAttribute("x2",String(j+z/2)),H.setAttribute("y2",String(Z)),H.setAttribute("stroke",o$1.style?.stroke??"#111"),H.setAttribute("stroke-width",String(o$1.style?.strokeWidth??2));}else {let z=A.querySelector('[data-viz-role="container-header"]');z&&z.remove();}let K=o$1.compartments&&o$1.compartments.length>0;if(A.querySelectorAll('[data-viz-role="compartment-divider"],[data-viz-role="compartment-label"],[data-viz-role="compartment-entry"]').forEach(z=>z.remove()),K&&"w"in o$1.shape){let z=o$1.shape.w,O=o$1.shape.h,Z=q-O/2,H=8;for(let te=0;te<o$1.compartments.length;te++){let I=o$1.compartments[te];if(te>0){let L=Z+I.y,U=document.createElementNS(n,"line");U.setAttribute("class","viz-compartment-divider"),U.setAttribute("data-viz-role","compartment-divider"),U.setAttribute("data-compartment",I.id),U.setAttribute("x1",String(j-z/2)),U.setAttribute("y1",String(L)),U.setAttribute("x2",String(j+z/2)),U.setAttribute("y2",String(L)),U.setAttribute("stroke",o$1.style?.stroke??"#111"),U.setAttribute("stroke-width",String(o$1.style?.strokeWidth??2)),A.appendChild(U);}if(I.entries&&I.entries.length>0)for(let L of I.entries){let U=j-z/2+H+(L.label?.dx||0),se=Z+I.y+L.y+L.height/2+(L.label?.dy||0),oe=`viz-compartment-entry ${L.label?.className||""}`,me=ue(U,se,L.label?.rich??L.text,{className:oe,fill:L.label?.fill,fontSize:L.label?.fontSize,fontWeight:L.label?.fontWeight,fontFamily:L.label?.fontFamily,textAnchor:L.label?.textAnchor||"start",dominantBaseline:L.label?.dominantBaseline||"middle",maxWidth:L.label?.maxWidth??z-H*2,lineHeight:L.label?.lineHeight,verticalAlign:L.label?.verticalAlign,overflow:L.label?.overflow}).replace("<text ",`<text data-viz-role="compartment-entry" data-compartment="${I.id}" data-entry="${L.id}" `);A.insertAdjacentHTML("beforeend",me);}else if(I.label){let L=j-z/2+H+(I.label.dx||0),U=Z+I.y+I.height/2+(I.label.dy||0),se=`viz-compartment-label ${I.label.className||""}`,oe=ue(L,U,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??z-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}" `);A.insertAdjacentHTML("beforeend",oe);}}for(let te of o$1.compartments)if(te.entries)for(let I of te.entries){if(!I.onClick)continue;let L=A.querySelector(`[data-viz-role="compartment-entry"][data-compartment="${te.id}"][data-entry="${I.id}"]`);L&&(L.addEventListener("click",U=>{U.stopPropagation(),I.onClick();}),L.style.cursor="pointer");}}let Q=j+(o$1.label?.dx||0),T=q+(o$1.label?.dy||0),M=!!o$1.label&&!K;if(o$1.label&&F&&o$1.container.headerHeight&&"h"in o$1.shape&&!o$1.label.dy){let z=o$1.shape.h;T=q-z/2+o$1.container.headerHeight/2,Q=j+(o$1.label.dx||0);}let ee=A.querySelector('[data-viz-role="node-label"]')||A.querySelector(".viz-node-label");if(ee&&(ee.remove(),ee=null),o$1.label&&M){let z=`viz-node-label ${o$1.label.className||""}`,O=ue(Q,T,o$1.label.rich??o$1.label.text,{className:z,fill:o$1.label.fill,fontSize:o$1.label.fontSize,fontWeight:o$1.label.fontWeight,fontFamily:o$1.label.fontFamily,textAnchor:o$1.label.textAnchor||"middle",dominantBaseline:o$1.label.dominantBaseline||"middle",maxWidth:o$1.label.maxWidth,lineHeight:o$1.label.lineHeight,verticalAlign:o$1.label.verticalAlign,overflow:o$1.label.overflow}).replace("<text ",'<text data-viz-role="node-label" ');A.insertAdjacentHTML("beforeend",O),ee=A.querySelector('[data-viz-role="node-label"]');}if(A.querySelectorAll('[data-viz-role="badge"]').forEach(z=>z.remove()),o$1.badges&&o$1.badges.length>0){let z=o(o$1.shape),O=z.width/2,Z=z.height/2;for(let H of o$1.badges){let te=H.fontSize??10,I=3,L=te+I*2,U=Math.max(te*H.text.length*.7+I*2,L),se,oe;H.position==="top-left"?(se=j-O-U/4,oe=q-Z-L/4):H.position==="top-right"?(se=j+O-U*3/4,oe=q-Z-L/4):H.position==="bottom-left"?(se=j-O-U/4,oe=q+Z-L*3/4):(se=j+O-U*3/4,oe=q+Z-L*3/4);let me=document.createElementNS(n,"g");if(me.setAttribute("class","viz-badge"),me.setAttribute("data-viz-role","badge"),H.background){let pe=document.createElementNS(n,"rect");pe.setAttribute("x",String(se)),pe.setAttribute("y",String(oe)),pe.setAttribute("width",String(U)),pe.setAttribute("height",String(L)),pe.setAttribute("rx",String(L/2)),pe.setAttribute("fill",H.background),me.appendChild(pe);}let ce=document.createElementNS(n,"text");ce.setAttribute("x",String(se+U/2)),ce.setAttribute("y",String(oe+L/2)),ce.setAttribute("text-anchor","middle"),ce.setAttribute("dominant-baseline","central"),ce.setAttribute("font-size",String(te)),H.fill&&ce.setAttribute("fill",H.fill),ce.textContent=H.text,me.appendChild(ce),A.appendChild(me);}}A.querySelectorAll('[data-viz-role="port"]').forEach(z=>z.remove()),o$1.ports&&o$1.ports.length>0&&o$1.ports.forEach(z=>{let O=document.createElementNS(n,"circle");O.setAttribute("cx",String(j+z.offset.x)),O.setAttribute("cy",String(q+z.offset.y)),O.setAttribute("r","4"),O.setAttribute("class","viz-port"),O.setAttribute("data-viz-role","port"),O.setAttribute("data-node",o$1.id),O.setAttribute("data-port",z.id),A.appendChild(O);});let he=$.get(o$1.id);if(he&&he.length>0){let z=A.querySelector(':scope > [data-viz-role="container-children"]');z||(z=document.createElementNS(n,"g"),z.setAttribute("class","viz-container-children"),z.setAttribute("data-viz-role","container-children"),A.appendChild(z)),he.forEach(O=>s(O,z));}else {let z=A.querySelector(':scope > [data-viz-role="container-children"]');z&&z.remove();}};b.forEach(o=>s(o,f$1)),w.forEach(o=>{let C=o.getAttribute("data-id");C&&!B.has(C)&&o.remove();});let x=Array.from(v.children).filter(o=>o.tagName==="g"),S=new Map;x.forEach(o=>{let C=o.getAttribute("data-overlay-id");C&&S.set(C,o);});let G=new Set;d$1&&d$1.length>0&&d$1.forEach(o=>{let C=ye.get(o.id);if(C){let A=o.key||o.id;G.add(A);let F=S.get(A);F||(F=document.createElementNS(n,"g"),F.setAttribute("data-overlay-id",A),F.setAttribute("data-viz-role","overlay-group"),v.appendChild(F)),F.setAttribute("class",`viz-overlay-${o.id}${o.className?` ${o.className}`:""}`);let R={spec:o,nodesById:c,edgesById:new Map(a.map(Y=>[Y.id,Y])),scene:e$1,registry:ye};C.update?C.update(R,F):F.innerHTML=C.render(R);}}),x.forEach(o=>{let C=o.getAttribute("data-overlay-id");C&&!G.has(C)&&o.remove();}),ke.set(u,Ne(u,{edgePathResolver:this._edgePathResolver}));}_renderSceneToSvg(e$2,t){let i=t?.includeRuntime===true,{viewBox:l,nodes:a,edges:d$1,overlays:c}=e$2,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 A=n.get(s.parentId);A&&(S+=A.dx,G+=A.dy);}(x.x!==void 0||x.y!==void 0||S!==s.pos.x||G!==s.pos.y)&&(x.x=S,x.y=G);let C=Object.keys(x).length>0?x:void 0;return {...s,runtime:C}}),g=d$1.map(s=>i?s:{...s,runtime:void 0}),f$1={...e$2,nodes:u,edges:g},v=new Map(u.map(s=>[s.id,s])),m=new Map(g.map(s=>[s.id,s])),h$1=`<svg viewBox="0 0 ${l.w} ${l.h}" xmlns="http://www.w3.org/2000/svg">`;h$1+=`<style>${Ze}</style>`,h$1+=`
|
|
117
|
-
<defs>`;let
|
|
118
|
-
</defs>`,h$1+='<g class="viz-layer-edges" data-viz-layer="edges">',g.forEach(s=>{let x=He(s,v);if(!x)return;let{start:S,end:G}=x,o="",C="";s.animations&&s.animations.forEach(y=>{if(y.when===false)return;let V=Ee.getEdgeRenderer(y.id);if(V){if(V.getClass&&(o+=` ${V.getClass({spec:y,element:s})}`),V.getStyle){let k=V.getStyle({spec:y,element:s});Object.entries(k).forEach(([D,W])=>{C+=`${D}: ${W}; `;});}}else o+=` ${Fe(y.id)}`,Ke(y.params).forEach(([k,D])=>{C+=`${k}: ${D}; `;});});let A=s.markerEnd&&s.markerEnd!=="none"?`marker-end="url(#${ge(s.markerEnd,s.style?.stroke,"end")})"`:"",F=s.markerStart&&s.markerStart!=="none"?`marker-start="url(#${ge(s.markerStart,s.style?.stroke,"start")})"`:"",R;if(S&&G&&S===G)R=f(S,s);else {let y=d(S,G,s);R=e(y.start,y.end,s.routing,s.waypoints);}if(this._edgePathResolver){let y=V=>{let k=He(V,v);if(!k)return "";if(k.start&&k.end&&k.start===k.end)return f(k.start,V).d;let D=d(k.start,k.end,V);return e(D.start,D.end,V.routing,V.waypoints).d};try{let V=this._edgePathResolver(s,f$1,k=>y(k));typeof V=="string"&&V&&(R.d=V);}catch(V){console.warn(`VizBuilder: edge path resolver threw for edge ${s.id}`,V);}}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,re=P?" viz-sketch":"";h$1+=`<g data-id="${s.id}" data-viz-role="edge-group" class="viz-edge-group${re} ${s.className||""} ${o}" style="${C}${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 y=be(s.style.strokeDasharray);y&&(J+=`stroke-dasharray: ${y}; `);}let p="";if(P){let y=0;for(let V=0;V<s.id.length;V++)y=Math.imul(31,y)+s.id.charCodeAt(V)|0;p=` filter="url(#${ve(Math.abs(y))})"`;}h$1+=`<path d="${R.d}" class="viz-edge" data-viz-role="edge-line" ${A} ${F} style="${J}"${q}${p} />`,Be(s).forEach((y,V)=>{let k=we(y,R),D=`viz-edge-label ${y.className||""}`,K=ue(k.x,k.y,y.rich??y.text,{className:D,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="${V}" data-label-position="${y.position}" `);h$1+=K;}),h$1+="</g>";}),h$1+="</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}=d$2(s),o$1=e$1(s),C="",A="";s.runtime?.opacity!==void 0&&(A+=`opacity: ${s.runtime.opacity}; `),s.animations&&s.animations.forEach(k=>{if(k.when===false)return;let D=Ee.getNodeRenderer(k.id);if(D){if(D.getClass&&(C+=` ${D.getClass({spec:k,element:s})}`),D.getStyle){let W=D.getStyle({spec:k,element:s});Object.entries(W).forEach(([K,Q])=>{A+=`${K}: ${Q}; `;});}}else C+=` ${Fe(k.id)}`,Ke(k.params).forEach(([W,K])=>{A+=`${W}: ${K}; `;});});let F=!!s.container,R=s.style?.sketch||w,Y=`viz-node-group${F?" viz-container":""}${R?" viz-sketch":""} ${s.className||""} ${C}`,j=s.runtime?.scale,q=s.runtime?.rotation,P="";if(R){let k=Re(s.style,s.id);P=` filter="url(#${ve(k)})"`;}let re=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="${A}"${re}${P}>`;let J=be(s.style?.strokeDasharray),p=s.style?.shadow?`url(#${Pe(Oe(s.style.shadow))})`:void 0,N=dr({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:p});if(x+=h(o$1,{x:S,y:G},N),s.image){let k=Ae(s,s.image.width,s.image.height,{position:s.image.position,dx:s.image.dx,dy:s.image.dy}),D=s.image.preserveAspectRatio?` preserveAspectRatio="${fe(s.image.preserveAspectRatio)}"`:"",W=fe(s.image.href);x+=`<image x="${k.x}" y="${k.y}" width="${s.image.width}" height="${s.image.height}" href="${W}"${D} class="viz-node-image" data-viz-role="node-image" />`;}if(s.icon){let k=b$1.get(s.icon.id);if(!k)console.warn(`VizCraft: icon '${s.icon.id}' not found. Use registerIcon().`);else {let D=Ae(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:${fe(s.icon.color)}"`:"",K=at(k,s.icon.size,s.icon.size);x+=`<g transform="translate(${D.x} ${D.y})" class="viz-node-icon" data-viz-role="node-icon"${W}>${K}</g>`;}}if(s.svgContent){let k=Ae(s,s.svgContent.width,s.svgContent.height,{position:s.svgContent.position,dx:s.svgContent.dx,dy:s.svgContent.dy}),D=wt(s.svgContent.content,s.svgContent.width,s.svgContent.height);x+=`<g transform="translate(${k.x} ${k.y})" class="viz-node-svg" data-viz-role="node-svg">${D}</g>`;}if(F&&s.container.headerHeight&&"w"in o$1&&"h"in o$1){let k=o$1.w,D=o$1.h,W=G-D/2+s.container.headerHeight;x+=`<line x1="${S-k/2}" y1="${W}" x2="${S+k/2}" y2="${W}" stroke="${s.style?.stroke??"#111"}" stroke-width="${s.style?.strokeWidth??2}" class="viz-container-header" data-viz-role="container-header" />`;}let y=s.compartments&&s.compartments.length>0;if(y&&"w"in o$1){let k=o$1.w,D=o$1.h,W=G-D/2,K=8;for(let Q=0;Q<s.compartments.length;Q++){let T=s.compartments[Q];if(Q>0){let M=W+T.y;x+=`<line x1="${S-k/2}" y1="${M}" x2="${S+k/2}" y2="${M}" stroke="${s.style?.stroke??"#111"}" stroke-width="${s.style?.strokeWidth??2}" class="viz-compartment-divider" data-viz-role="compartment-divider" data-compartment="${T.id}" />`;}if(T.entries&&T.entries.length>0)for(let M of T.entries){let ee=S-k/2+K+(M.label?.dx||0),ie=W+T.y+M.y+M.height/2+(M.label?.dy||0),ne=`viz-compartment-entry ${M.label?.className||""}`,he=ue(ee,ie,M.label?.rich??M.text,{className:ne,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??k-K*2,lineHeight:M.label?.lineHeight,verticalAlign:M.label?.verticalAlign,overflow:M.label?.overflow}).replace("<text ",`<text data-viz-role="compartment-entry" data-compartment="${fe(T.id)}" data-entry="${fe(M.id)}" `);x+=he;}else if(T.label){let M=S-k/2+K+(T.label.dx||0),ee=W+T.y+T.height/2+(T.label.dy||0),ie=`viz-compartment-label ${T.label.className||""}`,ne=ue(M,ee,T.label.rich??T.label.text,{className:ie,fill:T.label.fill,fontSize:T.label.fontSize,fontWeight:T.label.fontWeight,fontFamily:T.label.fontFamily,textAnchor:T.label.textAnchor||"start",dominantBaseline:T.label.dominantBaseline||"middle",maxWidth:T.label.maxWidth??k-K*2,lineHeight:T.label.lineHeight,verticalAlign:T.label.verticalAlign,overflow:T.label.overflow}).replace("<text ",`<text data-viz-role="compartment-label" data-compartment="${T.id}" `);x+=ne;}}}if(s.label&&!y){let k=S+(s.label.dx||0),D=G+(s.label.dy||0);if(F&&s.container.headerHeight&&"h"in o$1&&!s.label.dy){let T=o$1.h;D=G-T/2+s.container.headerHeight/2,k=S+(s.label.dx||0);}let W=`viz-node-label ${s.label.className||""}`,Q=ue(k,D,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 k=o(o$1),D=k.width/2,W=k.height/2;for(let K of s.badges){let Q=K.fontSize??10,T=3,M=Q+T*2,ee=Math.max(Q*K.text.length*.7+T*2,M),ie,ne;if(K.position==="top-left"?(ie=S-D-ee/4,ne=G-W-M/4):K.position==="top-right"?(ie=S+D-ee*3/4,ne=G-W-M/4):K.position==="bottom-left"?(ie=S-D-ee/4,ne=G+W-M*3/4):(ie=S+D-ee*3/4,ne=G+W-M*3/4),x+='<g class="viz-badge" data-viz-role="badge">',K.background){let O=fe(K.background);x+=`<rect x="${ie}" y="${ne}" width="${ee}" height="${M}" rx="${M/2}" fill="${O}" />`;}let he=K.fill?` fill="${fe(K.fill)}"`:"",z=K.text.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");x+=`<text x="${ie+ee/2}" y="${ne+M/2}" text-anchor="middle" dominant-baseline="central" font-size="${Q}"${he}>${z}</text>`,x+="</g>";}}s.ports&&s.ports.length>0&&s.ports.forEach(k=>{let D=S+k.offset.x,W=G+k.offset.y;x+=`<circle cx="${D}" cy="${W}" r="4" class="viz-port" data-viz-role="port" data-node="${s.id}" data-port="${k.id}" />`;});let V=_.get(s.id);return V&&V.length>0&&(x+='<g class="viz-container-children" data-viz-role="container-children">',V.forEach(k=>{x+=B(k);}),x+="</g>"),x+="</g>",x};return h$1+='<g class="viz-layer-nodes" data-viz-layer="nodes">',u.forEach(s=>{s.parentId||(h$1+=B(s));}),h$1+="</g>",c&&c.length>0&&(h$1+='<g class="viz-layer-overlays" data-viz-layer="overlays">',c.forEach(s=>{let x=ye.get(s.id);x&&(h$1+=x.render({spec:s,nodesById:v,edgesById:m,scene:f$1,registry:ye}));}),h$1+="</g>"),h$1+="</svg>",h$1}};function yi(){return new dt}function xi(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 ur(t,i)}function ur(r,e$1){let t=r.from?e$1.get(r.from)??null:null,i=r.to?e$1.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$1,c;if(l){let n=f(t,r);a=n,d$1=n.exitPoint,c=n.entryPoint;}else {let n=d(t,i,r);a=e(n.start,n.end,r.routing,r.waypoints),d$1=n.start,c=n.end;}return {...a,startAnchor:d$1,endAnchor:c,startLabel:a.start,endLabel:a.end,waypoints:r.waypoints??[],isSelfLoop:l}}export{Ye as CoreAnimationRegistry,Xe as CoreOverlayRegistry,Ze as DEFAULT_VIZ_CSS,ze as OverlayBuilder,Se as RichLabelBuilderImpl,Pr as buildOverlaySpecs,Be as collectEdgeLabels,Gt as coreCircleOverlay,Rt as coreDataPointOverlay,Ot as coreFlowAnimation,_t as coreGridLabelsOverlay,Tt as coreGroupOverlay,Dt as coreRectOverlay,Pt as coreSignalOverlay,Lt as coreTextOverlay,Ee as defaultCoreAnimationRegistry,ye as defaultCoreOverlayRegistry,be as resolveDasharray,xi as resolveEdgeGeometry,ur as resolveEdgeGeometryFromData,we as resolveEdgeLabelPosition,yi as viz};
|
|
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 f of d)c.push(...b(f));qe.get(e)?.stop();let n={version:"viz-anim/1",tweens:d.flatMap(f=>f.tweens)},u=f$1({builder:this,container:e,extendAdapter:c.length>0?f=>{for(let g of c)g(f);}: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=Ee.get(i);l||(l=Ne(i,{edgePathResolver:this._edgePathResolver}),Ee.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",f=Array.from(a.children).filter(v=>v.tagName==="g"),g=new Map;f.forEach(v=>{let w=v.getAttribute("data-overlay-id");w&&g.set(w,v);});let b=d.length===g.size,m=!b,h=[];if(!m)for(let v of d){let w=v.key||v.id;if(!g.has(w)){m=true;break}v[a$1]&&h.push(v);}if(!m&&h.length===0)return;let k=new Set;(m?d:h).forEach(v=>{let w=ye.get(v.id);if(!w)return;let _=v.key||v.id;k.add(_);let B=g.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[a$1];}),b||f.forEach(v=>{let w=v.getAttribute("data-overlay-id");w&&!k.has(w)&&v.remove();});}}_renderSceneToDOM(e$1,t){let{viewBox:i,nodes:l,edges:a,overlays:d$1}=e$1,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 C=document.createElementNS(n,"defs"),A=new Set,F=new Map;a.forEach(p=>{let N=p.style?.stroke;if(p.markerEnd&&p.markerEnd!=="none"){let y=ge(p.markerEnd,N,"end");A.has(y)||(A.add(y),F.set(y,We(p.markerEnd,N??"currentColor",y,"end")));}if(p.markerStart&&p.markerStart!=="none"){let y=ge(p.markerStart,N,"start");A.has(y)||(A.add(y),F.set(y,We(p.markerStart,N??"currentColor",y,"start")));}}),A.forEach(p=>{let N=document.createElementNS(n,"marker");N.setAttribute("id",p),N.setAttribute("viewBox","0 0 10 10"),N.setAttribute("markerWidth","10"),N.setAttribute("markerHeight","10"),N.setAttribute("refX","9"),N.setAttribute("refY","5");let y=p.includes("-start");N.setAttribute("orient",y?"auto-start-reverse":"auto");let V=document.createElementNS(n,"svg");V.innerHTML=F.get(p)??"";let E=V.querySelector("marker");if(E)for(;E.firstChild;)N.appendChild(E.firstChild);C.appendChild(N);});let R=new Map;l.forEach(p=>{if(p.style?.shadow){let N=Oe(p.style.shadow),y=Pe(N);R.has(y)||R.set(y,N);}}),R.forEach((p,N)=>{let y=document.createElementNS(n,"svg");y.innerHTML=ot(N,p);let V=y.querySelector("filter");V&&C.appendChild(V);});let Y=new Set,j=e$1.sketch?.enabled;l.forEach(p=>{(p.style?.sketch||j)&&Y.add(Re(p.style,p.id));}),a.forEach(p=>{if(p.style?.sketch||j){let N=0;for(let y=0;y<p.id.length;y++)N=Math.imul(31,N)+p.id.charCodeAt(y)|0;Y.add(Math.abs(N));}}),Y.forEach(p=>{let N=ve(p),y=document.createElementNS(n,"svg");y.innerHTML=lt(N,p);let V=y.querySelector("filter");V&&C.appendChild(V);}),u.appendChild(C);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 re=document.createElementNS(n,"g");re.setAttribute("class","viz-layer-nodes"),re.setAttribute("data-viz-layer","nodes"),q.appendChild(re);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 f$1=u.querySelector('[data-viz-layer="edges"]')||u.querySelector(".viz-layer-edges"),g$1=u.querySelector('[data-viz-layer="nodes"]')||u.querySelector(".viz-layer-nodes"),b=u.querySelector('[data-viz-layer="overlays"]')||u.querySelector(".viz-layer-overlays");if(!f$1||!g$1||!b){this._renderSceneToDOM(e$1,t);return}let m=Array.from(f$1.children).filter(o=>o.tagName==="g"),h=new Map;m.forEach(o=>{let C=o.getAttribute("data-id");C&&h.set(C,o);});let k=new Set;a.forEach(o=>{let C=He(o,c);if(!C)return;let{start:A,end:F}=C;k.add(o.id);let R=h.get(o.id);if(!R){R=document.createElementNS(n,"g"),R.setAttribute("data-id",o.id),R.setAttribute("data-viz-role","edge-group"),f$1.appendChild(R);let p=document.createElementNS(n,"path");p.setAttribute("class","viz-edge"),p.setAttribute("data-viz-role","edge-line"),R.appendChild(p);}let Y=`viz-edge-group ${o.className||""}`,j=o.style?.sketch||e$1.sketch?.enabled;j&&(Y+=" viz-sketch"),R.removeAttribute("style"),o.animations&&o.animations.forEach(p=>{if(p.when===false)return;let N=ke.getEdgeRenderer(p.id);if(N){if(N.getClass&&(Y+=` ${N.getClass({spec:p,element:o})}`),N.getStyle){let y=N.getStyle({spec:p,element:o});Object.entries(y).forEach(([V,E])=>{R.style.setProperty(V,String(E));});}}else Y+=` ${Fe(p.id)}`,Ke(p.params).forEach(([y,V])=>{R.style.setProperty(y,V);});}),R.setAttribute("class",Y);let q;if(A&&F&&A===F)q=f(A,o);else {let p=d(A,F,o);q=e(p.start,p.end,o.routing,o.waypoints);}if(this._edgePathResolver){let p=N=>{let y=He(N,c);if(!y)return "";if(y.start&&y.end&&y.start===y.end)return f(y.start,N).d;let V=d(y.start,y.end,N);return e(V.start,V.end,N.routing,N.waypoints).d};try{let N=this._edgePathResolver(o,e$1,p);typeof N=="string"&&N&&(q.d=N);}catch(N){console.warn(`VizBuilder: edge path resolver threw for edge ${o.id}`,N);}}o.runtime?.opacity!==void 0?R.style.opacity=String(o.runtime.opacity):R.style.removeProperty("opacity");let P=R.querySelector('[data-viz-role="edge-line"]')||R.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 p=ge(o.markerEnd,o.style?.stroke,"end");P.setAttribute("marker-end",`url(#${p})`);}else P.removeAttribute("marker-end");if(o.markerStart&&o.markerStart!=="none"){let p=ge(o.markerStart,o.style?.stroke,"start");P.setAttribute("marker-start",`url(#${p})`);}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 p=0;for(let y=0;y<o.id.length;y++)p=Math.imul(31,p)+o.id.charCodeAt(y)|0;let N=Math.abs(p);P.setAttribute("filter",`url(#${ve(N)})`);}else P.removeAttribute("filter");let re=R.querySelector('[data-viz-role="edge-hit"]')||R.querySelector(".viz-edge-hit");if(re&&re.remove(),o.hitArea||o.onClick){let p=document.createElementNS(n,"path");p.setAttribute("class","viz-edge-hit"),p.setAttribute("data-viz-role","edge-hit"),p.setAttribute("d",q.d),p.setAttribute("stroke","transparent"),p.setAttribute("stroke-width",String(o.hitArea||10)),p.style.cursor=o.onClick?"pointer":"",o.onClick&&p.addEventListener("click",N=>{N.stopPropagation(),o.onClick(o.id,o);}),R.appendChild(p);}R.querySelectorAll('[data-viz-role="edge-label"],.viz-edge-label').forEach(p=>p.remove()),Be(o).forEach((p,N)=>{let y=we(p,q),V=`viz-edge-label ${p.className||""}`,E=ue(y.x,y.y,p.rich??p.text,{className:V,fill:p.fill,fontSize:p.fontSize,fontWeight:p.fontWeight,fontFamily:p.fontFamily,textAnchor:"middle",dominantBaseline:"middle",maxWidth:p.maxWidth,lineHeight:p.lineHeight,verticalAlign:p.verticalAlign,overflow:p.overflow}).replace("<text ",`<text data-viz-role="edge-label" data-label-index="${N}" data-label-position="${p.position}" `);R.insertAdjacentHTML("beforeend",E);});}),m.forEach(o=>{let C=o.getAttribute("data-id");C&&!k.has(C)&&o.remove();});let $=new Map,v=[];l.forEach(o=>{if(o.parentId){let C=$.get(o.parentId);C||(C=[],$.set(o.parentId,C)),C.push(o);}else v.push(o);}),v.sort((o,C)=>(o.zIndex||0)-(C.zIndex||0)),$.forEach(o=>o.sort((C,A)=>(C.zIndex||0)-(A.zIndex||0)));let w=Array.from(g$1.querySelectorAll('g[data-viz-role="node-group"]')),_=new Map;w.forEach(o=>{let C=o.getAttribute("data-id");C&&_.set(C,o);});let B=new Set,s=(o$1,C)=>{B.add(o$1.id);let A=_.get(o$1.id);A||(A=document.createElementNS(n,"g"),A.setAttribute("data-id",o$1.id),A.setAttribute("data-viz-role","node-group")),C.appendChild(A);let F=!!o$1.container,R=`viz-node-group${F?" viz-container":""} ${o$1.className||""}`,Y=o$1.style?.sketch||e$1.sketch?.enabled;Y&&(R+=" viz-sketch"),A.removeAttribute("style"),o$1.animations&&o$1.animations.forEach(z=>{if(z.when===false)return;let O=ke.getNodeRenderer(z.id);if(O){if(O.getClass&&(R+=` ${O.getClass({spec:z,element:o$1})}`),O.getStyle){let Z=O.getStyle({spec:z,element:o$1});Object.entries(Z).forEach(([H,te])=>{A.style.setProperty(H,String(te));});}}else R+=` ${Fe(z.id)}`,Ke(z.params).forEach(([Z,H])=>{A.style.setProperty(Z,H);});}),A.setAttribute("class",R),A._clickHandler=o$1.onClick?z=>{z.stopPropagation(),o$1.onClick(o$1.id,o$1);}:null,A.hasAttribute("data-click-initialized")||(A.addEventListener("click",z=>{A._clickHandler&&A._clickHandler(z);}),A.setAttribute("data-click-initialized","true")),A.style.cursor=o$1.onClick?"pointer":"";let{x:j,y:q}=d$2(o$1),P=A.querySelector('[data-viz-role="node-shape"]')||A.querySelector(".viz-node-shape"),J=f$2(o$1.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"),A.prepend(P)),g(P,o$1.shape,{x:j,y:q});let p=be(o$1.style?.strokeDasharray),N=o$1.style?.shadow?`url(#${Pe(Oe(o$1.style.shadow))})`:void 0;if(dr(P,{fill:o$1.style?.fill??"none",stroke:o$1.style?.stroke??"#111","stroke-width":o$1.style?.strokeWidth??2,opacity:o$1.runtime?.opacity??o$1.style?.opacity,"stroke-dasharray":p||void 0,filter:N}),Y){let z=Re(o$1.style,o$1.id);A.setAttribute("filter",`url(#${ve(z)})`);}else A.removeAttribute("filter");let y=A.querySelector(':scope > [data-viz-role="node-image"], :scope > .viz-node-image');y&&y.remove();let V=A.querySelector(':scope > [data-viz-role="node-icon"], :scope > .viz-node-icon');V&&V.remove();let E=A.querySelector(':scope > [data-viz-role="node-svg"], :scope > .viz-node-svg');E&&E.remove();let D=P,W=z=>{A.insertBefore(z,D.nextSibling),D=z;};if(o$1.image){let z=Ae(o$1,o$1.image.width,o$1.image.height,{position:o$1.image.position,dx:o$1.image.dx,dy:o$1.image.dy}),O=document.createElementNS(n,"image");O.setAttribute("class","viz-node-image"),O.setAttribute("data-viz-role","node-image"),O.setAttribute("x",String(z.x)),O.setAttribute("y",String(z.y)),O.setAttribute("width",String(o$1.image.width)),O.setAttribute("height",String(o$1.image.height)),O.setAttribute("href",o$1.image.href),o$1.image.preserveAspectRatio&&O.setAttribute("preserveAspectRatio",o$1.image.preserveAspectRatio),W(O);}if(o$1.icon){let z=b$1.get(o$1.icon.id);if(!z)console.warn(`VizCraft: icon '${o$1.icon.id}' not found. Use registerIcon().`);else {let O=Ae(o$1,o$1.icon.size,o$1.icon.size,{position:o$1.icon.position,dx:o$1.icon.dx,dy:o$1.icon.dy}),Z=document.createElementNS(n,"g");Z.setAttribute("class","viz-node-icon"),Z.setAttribute("data-viz-role","node-icon"),Z.setAttribute("transform",`translate(${O.x} ${O.y})`),o$1.icon.color&&Z.setAttribute("style",`color:${o$1.icon.color}`),Z.innerHTML=at(z,o$1.icon.size,o$1.icon.size),W(Z);}}if(o$1.svgContent){let z=Ae(o$1,o$1.svgContent.width,o$1.svgContent.height,{position:o$1.svgContent.position,dx:o$1.svgContent.dx,dy:o$1.svgContent.dy}),O=document.createElementNS(n,"g");O.setAttribute("class","viz-node-svg"),O.setAttribute("data-viz-role","node-svg"),O.setAttribute("transform",`translate(${z.x} ${z.y})`),O.innerHTML=Ct(o$1.svgContent.content,o$1.svgContent.width,o$1.svgContent.height),W(O);}if(F&&o$1.container.headerHeight&&"w"in o$1.shape&&"h"in o$1.shape){let z=o$1.shape.w,O=o$1.shape.h,Z=q-O/2+o$1.container.headerHeight,H=A.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"),A.appendChild(H)),H.setAttribute("x1",String(j-z/2)),H.setAttribute("y1",String(Z)),H.setAttribute("x2",String(j+z/2)),H.setAttribute("y2",String(Z)),H.setAttribute("stroke",o$1.style?.stroke??"#111"),H.setAttribute("stroke-width",String(o$1.style?.strokeWidth??2));}else {let z=A.querySelector('[data-viz-role="container-header"]');z&&z.remove();}let K=o$1.compartments&&o$1.compartments.length>0;if(A.querySelectorAll('[data-viz-role="compartment-divider"],[data-viz-role="compartment-label"],[data-viz-role="compartment-entry"]').forEach(z=>z.remove()),K&&"w"in o$1.shape){let z=o$1.shape.w,O=o$1.shape.h,Z=q-O/2,H=8;for(let te=0;te<o$1.compartments.length;te++){let I=o$1.compartments[te];if(te>0){let L=Z+I.y,U=document.createElementNS(n,"line");U.setAttribute("class","viz-compartment-divider"),U.setAttribute("data-viz-role","compartment-divider"),U.setAttribute("data-compartment",I.id),U.setAttribute("x1",String(j-z/2)),U.setAttribute("y1",String(L)),U.setAttribute("x2",String(j+z/2)),U.setAttribute("y2",String(L)),U.setAttribute("stroke",o$1.style?.stroke??"#111"),U.setAttribute("stroke-width",String(o$1.style?.strokeWidth??2)),A.appendChild(U);}if(I.entries&&I.entries.length>0)for(let L of I.entries){let U=j-z/2+H+(L.label?.dx||0),se=Z+I.y+L.y+L.height/2+(L.label?.dy||0),oe=`viz-compartment-entry ${L.label?.className||""}`,me=ue(U,se,L.label?.rich??L.text,{className:oe,fill:L.label?.fill,fontSize:L.label?.fontSize,fontWeight:L.label?.fontWeight,fontFamily:L.label?.fontFamily,textAnchor:L.label?.textAnchor||"start",dominantBaseline:L.label?.dominantBaseline||"middle",maxWidth:L.label?.maxWidth??z-H*2,lineHeight:L.label?.lineHeight,verticalAlign:L.label?.verticalAlign,overflow:L.label?.overflow}).replace("<text ",`<text data-viz-role="compartment-entry" data-compartment="${I.id}" data-entry="${L.id}" `);A.insertAdjacentHTML("beforeend",me);}else if(I.label){let L=j-z/2+H+(I.label.dx||0),U=Z+I.y+I.height/2+(I.label.dy||0),se=`viz-compartment-label ${I.label.className||""}`,oe=ue(L,U,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??z-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}" `);A.insertAdjacentHTML("beforeend",oe);}}for(let te of o$1.compartments)if(te.entries)for(let I of te.entries){if(!I.onClick)continue;let L=A.querySelector(`[data-viz-role="compartment-entry"][data-compartment="${te.id}"][data-entry="${I.id}"]`);L&&(L.addEventListener("click",U=>{U.stopPropagation(),I.onClick();}),L.style.cursor="pointer");}}let Q=j+(o$1.label?.dx||0),T=q+(o$1.label?.dy||0),M=!!o$1.label&&!K;if(o$1.label&&F&&o$1.container.headerHeight&&"h"in o$1.shape&&!o$1.label.dy){let z=o$1.shape.h;T=q-z/2+o$1.container.headerHeight/2,Q=j+(o$1.label.dx||0);}let ee=A.querySelector('[data-viz-role="node-label"]')||A.querySelector(".viz-node-label");if(ee&&(ee.remove(),ee=null),o$1.label&&M){let z=`viz-node-label ${o$1.label.className||""}`,O=ue(Q,T,o$1.label.rich??o$1.label.text,{className:z,fill:o$1.label.fill,fontSize:o$1.label.fontSize,fontWeight:o$1.label.fontWeight,fontFamily:o$1.label.fontFamily,textAnchor:o$1.label.textAnchor||"middle",dominantBaseline:o$1.label.dominantBaseline||"middle",maxWidth:o$1.label.maxWidth,lineHeight:o$1.label.lineHeight,verticalAlign:o$1.label.verticalAlign,overflow:o$1.label.overflow}).replace("<text ",'<text data-viz-role="node-label" ');A.insertAdjacentHTML("beforeend",O),ee=A.querySelector('[data-viz-role="node-label"]');}if(A.querySelectorAll('[data-viz-role="badge"]').forEach(z=>z.remove()),o$1.badges&&o$1.badges.length>0){let z=o(o$1.shape),O=z.width/2,Z=z.height/2;for(let H of o$1.badges){let te=H.fontSize??10,I=3,L=te+I*2,U=Math.max(te*H.text.length*.7+I*2,L),se,oe;H.position==="top-left"?(se=j-O-U/4,oe=q-Z-L/4):H.position==="top-right"?(se=j+O-U*3/4,oe=q-Z-L/4):H.position==="bottom-left"?(se=j-O-U/4,oe=q+Z-L*3/4):(se=j+O-U*3/4,oe=q+Z-L*3/4);let me=document.createElementNS(n,"g");if(me.setAttribute("class","viz-badge"),me.setAttribute("data-viz-role","badge"),H.background){let pe=document.createElementNS(n,"rect");pe.setAttribute("x",String(se)),pe.setAttribute("y",String(oe)),pe.setAttribute("width",String(U)),pe.setAttribute("height",String(L)),pe.setAttribute("rx",String(L/2)),pe.setAttribute("fill",H.background),me.appendChild(pe);}let ce=document.createElementNS(n,"text");ce.setAttribute("x",String(se+U/2)),ce.setAttribute("y",String(oe+L/2)),ce.setAttribute("text-anchor","middle"),ce.setAttribute("dominant-baseline","central"),ce.setAttribute("font-size",String(te)),H.fill&&ce.setAttribute("fill",H.fill),ce.textContent=H.text,me.appendChild(ce),A.appendChild(me);}}A.querySelectorAll('[data-viz-role="port"]').forEach(z=>z.remove()),o$1.ports&&o$1.ports.length>0&&o$1.ports.forEach(z=>{let O=document.createElementNS(n,"circle");O.setAttribute("cx",String(j+z.offset.x)),O.setAttribute("cy",String(q+z.offset.y)),O.setAttribute("r","4"),O.setAttribute("class","viz-port"),O.setAttribute("data-viz-role","port"),O.setAttribute("data-node",o$1.id),O.setAttribute("data-port",z.id),A.appendChild(O);});let he=$.get(o$1.id);if(he&&he.length>0){let z=A.querySelector(':scope > [data-viz-role="container-children"]');z||(z=document.createElementNS(n,"g"),z.setAttribute("class","viz-container-children"),z.setAttribute("data-viz-role","container-children"),A.appendChild(z)),he.forEach(O=>s(O,z));}else {let z=A.querySelector(':scope > [data-viz-role="container-children"]');z&&z.remove();}};v.forEach(o=>s(o,g$1)),w.forEach(o=>{let C=o.getAttribute("data-id");C&&!B.has(C)&&o.remove();});let x=Array.from(b.children).filter(o=>o.tagName==="g"),S=new Map;x.forEach(o=>{let C=o.getAttribute("data-overlay-id");C&&S.set(C,o);});let G=new Set;d$1&&d$1.length>0&&d$1.forEach(o=>{let C=ye.get(o.id);if(C){let A=o.key||o.id;G.add(A);let F=S.get(A);F||(F=document.createElementNS(n,"g"),F.setAttribute("data-overlay-id",A),F.setAttribute("data-viz-role","overlay-group"),b.appendChild(F)),F.setAttribute("class",`viz-overlay-${o.id}${o.className?` ${o.className}`:""}`);let R={spec:o,nodesById:c,edgesById:new Map(a.map(Y=>[Y.id,Y])),scene:e$1,registry:ye};C.update?C.update(R,F):F.innerHTML=C.render(R);}}),x.forEach(o=>{let C=o.getAttribute("data-overlay-id");C&&!G.has(C)&&o.remove();}),Ee.set(u,Ne(u,{edgePathResolver:this._edgePathResolver}));}_renderSceneToSvg(e$2,t){let i=t?.includeRuntime===true,{viewBox:l,nodes:a,edges:d$1,overlays:c}=e$2,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 A=n.get(s.parentId);A&&(S+=A.dx,G+=A.dy);}(x.x!==void 0||x.y!==void 0||S!==s.pos.x||G!==s.pos.y)&&(x.x=S,x.y=G);let C=Object.keys(x).length>0?x:void 0;return {...s,runtime:C}}),f$1=d$1.map(s=>i?s:{...s,runtime:void 0}),g={...e$2,nodes:u,edges:f$1},b=new Map(u.map(s=>[s.id,s])),m=new Map(f$1.map(s=>[s.id,s])),h$1=`<svg viewBox="0 0 ${l.w} ${l.h}" xmlns="http://www.w3.org/2000/svg">`;h$1+=`<style>${Ze}</style>`,h$1+=`
|
|
117
|
+
<defs>`;let k=new Set;d$1.forEach(s=>{let x=s.style?.stroke;if(s.markerEnd&&s.markerEnd!=="none"){let S=ge(s.markerEnd,x,"end");k.has(S)||(k.add(S),h$1+=We(s.markerEnd,x??"currentColor",S,"end"));}if(s.markerStart&&s.markerStart!=="none"){let S=ge(s.markerStart,x,"start");k.has(S)||(k.add(S),h$1+=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)=>{h$1+=ot(x,s);});let v=new Set,w=g.sketch?.enabled;u.forEach(s=>{(s.style?.sketch||w)&&v.add(Re(s.style,s.id));}),f$1.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=>{h$1+=lt(ve(s),s);}),h$1+=`
|
|
118
|
+
</defs>`,h$1+='<g class="viz-layer-edges" data-viz-layer="edges">',f$1.forEach(s=>{let x=He(s,b);if(!x)return;let{start:S,end:G}=x,o="",C="";s.animations&&s.animations.forEach(y=>{if(y.when===false)return;let V=ke.getEdgeRenderer(y.id);if(V){if(V.getClass&&(o+=` ${V.getClass({spec:y,element:s})}`),V.getStyle){let E=V.getStyle({spec:y,element:s});Object.entries(E).forEach(([D,W])=>{C+=`${D}: ${W}; `;});}}else o+=` ${Fe(y.id)}`,Ke(y.params).forEach(([E,D])=>{C+=`${E}: ${D}; `;});});let A=s.markerEnd&&s.markerEnd!=="none"?`marker-end="url(#${ge(s.markerEnd,s.style?.stroke,"end")})"`:"",F=s.markerStart&&s.markerStart!=="none"?`marker-start="url(#${ge(s.markerStart,s.style?.stroke,"start")})"`:"",R;if(S&&G&&S===G)R=f(S,s);else {let y=d(S,G,s);R=e(y.start,y.end,s.routing,s.waypoints);}if(this._edgePathResolver){let y=V=>{let E=He(V,b);if(!E)return "";if(E.start&&E.end&&E.start===E.end)return f(E.start,V).d;let D=d(E.start,E.end,V);return e(D.start,D.end,V.routing,V.waypoints).d};try{let V=this._edgePathResolver(s,g,E=>y(E));typeof V=="string"&&V&&(R.d=V);}catch(V){console.warn(`VizBuilder: edge path resolver threw for edge ${s.id}`,V);}}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,re=P?" viz-sketch":"";h$1+=`<g data-id="${s.id}" data-viz-role="edge-group" class="viz-edge-group${re} ${s.className||""} ${o}" style="${C}${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 y=be(s.style.strokeDasharray);y&&(J+=`stroke-dasharray: ${y}; `);}let p="";if(P){let y=0;for(let V=0;V<s.id.length;V++)y=Math.imul(31,y)+s.id.charCodeAt(V)|0;p=` filter="url(#${ve(Math.abs(y))})"`;}h$1+=`<path d="${R.d}" class="viz-edge" data-viz-role="edge-line" ${A} ${F} style="${J}"${q}${p} />`,Be(s).forEach((y,V)=>{let E=we(y,R),D=`viz-edge-label ${y.className||""}`,K=ue(E.x,E.y,y.rich??y.text,{className:D,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="${V}" data-label-position="${y.position}" `);h$1+=K;}),h$1+="</g>";}),h$1+="</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}=d$2(s),o$1=e$1(s),C="",A="";s.runtime?.opacity!==void 0&&(A+=`opacity: ${s.runtime.opacity}; `),s.animations&&s.animations.forEach(E=>{if(E.when===false)return;let D=ke.getNodeRenderer(E.id);if(D){if(D.getClass&&(C+=` ${D.getClass({spec:E,element:s})}`),D.getStyle){let W=D.getStyle({spec:E,element:s});Object.entries(W).forEach(([K,Q])=>{A+=`${K}: ${Q}; `;});}}else C+=` ${Fe(E.id)}`,Ke(E.params).forEach(([W,K])=>{A+=`${W}: ${K}; `;});});let F=!!s.container,R=s.style?.sketch||w,Y=`viz-node-group${F?" viz-container":""}${R?" viz-sketch":""} ${s.className||""} ${C}`,j=s.runtime?.scale,q=s.runtime?.rotation,P="";if(R){let E=Re(s.style,s.id);P=` filter="url(#${ve(E)})"`;}let re=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="${A}"${re}${P}>`;let J=be(s.style?.strokeDasharray),p=s.style?.shadow?`url(#${Pe(Oe(s.style.shadow))})`:void 0,N=ur({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:p});if(x+=h(o$1,{x:S,y:G},N),s.image){let E=Ae(s,s.image.width,s.image.height,{position:s.image.position,dx:s.image.dx,dy:s.image.dy}),D=s.image.preserveAspectRatio?` preserveAspectRatio="${fe(s.image.preserveAspectRatio)}"`:"",W=fe(s.image.href);x+=`<image x="${E.x}" y="${E.y}" width="${s.image.width}" height="${s.image.height}" href="${W}"${D} class="viz-node-image" data-viz-role="node-image" />`;}if(s.icon){let E=b$1.get(s.icon.id);if(!E)console.warn(`VizCraft: icon '${s.icon.id}' not found. Use registerIcon().`);else {let D=Ae(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:${fe(s.icon.color)}"`:"",K=at(E,s.icon.size,s.icon.size);x+=`<g transform="translate(${D.x} ${D.y})" class="viz-node-icon" data-viz-role="node-icon"${W}>${K}</g>`;}}if(s.svgContent){let E=Ae(s,s.svgContent.width,s.svgContent.height,{position:s.svgContent.position,dx:s.svgContent.dx,dy:s.svgContent.dy}),D=Ct(s.svgContent.content,s.svgContent.width,s.svgContent.height);x+=`<g transform="translate(${E.x} ${E.y})" class="viz-node-svg" data-viz-role="node-svg">${D}</g>`;}if(F&&s.container.headerHeight&&"w"in o$1&&"h"in o$1){let E=o$1.w,D=o$1.h,W=G-D/2+s.container.headerHeight;x+=`<line x1="${S-E/2}" y1="${W}" x2="${S+E/2}" y2="${W}" stroke="${s.style?.stroke??"#111"}" stroke-width="${s.style?.strokeWidth??2}" class="viz-container-header" data-viz-role="container-header" />`;}let y=s.compartments&&s.compartments.length>0;if(y&&"w"in o$1){let E=o$1.w,D=o$1.h,W=G-D/2,K=8;for(let Q=0;Q<s.compartments.length;Q++){let T=s.compartments[Q];if(Q>0){let M=W+T.y;x+=`<line x1="${S-E/2}" y1="${M}" x2="${S+E/2}" y2="${M}" stroke="${s.style?.stroke??"#111"}" stroke-width="${s.style?.strokeWidth??2}" class="viz-compartment-divider" data-viz-role="compartment-divider" data-compartment="${T.id}" />`;}if(T.entries&&T.entries.length>0)for(let M of T.entries){let ee=S-E/2+K+(M.label?.dx||0),ie=W+T.y+M.y+M.height/2+(M.label?.dy||0),ne=`viz-compartment-entry ${M.label?.className||""}`,he=ue(ee,ie,M.label?.rich??M.text,{className:ne,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??E-K*2,lineHeight:M.label?.lineHeight,verticalAlign:M.label?.verticalAlign,overflow:M.label?.overflow}).replace("<text ",`<text data-viz-role="compartment-entry" data-compartment="${fe(T.id)}" data-entry="${fe(M.id)}" `);x+=he;}else if(T.label){let M=S-E/2+K+(T.label.dx||0),ee=W+T.y+T.height/2+(T.label.dy||0),ie=`viz-compartment-label ${T.label.className||""}`,ne=ue(M,ee,T.label.rich??T.label.text,{className:ie,fill:T.label.fill,fontSize:T.label.fontSize,fontWeight:T.label.fontWeight,fontFamily:T.label.fontFamily,textAnchor:T.label.textAnchor||"start",dominantBaseline:T.label.dominantBaseline||"middle",maxWidth:T.label.maxWidth??E-K*2,lineHeight:T.label.lineHeight,verticalAlign:T.label.verticalAlign,overflow:T.label.overflow}).replace("<text ",`<text data-viz-role="compartment-label" data-compartment="${T.id}" `);x+=ne;}}}if(s.label&&!y){let E=S+(s.label.dx||0),D=G+(s.label.dy||0);if(F&&s.container.headerHeight&&"h"in o$1&&!s.label.dy){let T=o$1.h;D=G-T/2+s.container.headerHeight/2,E=S+(s.label.dx||0);}let W=`viz-node-label ${s.label.className||""}`,Q=ue(E,D,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 E=o(o$1),D=E.width/2,W=E.height/2;for(let K of s.badges){let Q=K.fontSize??10,T=3,M=Q+T*2,ee=Math.max(Q*K.text.length*.7+T*2,M),ie,ne;if(K.position==="top-left"?(ie=S-D-ee/4,ne=G-W-M/4):K.position==="top-right"?(ie=S+D-ee*3/4,ne=G-W-M/4):K.position==="bottom-left"?(ie=S-D-ee/4,ne=G+W-M*3/4):(ie=S+D-ee*3/4,ne=G+W-M*3/4),x+='<g class="viz-badge" data-viz-role="badge">',K.background){let O=fe(K.background);x+=`<rect x="${ie}" y="${ne}" width="${ee}" height="${M}" rx="${M/2}" fill="${O}" />`;}let he=K.fill?` fill="${fe(K.fill)}"`:"",z=K.text.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");x+=`<text x="${ie+ee/2}" y="${ne+M/2}" text-anchor="middle" dominant-baseline="central" font-size="${Q}"${he}>${z}</text>`,x+="</g>";}}s.ports&&s.ports.length>0&&s.ports.forEach(E=>{let D=S+E.offset.x,W=G+E.offset.y;x+=`<circle cx="${D}" cy="${W}" r="4" class="viz-port" data-viz-role="port" data-node="${s.id}" data-port="${E.id}" />`;});let V=_.get(s.id);return V&&V.length>0&&(x+='<g class="viz-container-children" data-viz-role="container-children">',V.forEach(E=>{x+=B(E);}),x+="</g>"),x+="</g>",x};return h$1+='<g class="viz-layer-nodes" data-viz-layer="nodes">',u.forEach(s=>{s.parentId||(h$1+=B(s));}),h$1+="</g>",c&&c.length>0&&(h$1+='<g class="viz-layer-overlays" data-viz-layer="overlays">',c.forEach(s=>{let x=ye.get(s.id);x&&(h$1+=x.render({spec:s,nodesById:b,edgesById:m,scene:g,registry:ye}));}),h$1+="</g>"),h$1+="</svg>",h$1}};function vi(){return new dt}function Ai(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 cr(t,i)}function cr(r,e$1){let t=r.from?e$1.get(r.from)??null:null,i=r.to?e$1.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$1,c;if(l){let n=f(t,r);a=n,d$1=n.exitPoint,c=n.entryPoint;}else {let n=d(t,i,r);a=e(n.start,n.end,r.routing,r.waypoints),d$1=n.start,c=n.end;}return {...a,startAnchor:d$1,endAnchor:c,startLabel:a.start,endLabel:a.end,waypoints:r.waypoints??[],isSelfLoop:l}}export{Ye as CoreAnimationRegistry,Xe as CoreOverlayRegistry,Ze as DEFAULT_VIZ_CSS,ze as OverlayBuilder,Se as RichLabelBuilderImpl,_r as buildOverlaySpecs,Be as collectEdgeLabels,Tt as coreCircleOverlay,Gt as coreDataPointOverlay,_t as coreFlowAnimation,Dt as coreGridLabelsOverlay,It as coreGroupOverlay,Lt as coreRectOverlay,Rt as coreSignalOverlay,Mt as coreTextOverlay,ke as defaultCoreAnimationRegistry,ye as defaultCoreOverlayRegistry,be as resolveDasharray,Ai as resolveEdgeGeometry,cr as resolveEdgeGeometryFromData,we as resolveEdgeLabelPosition,vi as viz};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vizcraft",
|
|
3
|
-
"version": "1.10.
|
|
3
|
+
"version": "1.10.1",
|
|
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",
|