libpetri 2.0.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/{chunk-4L6JVKH4.js → chunk-B2CV5M3L.js} +64 -2
  2. package/dist/chunk-B2CV5M3L.js.map +1 -0
  3. package/dist/chunk-RNWTYK5B.js +419 -0
  4. package/dist/chunk-RNWTYK5B.js.map +1 -0
  5. package/dist/debug/index.d.ts +2 -2
  6. package/dist/debug/index.js +1 -1
  7. package/dist/doclet/index.d.ts +1 -1
  8. package/dist/doclet/index.js +2 -2
  9. package/dist/doclet/resources/petrinet-diagrams.css +263 -0
  10. package/dist/doclet/resources/petrinet-diagrams.js +32 -6
  11. package/dist/dot-exporter-WJMCJEFK.js +8 -0
  12. package/dist/{event-store-2zkXeQkd.d.ts → event-store-I3QiQABh.d.ts} +1 -1
  13. package/dist/export/index.d.ts +3 -3
  14. package/dist/export/index.js +1 -1
  15. package/dist/index.d.ts +4 -4
  16. package/dist/index.js +66 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/{petri-net-BDrj4XZE.d.ts → petri-net-CKZYPOsL.d.ts} +30 -0
  19. package/dist/render-QK57X4TP.js +73 -0
  20. package/dist/render-QK57X4TP.js.map +1 -0
  21. package/dist/verification/index.d.ts +2 -2
  22. package/dist/viewer/index.d.ts +68 -2
  23. package/dist/viewer/index.js +582 -75
  24. package/dist/viewer/index.js.map +1 -1
  25. package/dist/viewer/layout/index.d.ts +200 -0
  26. package/dist/viewer/layout/index.js +15 -0
  27. package/dist/viewer/layout/index.js.map +1 -0
  28. package/dist/viewer/viewer-static.iife.js +4 -2
  29. package/dist/viewer/viewer.css +263 -0
  30. package/dist/viewer/viewer.iife.js +32 -6
  31. package/package.json +12 -1
  32. package/dist/chunk-4L6JVKH4.js.map +0 -1
  33. package/dist/dot-exporter-PMHOQHZ3.js +0 -8
  34. package/dist/render-P6GROU7J.js +0 -16
  35. package/dist/render-P6GROU7J.js.map +0 -1
  36. /package/dist/{dot-exporter-PMHOQHZ3.js.map → dot-exporter-WJMCJEFK.js.map} +0 -0
@@ -1,3 +1,5 @@
1
1
  /*! libpetri viewer (IIFE) — generated, do not edit; source: typescript/src/viewer/ */
2
- "use strict";(()=>{var Er=Object.create;var Te=Object.defineProperty;var Tr=Object.getOwnPropertyDescriptor;var Ar=Object.getOwnPropertyNames;var Lr=Object.getPrototypeOf,Mr=Object.prototype.hasOwnProperty;var Or=(t,e)=>()=>(t&&(e=t(t=0)),e);var N=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),ot=(t,e)=>{for(var r in e)Te(t,r,{get:e[r],enumerable:!0})},zr=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let u of Ar(e))!Mr.call(t,u)&&u!==r&&Te(t,u,{get:()=>e[u],enumerable:!(i=Tr(e,u))||i.enumerable});return t};var Br=(t,e,r)=>(r=t!=null?Er(Lr(t)):{},zr(e||!t||!t.__esModule?Te(r,"default",{value:t,enumerable:!0}):r,t));var at=N((hn,ce)=>{ce.exports=it;ce.exports.addWheelListener=it;ce.exports.removeWheelListener=Fr;function it(t,e,r){t.addEventListener("wheel",e,r)}function Fr(t,e,r){t.removeEventListener("wheel",e,r)}});var dt=N((gn,ft)=>{var Vr=4,kr=.001,Dr=1e-7,Pr=10,Q=11,ue=1/(Q-1),Ir=typeof Float32Array=="function";function lt(t,e){return 1-3*e+3*t}function st(t,e){return 3*e-6*t}function ct(t){return 3*t}function fe(t,e,r){return((lt(e,r)*t+st(e,r))*t+ct(e))*t}function ut(t,e,r){return 3*lt(e,r)*t*t+2*st(e,r)*t+ct(e)}function Nr(t,e,r,i,u){var c,o,v=0;do o=e+(r-e)/2,c=fe(o,i,u)-t,c>0?r=o:e=o;while(Math.abs(c)>Dr&&++v<Pr);return o}function _r(t,e,r,i){for(var u=0;u<Vr;++u){var c=ut(e,r,i);if(c===0)return e;var o=fe(e,r,i)-t;e-=o/c}return e}function qr(t){return t}ft.exports=function(e,r,i,u){if(!(0<=e&&e<=1&&0<=i&&i<=1))throw new Error("bezier x values must be in [0, 1] range");if(e===r&&i===u)return qr;for(var c=Ir?new Float32Array(Q):new Array(Q),o=0;o<Q;++o)c[o]=fe(o*ue,e,i);function v(p){for(var f=0,d=1,y=Q-1;d!==y&&c[d]<=p;++d)f+=ue;--d;var x=(p-c[d])/(c[d+1]-c[d]),h=f+x*ue,L=ut(h,e,i);return L>=kr?_r(p,h,e,i):L===0?h:Nr(p,f,f+ue,e,i)}return function(f){return f===0?0:f===1?1:fe(v(f),r,u)}}});var ht=N((yn,de)=>{var X=dt(),mt={ease:X(.25,.1,.25,1),easeIn:X(.42,0,1,1),easeOut:X(0,0,.58,1),easeInOut:X(.42,0,.58,1),linear:X(0,0,1,1)};de.exports=Zr;de.exports.makeAggregateRaf=vt;de.exports.sharedScheduler=vt();function Zr(t,e,r){var i=Object.create(null),u=Object.create(null);r=r||{};var c=typeof r.easing=="function"?r.easing:mt[r.easing];c||(r.easing&&console.warn("Unknown easing function in amator: "+r.easing),c=mt.ease);var o=typeof r.step=="function"?r.step:pt,v=typeof r.done=="function"?r.done:pt,p=Rr(r.scheduler),f=Object.keys(e);f.forEach(function(S){i[S]=t[S],u[S]=e[S]-t[S]});var d=typeof r.duration=="number"?r.duration:400,y=Math.max(1,d*.06),x,h=0;return x=p.next(B),{cancel:L};function L(){p.cancel(x),x=0}function B(){var S=c(h/y);h+=1,F(S),h<=y?(x=p.next(B),o(t)):(x=0,setTimeout(function(){v(t)},0))}function F(S){f.forEach(function(P){t[P]=u[P]*S+i[P]})}}function pt(){}function Rr(t){if(!t){var e=typeof window<"u"&&window.requestAnimationFrame;return e?Gr():Hr()}if(typeof t.next!="function")throw new Error("Scheduler is supposed to have next(cb) function");if(typeof t.cancel!="function")throw new Error("Scheduler is supposed to have cancel(handle) function");return t}function Gr(){return{next:window.requestAnimationFrame.bind(window),cancel:window.cancelAnimationFrame.bind(window)}}function Hr(){return{next:function(t){return setTimeout(t,1e3/60)},cancel:function(t){return clearTimeout(t)}}}function vt(){var t=new Set,e=new Set,r=0;return{next:u,cancel:u,clearAll:i};function i(){t.clear(),e.clear(),cancelAnimationFrame(r),r=0}function u(p){e.add(p),c()}function c(){r||(r=requestAnimationFrame(o))}function o(){r=0;var p=e;e=t,t=p,t.forEach(function(f){f()}),t.clear()}function v(p){e.delete(p)}}});var yt=N((xn,gt)=>{"use strict";function Wr(t){Yr(t);let e=jr(t);return t.on=e.on,t.off=e.off,t.fire=e.fire,t}function jr(t){let e=Object.create(null);return{on:function(r,i,u){if(typeof i!="function")throw new Error("callback is expected to be a function");let c=e[r];return c||(c=e[r]=[]),c.push({callback:i,ctx:u}),t},off:function(r,i){if(typeof r>"u")return e=Object.create(null),t;if(e[r])if(typeof i!="function")delete e[r];else{let u=e[r];for(let c=0;c<u.length;++c)u[c].callback===i&&u.splice(c,1)}return t},fire:function(r){let i=e[r];if(!i)return t;let u;arguments.length>1&&(u=Array.prototype.slice.call(arguments,1));for(let c=0;c<i.length;++c){let o=i[c];o.callback.apply(o.ctx,u)}return t}}}function Yr(t){if(!t)throw new Error("Eventify cannot use falsy object as events subject");let e=["on","fire","off"];for(let r=0;r<e.length;++r)if(t.hasOwnProperty(e[r]))throw new Error("Subject cannot be eventified, since it already has property '"+e[r]+"'")}gt.exports=Wr});var bt=N((bn,xt)=>{xt.exports=$r;function $r(t,e,r){typeof r!="object"&&(r={});var i=typeof r.minVelocity=="number"?r.minVelocity:5,u=typeof r.amplitude=="number"?r.amplitude:.25,c=typeof r.cancelAnimationFrame=="function"?r.cancelAnimationFrame:Ur(),o=typeof r.requestAnimationFrame=="function"?r.requestAnimationFrame:Kr(),v,p,f=342,d,y,x,h,L,B,F,S;return{start:A,stop:g,cancel:P};function P(){c(d),c(S)}function A(){v=t(),h=F=y=L=0,p=new Date,c(d),c(S),d=o(m)}function m(){var C=Date.now(),O=C-p;p=C;var V=t(),k=V.x-v.x,q=V.y-v.y;v=V;var z=1e3/(1+O);y=.8*k*z+.2*y,L=.8*q*z+.2*L,d=o(m)}function g(){c(d),c(S);var C=t();x=C.x,B=C.y,p=Date.now(),(y<-i||y>i)&&(h=u*y,x+=h),(L<-i||L>i)&&(F=u*L,B+=F),S=o(w)}function w(){var C=Date.now()-p,O=!1,V=0,k=0;h&&(V=-h*Math.exp(-C/f),V>.5||V<-.5?O=!0:V=h=0),F&&(k=-F*Math.exp(-C/f),k>.5||k<-.5?O=!0:k=F=0),O&&(e(x+V,B+k),S=o(w))}}function Ur(){return typeof cancelAnimationFrame=="function"?cancelAnimationFrame:clearTimeout}function Kr(){return typeof requestAnimationFrame=="function"?requestAnimationFrame:function(t){return setTimeout(t,16)}}});var Et=N((wn,Ct)=>{Ct.exports=Jr;function Jr(t){if(t)return{capture:St,release:St};var e,r,i,u=!1;return{capture:c,release:o};function c(v){u=!0,r=window.document.onselectstart,i=window.document.ondragstart,window.document.onselectstart=wt,e=v,e.ondragstart=wt}function o(){u&&(u=!1,window.document.onselectstart=r,e&&(e.ondragstart=i))}}function wt(t){return t.stopPropagation(),!1}function St(){}});var At=N((Sn,Tt)=>{Tt.exports=Qr;function Qr(){this.x=0,this.y=0,this.scale=1}});var Mt=N((Cn,Ae)=>{Ae.exports=Xr;Ae.exports.canAttach=Lt;function Xr(t,e){if(!Lt(t))throw new Error("svg element is required for svg.panzoom to work");var r=t.ownerSVGElement;if(!r)throw new Error("Do not apply panzoom to the root <svg> element. Use its child instead (e.g. <g></g>). As of March 2016 only FireFox supported transform on the root element");e.disableKeyboardInteraction||r.setAttribute("tabindex",0);var i={getBBox:c,getScreenCTM:o,getOwner:u,applyTransform:p,initTransform:v};return i;function u(){return r}function c(){var f=t.getBBox();return{left:f.x,top:f.y,width:f.width,height:f.height}}function o(){var f=r.getCTM();return f||r.getScreenCTM()}function v(f){var d=t.getCTM();d===null&&(d=document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGMatrix()),f.x=d.e,f.y=d.f,f.scale=d.a,r.removeAttributeNS(null,"viewBox")}function p(f){t.setAttribute("transform","matrix("+f.scale+" 0 0 "+f.scale+" "+f.x+" "+f.y+")")}}function Lt(t){return t&&t.ownerSVGElement&&t.getCTM}});var zt=N((En,Le)=>{Le.exports=en;Le.exports.canAttach=Ot;function en(t,e){var r=Ot(t);if(!r)throw new Error("panzoom requires DOM element to be attached to the DOM tree");var i=t.parentElement;t.scrollTop=0,e.disableKeyboardInteraction||i.setAttribute("tabindex",0);var u={getBBox:o,getOwner:c,applyTransform:v};return u;function c(){return i}function o(){return{left:0,top:0,width:t.clientWidth,height:t.clientHeight}}function v(p){t.style.transformOrigin="0 0 0",t.style.transform="matrix("+p.scale+", 0, 0, "+p.scale+", "+p.x+", "+p.y+")"}}function Ot(t){return t&&t.parentElement&&t.style}});var Zt=N((Tn,qt)=>{"use strict";var Bt=at(),Me=ht(),tn=yt(),rn=bt(),Nt=Et(),nn=Nt(),on=Nt(!0),an=At(),Ft=Mt(),Vt=zt(),ln=1,sn=1.75,kt=300,Dt=200;qt.exports=_t;function _t(t,e){e=e||{};var r=e.controller;if(r||(Ft.canAttach(t)?r=Ft(t,e):Vt.canAttach(t)&&(r=Vt(t,e))),!r)throw new Error("Cannot create panzoom for the current type of dom element");var i=r.getOwner(),u={x:0,y:0},c=!1,o=new an;r.initTransform&&r.initTransform(o);var v=typeof e.filterKey=="function"?e.filterKey:$,p=typeof e.pinchSpeed=="number"?e.pinchSpeed:1,f=e.bounds,d=typeof e.maxZoom=="number"?e.maxZoom:Number.POSITIVE_INFINITY,y=typeof e.minZoom=="number"?e.minZoom:0,x=typeof e.boundsPadding=="number"?e.boundsPadding:.05,h=typeof e.zoomDoubleClickSpeed=="number"?e.zoomDoubleClickSpeed:sn,L=e.beforeWheel||$,B=e.beforeMouseDown||$,F=typeof e.zoomSpeed=="number"?e.zoomSpeed:ln,S=Pt(e.transformOrigin),P=e.enableTextSelection?on:nn;cn(f),e.autocenter&&er();var A,m=0,g=0,w=0,C=null,O=new Date,V,k=!1,q=!1,z,D,ge,ye,xe,I;"smoothScroll"in e&&!e.smoothScroll?I=un():I=rn(ur,vr,e.smoothScroll);var be,U,te,re=!1;Ne();var ne={dispose:hr,moveBy:H,moveTo:we,smoothMoveTo:pr,centerOn:mr,zoomTo:le,zoomAbs:oe,smoothZoom:ae,smoothZoomAbs:Cr,showRectangle:Xt,pause:Kt,resume:Jt,isPaused:Qt,getTransform:tr,getMinZoom:rr,setMinZoom:nr,getMaxZoom:or,setMaxZoom:ir,getTransformOrigin:ar,setTransformOrigin:lr,getZoomSpeed:sr,setZoomSpeed:cr};tn(ne);var Fe=typeof e.initialX=="number"?e.initialX:o.x,Ve=typeof e.initialY=="number"?e.initialY:o.y,ke=typeof e.initialZoom=="number"?e.initialZoom:o.scale;return(Fe!=o.x||Ve!=o.y||ke!=o.scale)&&oe(Fe,Ve,ke),ne;function Kt(){_e(),re=!0}function Jt(){re&&(Ne(),re=!1)}function Qt(){return re}function Xt(n){var a=i.getBoundingClientRect(),l=Z(a.width,a.height),s=n.right-n.left,b=n.bottom-n.top;if(!Number.isFinite(s)||!Number.isFinite(b))throw new Error("Invalid rectangle");var E=l.x/s,T=l.y/b,M=Math.min(E,T);o.x=-(n.left+s/2)*M+l.x/2,o.y=-(n.top+b/2)*M+l.y/2,o.scale=M}function Z(n,a){if(r.getScreenCTM){var l=r.getScreenCTM(),s=l.a,b=l.d,E=l.e,T=l.f;u.x=n*s-E,u.y=a*b-T}else u.x=n,u.y=a;return u}function er(){var n,a,l=0,s=0,b=Pe();if(b)l=b.left,s=b.top,n=b.right-b.left,a=b.bottom-b.top;else{var E=i.getBoundingClientRect();n=E.width,a=E.height}var T=r.getBBox();if(!(T.width===0||T.height===0)){var M=a/T.height,j=n/T.width,R=Math.min(j,M);o.x=-(T.left+T.width/2)*R+n/2+l,o.y=-(T.top+T.height/2)*R+a/2+s,o.scale=R}}function tr(){return o}function rr(){return y}function nr(n){y=n}function or(){return d}function ir(n){d=n}function ar(){return S}function lr(n){S=Pt(n)}function sr(){return F}function cr(n){if(!Number.isFinite(n))throw new Error("Zoom speed should be a number");F=n}function ur(){return{x:o.x,y:o.y}}function we(n,a){o.x=n,o.y=a,Se(),W("pan"),Ce()}function De(n,a){we(o.x+n,o.y+a)}function Se(){var n=Pe();if(n){var a=!1,l=fr(),s=n.left-l.right;return s>0&&(o.x+=s,a=!0),s=n.right-l.left,s<0&&(o.x+=s,a=!0),s=n.top-l.bottom,s>0&&(o.y+=s,a=!0),s=n.bottom-l.top,s<0&&(o.y+=s,a=!0),a}}function Pe(){if(f){if(typeof f=="boolean"){var n=i.getBoundingClientRect(),a=n.width,l=n.height;return{left:a*x,top:l*x,right:a*(1-x),bottom:l*(1-x)}}return f}}function fr(){var n=r.getBBox(),a=dr(n.left,n.top);return{left:a.x,top:a.y,right:n.width*o.scale+a.x,bottom:n.height*o.scale+a.y}}function dr(n,a){return{x:n*o.scale+o.x,y:a*o.scale+o.y}}function Ce(){c=!0,A=window.requestAnimationFrame(gr)}function Ie(n,a,l){if(Oe(n)||Oe(a)||Oe(l))throw new Error("zoom requires valid numbers");var s=o.scale*l;if(s<y){if(o.scale===y)return;l=y/o.scale}if(s>d){if(o.scale===d)return;l=d/o.scale}var b=Z(n,a);if(o.x=b.x-l*(b.x-o.x),o.y=b.y-l*(b.y-o.y),f&&x===1&&y===1)o.scale*=l,Se();else{var E=Se();E||(o.scale*=l)}W("zoom"),Ce()}function oe(n,a,l){var s=l/o.scale;Ie(n,a,s)}function mr(n){var a=n.ownerSVGElement;if(!a)throw new Error("ui element is required to be within the scene");var l=n.getBoundingClientRect(),s=l.left+l.width/2,b=l.top+l.height/2,E=a.getBoundingClientRect(),T=E.width/2-s,M=E.height/2-b;H(T,M,!0)}function pr(n,a){H(n-o.x,a-o.y,!0)}function H(n,a,l){if(!l)return De(n,a);be&&be.cancel();var s={x:0,y:0},b={x:n,y:a},E=0,T=0;be=Me(s,b,{step:function(M){De(M.x-E,M.y-T),E=M.x,T=M.y}})}function vr(n,a){se(),we(n,a)}function hr(){_e()}function Ne(){i.addEventListener("mousedown",Ye,{passive:!1}),i.addEventListener("dblclick",je,{passive:!1}),i.addEventListener("touchstart",Ze,{passive:!1}),i.addEventListener("keydown",qe,{passive:!1}),Bt.addWheelListener(i,Qe,{passive:!1}),Ce()}function _e(){Bt.removeWheelListener(i,Qe),i.removeEventListener("mousedown",Ye),i.removeEventListener("keydown",qe),i.removeEventListener("dblclick",je),i.removeEventListener("touchstart",Ze),A&&(window.cancelAnimationFrame(A),A=0),I.cancel(),Ke(),Je(),P.release(),Ee()}function gr(){c&&yr()}function yr(){c=!1,r.applyTransform(o),W("transform"),A=0}function qe(n){var a=0,l=0,s=0;if(n.keyCode===38?l=1:n.keyCode===40?l=-1:n.keyCode===37?a=1:n.keyCode===39?a=-1:n.keyCode===189||n.keyCode===109?s=1:(n.keyCode===187||n.keyCode===107)&&(s=-1),!v(n,a,l,s)){if(a||l){n.preventDefault(),n.stopPropagation();var b=i.getBoundingClientRect(),E=Math.min(b.width,b.height),T=.05,M=E*T*a,j=E*T*l;H(M,j)}if(s){var R=Xe(s*100),E=S?J():xr();le(E.x,E.y,R)}}}function xr(){var n=i.getBoundingClientRect();return{x:n.width/2,y:n.height/2}}function Ze(n){if(br(n),K(),n.touches.length===1)return Sr(n,n.touches[0]);n.touches.length===2&&(xe=We(n.touches[0],n.touches[1]),te=!0,Re())}function br(n){e.onTouch&&!e.onTouch(n)||(n.stopPropagation(),n.preventDefault())}function wr(n){K(),!(e.onDoubleClick&&!e.onDoubleClick(n))&&(n.preventDefault(),n.stopPropagation())}function Sr(n){g=new Date;var a=n.touches[0],l=_(a);V=l;var s=Z(l.x,l.y);z=s.x,D=s.y,ge=z,ye=D,I.cancel(),Re()}function Re(){k||(k=!0,document.addEventListener("touchmove",Ge),document.addEventListener("touchend",ie),document.addEventListener("touchcancel",ie))}function Ge(n){if(n.touches.length===1){n.stopPropagation();var a=n.touches[0],l=_(a),s=Z(l.x,l.y),b=s.x-z,E=s.y-D;b!==0&&E!==0&&et(),z=s.x,D=s.y,H(b,E)}else if(n.touches.length===2){te=!0;var T=n.touches[0],M=n.touches[1],j=We(T,M),R=1+(j/xe-1)*p,rt=_(T),nt=_(M);if(z=(rt.x+nt.x)/2,D=(rt.y+nt.y)/2,S){var l=J();z=l.x,D=l.y}le(z,D,R),xe=j,n.stopPropagation(),n.preventDefault()}}function K(){w&&(clearTimeout(w),w=0)}function He(n){if(e.onClick){K();var a=z-ge,l=D-ye,s=Math.sqrt(a*a+l*l);s>5||(w=setTimeout(function(){w=0,e.onClick(n)},kt))}}function ie(n){if(K(),n.touches.length>0){var a=_(n.touches[0]),l=Z(a.x,a.y);z=l.x,D=l.y}else{var s=new Date;if(s-m<kt)if(S){var a=J();ae(a.x,a.y,h)}else ae(V.x,V.y,h);else s-g<Dt&&He(n);m=s,Ee(),Je()}}function We(n,a){var l=n.clientX-a.clientX,s=n.clientY-a.clientY;return Math.sqrt(l*l+s*s)}function je(n){wr(n);var a=_(n);S&&(a=J()),ae(a.x,a.y,h)}function Ye(n){if(K(),!B(n)){if(C=n,O=new Date,k)return n.stopPropagation(),!1;var a=n.button===1&&window.event!==null||n.button===0;if(a){I.cancel();var l=_(n),s=Z(l.x,l.y);return ge=z=s.x,ye=D=s.y,document.addEventListener("mousemove",$e),document.addEventListener("mouseup",Ue),P.capture(n.target||n.srcElement),!1}}}function $e(n){if(!k){et();var a=_(n),l=Z(a.x,a.y),s=l.x-z,b=l.y-D;z=l.x,D=l.y,H(s,b)}}function Ue(){var n=new Date;n-O<Dt&&He(C),P.release(),Ee(),Ke()}function Ke(){document.removeEventListener("mousemove",$e),document.removeEventListener("mouseup",Ue),q=!1}function Je(){document.removeEventListener("touchmove",Ge),document.removeEventListener("touchend",ie),document.removeEventListener("touchcancel",ie),q=!1,te=!1,k=!1}function Qe(n){if(!L(n)){I.cancel();var a=n.deltaY;n.deltaMode>0&&(a*=100);var l=Xe(a);if(l!==1){var s=S?J():_(n);le(s.x,s.y,l),n.preventDefault()}}}function _(n){var a,l,s=i.getBoundingClientRect();return a=n.clientX-s.left,l=n.clientY-s.top,{x:a,y:l}}function ae(n,a,l){var s=o.scale,b={scale:s},E={scale:l*s};I.cancel(),se(),U=Me(b,E,{step:function(T){oe(n,a,T.scale)},done:tt})}function Cr(n,a,l){var s=o.scale,b={scale:s},E={scale:l};I.cancel(),se(),U=Me(b,E,{step:function(T){oe(n,a,T.scale)},done:tt})}function J(){var n=i.getBoundingClientRect();return{x:n.width*S.x,y:n.height*S.y}}function le(n,a,l){return I.cancel(),se(),Ie(n,a,l)}function se(){U&&(U.cancel(),U=null)}function Xe(n){var a=Math.sign(n),l=Math.min(.25,Math.abs(F*n/128));return 1-a*l}function et(){q||(W("panstart"),q=!0,I.start())}function Ee(){q&&(te||I.stop(),W("panend"))}function tt(){W("zoomend")}function W(n){ne.fire(n,ne)}}function Pt(t){if(t){if(typeof t=="object")return(!Y(t.x)||!Y(t.y))&&It(t),t;It()}}function It(t){throw console.error(t),new Error(["Cannot parse transform origin.","Some good examples:",' "center center" can be achieved with {x: 0.5, y: 0.5}',' "top center" can be achieved with {x: 0.5, y: 0}',' "bottom right" can be achieved with {x: 1, y: 1}'].join(`
3
- `))}function $(){}function cn(t){var e=typeof t;if(!(e==="undefined"||e==="boolean")){var r=Y(t.left)&&Y(t.top)&&Y(t.bottom)&&Y(t.right);if(!r)throw new Error("Bounds object is not valid. It can be: undefined, boolean (true|false) or an object {left, top, right, bottom}")}}function Y(t){return Number.isFinite(t)}function Oe(t){return Number.isNaN?Number.isNaN(t):t!==t}function un(){return{start:$,stop:$,cancel:$}}function fn(){if(typeof document>"u")return;var t=document.getElementsByTagName("script");if(!t)return;for(var e,r=0;r<t.length;++r){var i=t[r];if(i.src&&i.src.match(/\bpanzoom(\.min)?\.js/)){e=i;break}}if(!e)return;var u=e.getAttribute("query");if(!u)return;var c=e.getAttribute("name")||"pz",o=Date.now();v();function v(){var d=document.querySelector(u);if(!d){var y=Date.now(),x=y-o;if(x<2e3){setTimeout(v,100);return}console.error("Cannot find the panzoom element",c);return}var h=p(e);console.log(h),window[c]=_t(d,h)}function p(d){for(var y=d.attributes,x={},h=0;h<y.length;++h){var L=y[h],B=f(L);B&&(x[B.name]=B.value)}return x}function f(d){if(d.name){var y=d.name[0]==="p"&&d.name[1]==="z"&&d.name[2]==="-";if(y){var x=d.name.substr(3),h=JSON.parse(d.value);return{name:x,value:h}}}}}fn()});var Yt={};ot(Yt,{getViz:()=>pn,renderDotToSvg:()=>mn});async function mn(t){throw new Error("libpetri viewer: static bundle has no DOT renderer. Either ship the pre-rendered SVG in the host (mount(null, container, opts)) or load the full viewer.iife.js bundle.")}function pn(){throw new Error("libpetri viewer: static bundle has no Viz instance.")}var $t=Or(()=>{});var Be={};ot(Be,{DEFAULT_PANZOOM_OPTS:()=>me,VIEWER_CSS_VARIABLES:()=>ze,colorForPrefix:()=>he,discoverClusters:()=>ve,mount:()=>Ut});var Rt=Br(Zt(),1),me={smoothScroll:!1,zoomDoubleClickSpeed:1,maxZoom:1e3,minZoom:.02};function Gt(t,e,r){if(r)try{r.dispose()}catch{}let i={...me,...e};return(0,Rt.default)(t,i)}function ve(t){let e=new Map,r=t.querySelectorAll("g.cluster");if(!r.length)return e;let i=Array.from(t.querySelectorAll("g.node"));for(let u of Array.from(r)){let c=G(u,"title");if(!c)continue;let o=c.textContent??"";if(!o.startsWith("cluster_"))continue;let v=o.slice(8);if(e.has(v))continue;let p=0;for(let f of i){if(f.getAttribute("data-instance"))continue;let d=G(f,"title");if(!d)continue;let y=(d.textContent??"").trim();pe(y,v)&&(f.setAttribute("data-instance",v),p++)}e.set(v,{prefix:v,group:u,nodeCount:p,color:he(v)})}return e}function pe(t,e){return t===e||t.startsWith(`${e}/`)||t.startsWith(`p_${e}_`)||t.startsWith(`t_${e}_`)||t.startsWith(`j_${e}_`)}function he(t){let e=2166136261;for(let i=0;i<t.length;i++)e^=t.charCodeAt(i),e=e*16777619>>>0;let r=Math.floor((e/4294967296*360+e%360*.61803)%360);return r<0&&(r+=360),`hsl(${r}, 60%, 45%)`}function Ht(t){for(let e of t.values()){let r=G(e.group,"polygon")??G(e.group,"path");r&&(r.setAttribute("stroke",e.color),r.setAttribute("stroke-width","2.2"))}}function ee(t,e){let r=t.group,i=r.classList.contains("cluster-collapsed"),u=r.ownerSVGElement;if(u)if(e&&!i){r.classList.add("cluster-collapsed");let c=[];if(u.querySelectorAll(`g.node[data-instance="${dn(t.prefix)}"]`).forEach(o=>{o.classList.add("petri-collapsed-inside"),c.push(o)}),u.querySelectorAll("g.edge").forEach(o=>{let v=G(o,"title");if(!v)return;let p=(v.textContent??"").trim(),f=p.indexOf("->");if(f<0)return;let d=p.slice(0,f),y=p.slice(f+2);pe(d,t.prefix)&&pe(y,t.prefix)&&(o.classList.add("petri-collapsed-inside"),c.push(o))}),r._petriHiddenSiblings=c,!r._petriCollapsedBadge){let o=G(r,"text");if(o){let v=document.createElementNS("http://www.w3.org/2000/svg","text");v.setAttribute("x",o.getAttribute("x")??"0");let p=parseFloat(o.getAttribute("y")??"0");v.setAttribute("y",String(p+16)),v.setAttribute("text-anchor",o.getAttribute("text-anchor")??"middle"),v.setAttribute("font-size","11"),v.setAttribute("fill","#9ca3af"),v.setAttribute("class","cluster-collapsed-badge"),v.textContent=`(${t.nodeCount} internal node${t.nodeCount===1?"":"s"})`,r.appendChild(v),r._petriCollapsedBadge=v}}}else!e&&i&&(r.classList.remove("cluster-collapsed"),r._petriHiddenSiblings&&(r._petriHiddenSiblings.forEach(c=>c.classList.remove("petri-collapsed-inside")),r._petriHiddenSiblings=void 0),r._petriCollapsedBadge&&r._petriCollapsedBadge.parentNode===r&&(r.removeChild(r._petriCollapsedBadge),r._petriCollapsedBadge=null))}function Wt(t,e){if(e==null){t.removeAttribute("data-active-filter"),t.classList.remove("has-active-filter"),t.querySelectorAll("g.node, g.edge").forEach(r=>r.classList.remove("petri-dimmed"));return}t.setAttribute("data-active-filter",e),t.classList.add("has-active-filter"),t.querySelectorAll("g.node").forEach(r=>{let i=r.getAttribute("data-instance");!!i&&(i===e||i.indexOf(e+"_")===0||i.indexOf(e+"/")===0)?r.classList.remove("petri-dimmed"):r.classList.add("petri-dimmed")}),t.querySelectorAll("g.edge").forEach(r=>{let i=G(r,"title");if(!i)return;let u=i.textContent??"",c=u.indexOf("->");if(c<0){r.classList.remove("petri-dimmed");return}let o=u.slice(0,c),v=u.slice(c+2),p=f=>f.indexOf(e+"/")>=0||f.indexOf(e+"_")>=0||f===e;p(o)||p(v)?r.classList.remove("petri-dimmed"):r.classList.add("petri-dimmed")})}function jt(t,e,r,i){if(r.size===0||!t)return!1;for(let u of r)if(e.has(u)&&pe(i,u))return!0;return!1}function dn(t){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(t):t.replace(/[^a-zA-Z0-9_-]/g,e=>`\\${e}`)}function G(t,e){let r=e.toLowerCase();for(let i of Array.from(t.children))if(i.tagName.toLowerCase()===r)return i;return null}var ze=["--lpv-bg","--lpv-header-bg","--lpv-border","--lpv-text","--lpv-muted","--lpv-cluster-bg","--lpv-cluster-bg-collapsed","--lpv-cluster-stroke-width","--lpv-cluster-stroke-dash","--lpv-cluster-fill-tint","--lpv-dim-opacity","--lpv-active-filter-outline","--lpv-legend-bg","--lpv-chip-bg","--lpv-chip-active-bg"];async function Ut(t,e,r={}){let i=r.previousHandle??null,u=i?new Set(i.collapsedPrefixes):new Set,c=i?.activeFilter??null;i&&i.dispose();let o,v=e.querySelector(":scope > svg");if(t==null){if(!(v instanceof SVGSVGElement))throw new Error("mount: no DOT source and no pre-rendered SVG");o=v}else{let{renderDotToSvg:m}=await Promise.resolve().then(()=>($t(),Yt));o=await m(t),e.innerHTML="",e.appendChild(o)}e.classList.add("libpetri-viewer");let p=Gt(o,r.panzoom),f=ve(o);Ht(f);let d=new Set,y=null,x=!1,h=null;function L(){if(!r.chrome||h&&h.parentNode===e)return;h=document.createElement("div"),h.className="libpetri-viewer-chrome",h.style.position="absolute",h.style.inset="0",h.style.pointerEvents="none";let m=document.createElement("div");m.className="diagram-legend",m.style.pointerEvents="auto",m.innerHTML='<div class="legend-title">Clusters</div>',h.appendChild(m);let g=document.createElement("div");g.className="diagram-filter-strip",g.style.pointerEvents="auto",g.innerHTML='<span class="filter-strip-label">Show only:</span>',h.appendChild(g);let w=document.createElement("div");w.className="diagram-controls",w.style.pointerEvents="auto";let C=document.createElement("button");C.type="button",C.className="diagram-btn btn-reset",C.title="Reset view",C.textContent="Reset",C.addEventListener("click",()=>A.fit());let O=document.createElement("button");O.type="button",O.className="diagram-btn btn-fullscreen",O.title="Toggle fullscreen",O.textContent="Fullscreen",O.addEventListener("click",()=>B(e,O)),w.appendChild(C),w.appendChild(O),h.appendChild(w),getComputedStyle(e).position==="static"&&(e.style.position="relative"),e.appendChild(h),F(m),S(g)}function B(m,g){let w=m.classList.toggle("diagram-fullscreen");g.textContent=w?"Exit fullscreen":"Fullscreen",requestAnimationFrame(()=>A.fit())}function F(m){m.innerHTML='<div class="legend-title">Clusters</div>';for(let g of f.values()){let w=document.createElement("div");w.className="legend-row",w.innerHTML='<span class="legend-ribbon" style="background:'+g.color+'"></span><span class="legend-label"></span><span class="legend-count"></span>',w.querySelector(".legend-label").textContent=g.prefix,w.querySelector(".legend-count").textContent=String(g.nodeCount),w.addEventListener("click",()=>{d.has(g.prefix)?A.expand(g.prefix):A.collapse(g.prefix)}),m.appendChild(w)}}function S(m){m.innerHTML='<span class="filter-strip-label">Show only:</span>';let g=document.createElement("button");g.type="button",g.className="filter-chip filter-chip-all filter-chip-active",g.textContent="all",g.addEventListener("click",()=>{A.filter(null)}),m.appendChild(g);for(let w of f.values()){let C=document.createElement("button");C.type="button",C.className="filter-chip",C.style.borderColor=w.color,C.dataset.prefix=w.prefix,C.innerHTML='<span class="chip-dot" style="background:'+w.color+'"></span>',C.append(document.createTextNode(w.prefix)),C.addEventListener("click",()=>{y===w.prefix?A.filter(null):A.filter(w.prefix)}),m.appendChild(C)}}function P(){if(!h)return;let m=h.querySelector(".diagram-filter-strip");m&&(m.querySelectorAll(".filter-chip").forEach(g=>{g.classList.remove("filter-chip-active")}),y===null?m.querySelector(".filter-chip-all")?.classList.add("filter-chip-active"):m.querySelector(`.filter-chip[data-prefix="${y}"]`)?.classList.add("filter-chip-active"))}let A={svg:o,panzoom:p,clusters:f,get collapsedPrefixes(){return d},get activeFilter(){return y},collapse(m){if(x)return;let g=f.get(m);g&&(d.has(m)||(ee(g,!0),d.add(m),r.onClusterCollapse?.(m,!0)))},expand(m){if(x)return;let g=f.get(m);g&&d.has(m)&&(ee(g,!1),d.delete(m),r.onClusterCollapse?.(m,!1))},collapseAll(){if(!x)for(let m of f.values())d.has(m.prefix)||(ee(m,!0),d.add(m.prefix),r.onClusterCollapse?.(m.prefix,!0))},expandAll(){if(!x)for(let m of Array.from(d)){let g=f.get(m);g&&(ee(g,!1),d.delete(m),r.onClusterCollapse?.(m,!1))}},filter(m){x||(y=m,Wt(o,m),r.onClusterFilter?.(m),P())},resetZoom(){if(!x)try{p.moveTo(0,0),p.zoomAbs(0,0,1)}catch{}},fit(){if(!x)try{p.zoomAbs(0,0,1),p.moveTo(0,0)}catch{}},isInsideCollapsedCluster(m){return jt(o,f,d,m)},dispose(){if(!x){x=!0;try{p.dispose()}catch{}h&&h.parentNode===e&&e.removeChild(h),h=null}}};for(let m of u)A.collapse(m);return c!==null&&A.filter(c),L(),requestAnimationFrame(()=>A.fit()),A}globalThis.LibpetriViewer=Be;})();
2
+ "use strict";(()=>{var Pn=Object.create;var Le=Object.defineProperty;var Bn=Object.getOwnPropertyDescriptor;var In=Object.getOwnPropertyNames;var Dn=Object.getPrototypeOf,qn=Object.prototype.hasOwnProperty;var Hn=(t,e)=>()=>(t&&(e=t(t=0)),e);var I=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),lt=(t,e)=>{for(var n in e)Le(t,n,{get:e[n],enumerable:!0})},Rn=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of In(e))!qn.call(t,a)&&a!==n&&Le(t,a,{get:()=>e[a],enumerable:!(r=Bn(e,a))||r.enumerable});return t};var Zn=(t,e,n)=>(n=t!=null?Pn(Dn(t)):{},Rn(e||!t||!t.__esModule?Le(n,"default",{value:t,enumerable:!0}):n,t));var ut=I((Dr,ce)=>{ce.exports=ct;ce.exports.addWheelListener=ct;ce.exports.removeWheelListener=Wn;function ct(t,e,n){t.addEventListener("wheel",e,n)}function Wn(t,e,n){t.removeEventListener("wheel",e,n)}});var gt=I((qr,ht)=>{var jn=4,$n=.001,Yn=1e-7,Un=10,Q=11,ue=1/(Q-1),Kn=typeof Float32Array=="function";function dt(t,e){return 1-3*e+3*t}function ft(t,e){return 3*e-6*t}function pt(t){return 3*t}function de(t,e,n){return((dt(e,n)*t+ft(e,n))*t+pt(e))*t}function mt(t,e,n){return 3*dt(e,n)*t*t+2*ft(e,n)*t+pt(e)}function Jn(t,e,n,r,a){var s,i,c=0;do i=e+(n-e)/2,s=de(i,r,a)-t,s>0?n=i:e=i;while(Math.abs(s)>Yn&&++c<Un);return i}function Qn(t,e,n,r){for(var a=0;a<jn;++a){var s=mt(e,n,r);if(s===0)return e;var i=de(e,n,r)-t;e-=i/s}return e}function Xn(t){return t}ht.exports=function(e,n,r,a){if(!(0<=e&&e<=1&&0<=r&&r<=1))throw new Error("bezier x values must be in [0, 1] range");if(e===n&&r===a)return Xn;for(var s=Kn?new Float32Array(Q):new Array(Q),i=0;i<Q;++i)s[i]=de(i*ue,e,r);function c(m){for(var l=0,f=1,v=Q-1;f!==v&&s[f]<=m;++f)l+=ue;--f;var b=(m-s[f])/(s[f+1]-s[f]),g=l+b*ue,S=mt(g,e,r);return S>=$n?Qn(m,g,e,r):S===0?g:Jn(m,l,l+ue,e,r)}return function(l){return l===0?0:l===1?1:de(c(l),n,a)}}});var St=I((Hr,fe)=>{var X=gt(),vt={ease:X(.25,.1,.25,1),easeIn:X(.42,0,1,1),easeOut:X(0,0,.58,1),easeInOut:X(.42,0,.58,1),linear:X(0,0,1,1)};fe.exports=er;fe.exports.makeAggregateRaf=yt;fe.exports.sharedScheduler=yt();function er(t,e,n){var r=Object.create(null),a=Object.create(null);n=n||{};var s=typeof n.easing=="function"?n.easing:vt[n.easing];s||(n.easing&&console.warn("Unknown easing function in amator: "+n.easing),s=vt.ease);var i=typeof n.step=="function"?n.step:bt,c=typeof n.done=="function"?n.done:bt,m=tr(n.scheduler),l=Object.keys(e);l.forEach(function(E){r[E]=t[E],a[E]=e[E]-t[E]});var f=typeof n.duration=="number"?n.duration:400,v=Math.max(1,f*.06),b,g=0;return b=m.next(x),{cancel:S};function S(){m.cancel(b),b=0}function x(){var E=s(g/v);g+=1,w(E),g<=v?(b=m.next(x),i(t)):(b=0,setTimeout(function(){c(t)},0))}function w(E){l.forEach(function(N){t[N]=a[N]*E+r[N]})}}function bt(){}function tr(t){if(!t){var e=typeof window<"u"&&window.requestAnimationFrame;return e?nr():rr()}if(typeof t.next!="function")throw new Error("Scheduler is supposed to have next(cb) function");if(typeof t.cancel!="function")throw new Error("Scheduler is supposed to have cancel(handle) function");return t}function nr(){return{next:window.requestAnimationFrame.bind(window),cancel:window.cancelAnimationFrame.bind(window)}}function rr(){return{next:function(t){return setTimeout(t,1e3/60)},cancel:function(t){return clearTimeout(t)}}}function yt(){var t=new Set,e=new Set,n=0;return{next:a,cancel:a,clearAll:r};function r(){t.clear(),e.clear(),cancelAnimationFrame(n),n=0}function a(m){e.add(m),s()}function s(){n||(n=requestAnimationFrame(i))}function i(){n=0;var m=e;e=t,t=m,t.forEach(function(l){l()}),t.clear()}function c(m){e.delete(m)}}});var wt=I((Rr,xt)=>{"use strict";function ir(t){ar(t);let e=or(t);return t.on=e.on,t.off=e.off,t.fire=e.fire,t}function or(t){let e=Object.create(null);return{on:function(n,r,a){if(typeof r!="function")throw new Error("callback is expected to be a function");let s=e[n];return s||(s=e[n]=[]),s.push({callback:r,ctx:a}),t},off:function(n,r){if(typeof n>"u")return e=Object.create(null),t;if(e[n])if(typeof r!="function")delete e[n];else{let a=e[n];for(let s=0;s<a.length;++s)a[s].callback===r&&a.splice(s,1)}return t},fire:function(n){let r=e[n];if(!r)return t;let a;arguments.length>1&&(a=Array.prototype.slice.call(arguments,1));for(let s=0;s<r.length;++s){let i=r[s];i.callback.apply(i.ctx,a)}return t}}}function ar(t){if(!t)throw new Error("Eventify cannot use falsy object as events subject");let e=["on","fire","off"];for(let n=0;n<e.length;++n)if(t.hasOwnProperty(e[n]))throw new Error("Subject cannot be eventified, since it already has property '"+e[n]+"'")}xt.exports=ir});var Et=I((Zr,Ct)=>{Ct.exports=sr;function sr(t,e,n){typeof n!="object"&&(n={});var r=typeof n.minVelocity=="number"?n.minVelocity:5,a=typeof n.amplitude=="number"?n.amplitude:.25,s=typeof n.cancelAnimationFrame=="function"?n.cancelAnimationFrame:lr(),i=typeof n.requestAnimationFrame=="function"?n.requestAnimationFrame:cr(),c,m,l=342,f,v,b,g,S,x,w,E;return{start:F,stop:A,cancel:N};function N(){s(f),s(E)}function F(){c=t(),g=w=v=S=0,m=new Date,s(f),s(E),f=i(_)}function _(){var y=Date.now(),L=y-m;m=y;var V=t(),T=V.x-c.x,B=V.y-c.y;c=V;var M=1e3/(1+L);v=.8*T*M+.2*v,S=.8*B*M+.2*S,f=i(_)}function A(){s(f),s(E);var y=t();b=y.x,x=y.y,m=Date.now(),(v<-r||v>r)&&(g=a*v,b+=g),(S<-r||S>r)&&(w=a*S,x+=w),E=i(h)}function h(){var y=Date.now()-m,L=!1,V=0,T=0;g&&(V=-g*Math.exp(-y/l),V>.5||V<-.5?L=!0:V=g=0),w&&(T=-w*Math.exp(-y/l),T>.5||T<-.5?L=!0:T=w=0),L&&(e(b+V,x+T),E=i(h))}}function lr(){return typeof cancelAnimationFrame=="function"?cancelAnimationFrame:clearTimeout}function cr(){return typeof requestAnimationFrame=="function"?requestAnimationFrame:function(t){return setTimeout(t,16)}}});var Tt=I((Wr,Lt)=>{Lt.exports=ur;function ur(t){if(t)return{capture:Vt,release:Vt};var e,n,r,a=!1;return{capture:s,release:i};function s(c){a=!0,n=window.document.onselectstart,r=window.document.ondragstart,window.document.onselectstart=At,e=c,e.ondragstart=At}function i(){a&&(a=!1,window.document.onselectstart=n,e&&(e.ondragstart=r))}}function At(t){return t.stopPropagation(),!1}function Vt(){}});var kt=I((jr,Gt)=>{Gt.exports=dr;function dr(){this.x=0,this.y=0,this.scale=1}});var _t=I(($r,Te)=>{Te.exports=fr;Te.exports.canAttach=Mt;function fr(t,e){if(!Mt(t))throw new Error("svg element is required for svg.panzoom to work");var n=t.ownerSVGElement;if(!n)throw new Error("Do not apply panzoom to the root <svg> element. Use its child instead (e.g. <g></g>). As of March 2016 only FireFox supported transform on the root element");e.disableKeyboardInteraction||n.setAttribute("tabindex",0);var r={getBBox:s,getScreenCTM:i,getOwner:a,applyTransform:m,initTransform:c};return r;function a(){return n}function s(){var l=t.getBBox();return{left:l.x,top:l.y,width:l.width,height:l.height}}function i(){var l=n.getCTM();return l||n.getScreenCTM()}function c(l){var f=t.getCTM();f===null&&(f=document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGMatrix()),l.x=f.e,l.y=f.f,l.scale=f.a,n.removeAttributeNS(null,"viewBox")}function m(l){t.setAttribute("transform","matrix("+l.scale+" 0 0 "+l.scale+" "+l.x+" "+l.y+")")}}function Mt(t){return t&&t.ownerSVGElement&&t.getCTM}});var Nt=I((Yr,Ge)=>{Ge.exports=pr;Ge.exports.canAttach=Ot;function pr(t,e){var n=Ot(t);if(!n)throw new Error("panzoom requires DOM element to be attached to the DOM tree");var r=t.parentElement;t.scrollTop=0,e.disableKeyboardInteraction||r.setAttribute("tabindex",0);var a={getBBox:i,getOwner:s,applyTransform:c};return a;function s(){return r}function i(){return{left:0,top:0,width:t.clientWidth,height:t.clientHeight}}function c(m){t.style.transformOrigin="0 0 0",t.style.transform="matrix("+m.scale+", 0, 0, "+m.scale+", "+m.x+", "+m.y+")"}}function Ot(t){return t&&t.parentElement&&t.style}});var Wt=I((Ur,Zt)=>{"use strict";var Ft=ut(),ke=St(),mr=wt(),hr=Et(),Ht=Tt(),gr=Ht(),vr=Ht(!0),br=kt(),zt=_t(),Pt=Nt(),yr=1,Sr=1.75,Bt=300,It=200;Zt.exports=Rt;function Rt(t,e){e=e||{};var n=e.controller;if(n||(zt.canAttach(t)?n=zt(t,e):Pt.canAttach(t)&&(n=Pt(t,e))),!n)throw new Error("Cannot create panzoom for the current type of dom element");var r=n.getOwner(),a={x:0,y:0},s=!1,i=new br;n.initTransform&&n.initTransform(i);var c=typeof e.filterKey=="function"?e.filterKey:Y,m=typeof e.pinchSpeed=="number"?e.pinchSpeed:1,l=e.bounds,f=typeof e.maxZoom=="number"?e.maxZoom:Number.POSITIVE_INFINITY,v=typeof e.minZoom=="number"?e.minZoom:0,b=typeof e.boundsPadding=="number"?e.boundsPadding:.05,g=typeof e.zoomDoubleClickSpeed=="number"?e.zoomDoubleClickSpeed:Sr,S=e.beforeWheel||Y,x=e.beforeMouseDown||Y,w=typeof e.zoomSpeed=="number"?e.zoomSpeed:yr,E=Dt(e.transformOrigin),N=e.enableTextSelection?vr:gr;xr(l),e.autocenter&&pn();var F,_=0,A=0,h=0,y=null,L=new Date,V,T=!1,B=!1,M,z,ye,Se,xe,P;"smoothScroll"in e&&!e.smoothScroll?P=wr():P=hr(Cn,Tn,e.smoothScroll);var we,U,te,ne=!1;He();var re={dispose:Gn,moveBy:Z,moveTo:Ce,smoothMoveTo:Ln,centerOn:Vn,zoomTo:se,zoomAbs:ie,smoothZoom:ae,smoothZoomAbs:zn,showRectangle:fn,pause:cn,resume:un,isPaused:dn,getTransform:mn,getMinZoom:hn,setMinZoom:gn,getMaxZoom:vn,setMaxZoom:bn,getTransformOrigin:yn,setTransformOrigin:Sn,getZoomSpeed:xn,setZoomSpeed:wn};mr(re);var ze=typeof e.initialX=="number"?e.initialX:i.x,Pe=typeof e.initialY=="number"?e.initialY:i.y,Be=typeof e.initialZoom=="number"?e.initialZoom:i.scale;return(ze!=i.x||Pe!=i.y||Be!=i.scale)&&ie(ze,Pe,Be),re;function cn(){Re(),ne=!0}function un(){ne&&(He(),ne=!1)}function dn(){return ne}function fn(o){var u=r.getBoundingClientRect(),d=q(u.width,u.height),p=o.right-o.left,C=o.bottom-o.top;if(!Number.isFinite(p)||!Number.isFinite(C))throw new Error("Invalid rectangle");var G=d.x/p,k=d.y/C,O=Math.min(G,k);i.x=-(o.left+p/2)*O+d.x/2,i.y=-(o.top+C/2)*O+d.y/2,i.scale=O}function q(o,u){if(n.getScreenCTM){var d=n.getScreenCTM(),p=d.a,C=d.d,G=d.e,k=d.f;a.x=o*p-G,a.y=u*C-k}else a.x=o,a.y=u;return a}function pn(){var o,u,d=0,p=0,C=De();if(C)d=C.left,p=C.top,o=C.right-C.left,u=C.bottom-C.top;else{var G=r.getBoundingClientRect();o=G.width,u=G.height}var k=n.getBBox();if(!(k.width===0||k.height===0)){var O=u/k.height,j=o/k.width,H=Math.min(j,O);i.x=-(k.left+k.width/2)*H+o/2+d,i.y=-(k.top+k.height/2)*H+u/2+p,i.scale=H}}function mn(){return i}function hn(){return v}function gn(o){v=o}function vn(){return f}function bn(o){f=o}function yn(){return E}function Sn(o){E=Dt(o)}function xn(){return w}function wn(o){if(!Number.isFinite(o))throw new Error("Zoom speed should be a number");w=o}function Cn(){return{x:i.x,y:i.y}}function Ce(o,u){i.x=o,i.y=u,Ee(),W("pan"),Ae()}function Ie(o,u){Ce(i.x+o,i.y+u)}function Ee(){var o=De();if(o){var u=!1,d=En(),p=o.left-d.right;return p>0&&(i.x+=p,u=!0),p=o.right-d.left,p<0&&(i.x+=p,u=!0),p=o.top-d.bottom,p>0&&(i.y+=p,u=!0),p=o.bottom-d.top,p<0&&(i.y+=p,u=!0),u}}function De(){if(l){if(typeof l=="boolean"){var o=r.getBoundingClientRect(),u=o.width,d=o.height;return{left:u*b,top:d*b,right:u*(1-b),bottom:d*(1-b)}}return l}}function En(){var o=n.getBBox(),u=An(o.left,o.top);return{left:u.x,top:u.y,right:o.width*i.scale+u.x,bottom:o.height*i.scale+u.y}}function An(o,u){return{x:o*i.scale+i.x,y:u*i.scale+i.y}}function Ae(){s=!0,F=window.requestAnimationFrame(kn)}function qe(o,u,d){if(Me(o)||Me(u)||Me(d))throw new Error("zoom requires valid numbers");var p=i.scale*d;if(p<v){if(i.scale===v)return;d=v/i.scale}if(p>f){if(i.scale===f)return;d=f/i.scale}var C=q(o,u);if(i.x=C.x-d*(C.x-i.x),i.y=C.y-d*(C.y-i.y),l&&b===1&&v===1)i.scale*=d,Ee();else{var G=Ee();G||(i.scale*=d)}W("zoom"),Ae()}function ie(o,u,d){var p=d/i.scale;qe(o,u,p)}function Vn(o){var u=o.ownerSVGElement;if(!u)throw new Error("ui element is required to be within the scene");var d=o.getBoundingClientRect(),p=d.left+d.width/2,C=d.top+d.height/2,G=u.getBoundingClientRect(),k=G.width/2-p,O=G.height/2-C;Z(k,O,!0)}function Ln(o,u){Z(o-i.x,u-i.y,!0)}function Z(o,u,d){if(!d)return Ie(o,u);we&&we.cancel();var p={x:0,y:0},C={x:o,y:u},G=0,k=0;we=ke(p,C,{step:function(O){Ie(O.x-G,O.y-k),G=O.x,k=O.y}})}function Tn(o,u){le(),Ce(o,u)}function Gn(){Re()}function He(){r.addEventListener("mousedown",Je,{passive:!1}),r.addEventListener("dblclick",Ke,{passive:!1}),r.addEventListener("touchstart",We,{passive:!1}),r.addEventListener("keydown",Ze,{passive:!1}),Ft.addWheelListener(r,nt,{passive:!1}),Ae()}function Re(){Ft.removeWheelListener(r,nt),r.removeEventListener("mousedown",Je),r.removeEventListener("keydown",Ze),r.removeEventListener("dblclick",Ke),r.removeEventListener("touchstart",We),F&&(window.cancelAnimationFrame(F),F=0),P.cancel(),et(),tt(),N.release(),Ve()}function kn(){s&&Mn()}function Mn(){s=!1,n.applyTransform(i),W("transform"),F=0}function Ze(o){var u=0,d=0,p=0;if(o.keyCode===38?d=1:o.keyCode===40?d=-1:o.keyCode===37?u=1:o.keyCode===39?u=-1:o.keyCode===189||o.keyCode===109?p=1:(o.keyCode===187||o.keyCode===107)&&(p=-1),!c(o,u,d,p)){if(u||d){o.preventDefault(),o.stopPropagation();var C=r.getBoundingClientRect(),G=Math.min(C.width,C.height),k=.05,O=G*k*u,j=G*k*d;Z(O,j)}if(p){var H=rt(p*100),G=E?J():_n();se(G.x,G.y,H)}}}function _n(){var o=r.getBoundingClientRect();return{x:o.width/2,y:o.height/2}}function We(o){if(On(o),K(),o.touches.length===1)return Fn(o,o.touches[0]);o.touches.length===2&&(xe=Ue(o.touches[0],o.touches[1]),te=!0,je())}function On(o){e.onTouch&&!e.onTouch(o)||(o.stopPropagation(),o.preventDefault())}function Nn(o){K(),!(e.onDoubleClick&&!e.onDoubleClick(o))&&(o.preventDefault(),o.stopPropagation())}function Fn(o){A=new Date;var u=o.touches[0],d=D(u);V=d;var p=q(d.x,d.y);M=p.x,z=p.y,ye=M,Se=z,P.cancel(),je()}function je(){T||(T=!0,document.addEventListener("touchmove",$e),document.addEventListener("touchend",oe),document.addEventListener("touchcancel",oe))}function $e(o){if(o.touches.length===1){o.stopPropagation();var u=o.touches[0],d=D(u),p=q(d.x,d.y),C=p.x-M,G=p.y-z;C!==0&&G!==0&&it(),M=p.x,z=p.y,Z(C,G)}else if(o.touches.length===2){te=!0;var k=o.touches[0],O=o.touches[1],j=Ue(k,O),H=1+(j/xe-1)*m,at=D(k),st=D(O);if(M=(at.x+st.x)/2,z=(at.y+st.y)/2,E){var d=J();M=d.x,z=d.y}se(M,z,H),xe=j,o.stopPropagation(),o.preventDefault()}}function K(){h&&(clearTimeout(h),h=0)}function Ye(o){if(e.onClick){K();var u=M-ye,d=z-Se,p=Math.sqrt(u*u+d*d);p>5||(h=setTimeout(function(){h=0,e.onClick(o)},Bt))}}function oe(o){if(K(),o.touches.length>0){var u=D(o.touches[0]),d=q(u.x,u.y);M=d.x,z=d.y}else{var p=new Date;if(p-_<Bt)if(E){var u=J();ae(u.x,u.y,g)}else ae(V.x,V.y,g);else p-A<It&&Ye(o);_=p,Ve(),tt()}}function Ue(o,u){var d=o.clientX-u.clientX,p=o.clientY-u.clientY;return Math.sqrt(d*d+p*p)}function Ke(o){Nn(o);var u=D(o);E&&(u=J()),ae(u.x,u.y,g)}function Je(o){if(K(),!x(o)){if(y=o,L=new Date,T)return o.stopPropagation(),!1;var u=o.button===1&&window.event!==null||o.button===0;if(u){P.cancel();var d=D(o),p=q(d.x,d.y);return ye=M=p.x,Se=z=p.y,document.addEventListener("mousemove",Qe),document.addEventListener("mouseup",Xe),N.capture(o.target||o.srcElement),!1}}}function Qe(o){if(!T){it();var u=D(o),d=q(u.x,u.y),p=d.x-M,C=d.y-z;M=d.x,z=d.y,Z(p,C)}}function Xe(){var o=new Date;o-L<It&&Ye(y),N.release(),Ve(),et()}function et(){document.removeEventListener("mousemove",Qe),document.removeEventListener("mouseup",Xe),B=!1}function tt(){document.removeEventListener("touchmove",$e),document.removeEventListener("touchend",oe),document.removeEventListener("touchcancel",oe),B=!1,te=!1,T=!1}function nt(o){if(!S(o)){P.cancel();var u=o.deltaY;o.deltaMode>0&&(u*=100);var d=rt(u);if(d!==1){var p=E?J():D(o);se(p.x,p.y,d),o.preventDefault()}}}function D(o){var u,d,p=r.getBoundingClientRect();return u=o.clientX-p.left,d=o.clientY-p.top,{x:u,y:d}}function ae(o,u,d){var p=i.scale,C={scale:p},G={scale:d*p};P.cancel(),le(),U=ke(C,G,{step:function(k){ie(o,u,k.scale)},done:ot})}function zn(o,u,d){var p=i.scale,C={scale:p},G={scale:d};P.cancel(),le(),U=ke(C,G,{step:function(k){ie(o,u,k.scale)},done:ot})}function J(){var o=r.getBoundingClientRect();return{x:o.width*E.x,y:o.height*E.y}}function se(o,u,d){return P.cancel(),le(),qe(o,u,d)}function le(){U&&(U.cancel(),U=null)}function rt(o){var u=Math.sign(o),d=Math.min(.25,Math.abs(w*o/128));return 1-u*d}function it(){B||(W("panstart"),B=!0,P.start())}function Ve(){B&&(te||P.stop(),W("panend"))}function ot(){W("zoomend")}function W(o){re.fire(o,re)}}function Dt(t){if(t){if(typeof t=="object")return(!$(t.x)||!$(t.y))&&qt(t),t;qt()}}function qt(t){throw console.error(t),new Error(["Cannot parse transform origin.","Some good examples:",' "center center" can be achieved with {x: 0.5, y: 0.5}',' "top center" can be achieved with {x: 0.5, y: 0}',' "bottom right" can be achieved with {x: 1, y: 1}'].join(`
3
+ `))}function Y(){}function xr(t){var e=typeof t;if(!(e==="undefined"||e==="boolean")){var n=$(t.left)&&$(t.top)&&$(t.bottom)&&$(t.right);if(!n)throw new Error("Bounds object is not valid. It can be: undefined, boolean (true|false) or an object {left, top, right, bottom}")}}function $(t){return Number.isFinite(t)}function Me(t){return Number.isNaN?Number.isNaN(t):t!==t}function wr(){return{start:Y,stop:Y,cancel:Y}}function Cr(){if(typeof document>"u")return;var t=document.getElementsByTagName("script");if(!t)return;for(var e,n=0;n<t.length;++n){var r=t[n];if(r.src&&r.src.match(/\bpanzoom(\.min)?\.js/)){e=r;break}}if(!e)return;var a=e.getAttribute("query");if(!a)return;var s=e.getAttribute("name")||"pz",i=Date.now();c();function c(){var f=document.querySelector(a);if(!f){var v=Date.now(),b=v-i;if(b<2e3){setTimeout(c,100);return}console.error("Cannot find the panzoom element",s);return}var g=m(e);console.log(g),window[s]=Rt(f,g)}function m(f){for(var v=f.attributes,b={},g=0;g<v.length;++g){var S=v[g],x=l(S);x&&(b[x.name]=x.value)}return b}function l(f){if(f.name){var v=f.name[0]==="p"&&f.name[1]==="z"&&f.name[2]==="-";if(v){var b=f.name.substr(3),g=JSON.parse(f.value);return{name:b,value:g}}}}}Cr()});var sn={};lt(sn,{getViz:()=>Br,renderDotToSvg:()=>Pr});async function Pr(t){throw new Error("libpetri viewer: static bundle has no DOT renderer. Either ship the pre-rendered SVG in the host (mount(null, container, opts)) or load the full viewer.iife.js bundle.")}function Br(){throw new Error("libpetri viewer: static bundle has no Viz instance.")}var ln=Hn(()=>{});var Fe={};lt(Fe,{DEFAULT_PANZOOM_OPTS:()=>pe,VIEWER_CSS_VARIABLES:()=>Oe,colorForPrefix:()=>ge,discoverClusters:()=>he,mount:()=>Ne});var jt=Zn(Wt(),1),pe={smoothScroll:!1,zoomDoubleClickSpeed:1,maxZoom:1e3,minZoom:.02};function $t(t,e,n){if(n)try{n.dispose()}catch{}let r={...pe,...e};return(0,jt.default)(t,r)}function he(t){let e=new Map,n=t.querySelectorAll("g.cluster");if(!n.length)return e;let r=Array.from(t.querySelectorAll("g.node"));for(let a of Array.from(n)){let s=R(a,"title");if(!s)continue;let i=s.textContent??"";if(!i.startsWith("cluster_"))continue;let c=i.slice(8);if(e.has(c))continue;let m=0;for(let l of r){if(l.getAttribute("data-instance"))continue;let f=R(l,"title");if(!f)continue;let v=(f.textContent??"").trim();me(v,c)&&(l.setAttribute("data-instance",c),m++)}e.set(c,{prefix:c,group:a,nodeCount:m,color:ge(c)})}return e}function me(t,e){return t===e||t.startsWith(`${e}/`)||t.startsWith(`p_${e}_`)||t.startsWith(`t_${e}_`)||t.startsWith(`j_${e}_`)}function ge(t){let e=2166136261;for(let r=0;r<t.length;r++)e^=t.charCodeAt(r),e=e*16777619>>>0;let n=Math.floor((e/4294967296*360+e%360*.61803)%360);return n<0&&(n+=360),`hsl(${n}, 60%, 45%)`}function Yt(t){for(let e of t.values()){let n=R(e.group,"polygon")??R(e.group,"path");n&&(n.setAttribute("stroke",e.color),n.setAttribute("stroke-width","2.2"))}}function ee(t,e){let n=t.group,r=n.classList.contains("cluster-collapsed"),a=n.ownerSVGElement;if(a)if(e&&!r){n.classList.add("cluster-collapsed");let s=[];if(a.querySelectorAll(`g.node[data-instance="${Er(t.prefix)}"]`).forEach(i=>{i.classList.add("petri-collapsed-inside"),s.push(i)}),a.querySelectorAll("g.edge").forEach(i=>{let c=R(i,"title");if(!c)return;let m=(c.textContent??"").trim(),l=m.indexOf("->");if(l<0)return;let f=m.slice(0,l),v=m.slice(l+2);me(f,t.prefix)&&me(v,t.prefix)&&(i.classList.add("petri-collapsed-inside"),s.push(i))}),n._petriHiddenSiblings=s,!n._petriCollapsedBadge){let i=R(n,"text");if(i){let c=document.createElementNS("http://www.w3.org/2000/svg","text");c.setAttribute("x",i.getAttribute("x")??"0");let m=parseFloat(i.getAttribute("y")??"0");c.setAttribute("y",String(m+16)),c.setAttribute("text-anchor",i.getAttribute("text-anchor")??"middle"),c.setAttribute("font-size","11"),c.setAttribute("fill","#9ca3af"),c.setAttribute("class","cluster-collapsed-badge"),c.textContent=`(${t.nodeCount} internal node${t.nodeCount===1?"":"s"})`,n.appendChild(c),n._petriCollapsedBadge=c}}}else!e&&r&&(n.classList.remove("cluster-collapsed"),n._petriHiddenSiblings&&(n._petriHiddenSiblings.forEach(s=>s.classList.remove("petri-collapsed-inside")),n._petriHiddenSiblings=void 0),n._petriCollapsedBadge&&n._petriCollapsedBadge.parentNode===n&&(n.removeChild(n._petriCollapsedBadge),n._petriCollapsedBadge=null))}function Ut(t,e){if(e==null){t.removeAttribute("data-active-filter"),t.classList.remove("has-active-filter"),t.querySelectorAll("g.node, g.edge").forEach(n=>n.classList.remove("petri-dimmed"));return}t.setAttribute("data-active-filter",e),t.classList.add("has-active-filter"),t.querySelectorAll("g.node").forEach(n=>{let r=n.getAttribute("data-instance");!!r&&(r===e||r.indexOf(e+"_")===0||r.indexOf(e+"/")===0)?n.classList.remove("petri-dimmed"):n.classList.add("petri-dimmed")}),t.querySelectorAll("g.edge").forEach(n=>{let r=R(n,"title");if(!r)return;let a=r.textContent??"",s=a.indexOf("->");if(s<0){n.classList.remove("petri-dimmed");return}let i=a.slice(0,s),c=a.slice(s+2),m=l=>l.indexOf(e+"/")>=0||l.indexOf(e+"_")>=0||l===e;m(i)||m(c)?n.classList.remove("petri-dimmed"):n.classList.add("petri-dimmed")})}function Kt(t,e,n,r){if(n.size===0||!t)return!1;for(let a of n)if(e.has(a)&&me(r,a))return!0;return!1}function Er(t){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(t):t.replace(/[^a-zA-Z0-9_-]/g,e=>`\\${e}`)}function R(t,e){let n=e.toLowerCase();for(let r of Array.from(t.children))if(r.tagName.toLowerCase()===n)return r;return null}function _e(t){for(let e of Array.from(t.children))if(e.tagName==="title")return e.textContent??"";return""}function Ar(t){let e=t.parentElement?.closest("g.cluster");return e?_e(e).replace(/^cluster_/,""):""}function ve(t){let e=Array.from(t.querySelectorAll("g.node"));for(let r of e){let a=_e(r);if(!a)continue;r.setAttribute("data-id",a);let s=/__rep__([A-Za-z0-9_]+)$/.exec(a);if(s)r.setAttribute("data-instance",s[1]);else if(!r.hasAttribute("data-instance")){let i=Ar(r);i&&r.setAttribute("data-instance",i)}}let n=new Map;for(let r of e){let a=r.getAttribute("data-id");a&&n.set(a,r)}for(let r of Array.from(t.querySelectorAll("g.edge"))){let a=_e(r),s=a.indexOf("->");if(s<=0)continue;let i=a.slice(0,s).trim(),c=a.slice(s+2).trim();r.setAttribute("data-src",i),r.setAttribute("data-dst",c);let m=n.get(i)?.getAttribute("data-instance")??"",l=n.get(c)?.getAttribute("data-instance")??"";r.setAttribute("data-src-cluster",m),r.setAttribute("data-dst-cluster",l),r.classList.remove("intra-cluster","cross-cluster"),m!==""&&m===l?(r.classList.add("intra-cluster"),r.setAttribute("data-cluster",m)):(r.classList.add("cross-cluster"),r.removeAttribute("data-cluster"))}}var Vr="libpetri-sidebar",Lr="libpetri-sidebar-chip",Tr="is-off";function Jt(t,e,n){let r=new Set;for(let _ of e.keys())r.add(_);let a=!0,s=!0,i=()=>{n.onVisibilityChange({visibleClusters:new Set(r),includeSharedPlaces:a})},c=document.createElement("aside");c.className=Vr;let m=document.createElement("h4");m.className="libpetri-sidebar-title",m.textContent=`Subnets (${e.size})`,c.appendChild(m);let l=document.createElement("div");l.className="libpetri-sidebar-actions";let f=document.createElement("button");f.type="button",f.textContent="show all";let v=document.createElement("button");v.type="button",v.textContent="hide all",l.appendChild(f),l.appendChild(v),c.appendChild(l);let b=document.createElement("label");b.className="libpetri-sidebar-checkbox";let g=document.createElement("input");g.type="checkbox",g.checked=a,b.appendChild(g),b.appendChild(document.createTextNode(" Shared places")),g.addEventListener("change",()=>{a=g.checked,i()}),c.appendChild(b);let S=document.createElement("label");S.className="libpetri-sidebar-checkbox";let x=document.createElement("input");x.type="checkbox",x.checked=s,S.appendChild(x),S.appendChild(document.createTextNode(" Click node \u2192 highlight")),x.addEventListener("change",()=>{s=x.checked,n.onHighlightModeChange(s)}),c.appendChild(S);let w=document.createElement("div");w.className="libpetri-sidebar-hint",w.innerHTML="Click chip: toggle.<br>Shift-click: isolate.<br>Cmd/Ctrl-click: multi-select.<br>Click empty: clear highlight.",c.appendChild(w);let E=document.createElement("ul");E.className="libpetri-sidebar-chips";let N=new Map;for(let _ of e.values()){let A=document.createElement("li");A.className=Lr,A.style.borderLeftColor=_.color,A.dataset.prefix=_.prefix;let h=document.createElement("span");h.className="libpetri-sidebar-chip-dot",h.style.background=_.color;let y=document.createElement("span");y.className="libpetri-sidebar-chip-name",y.textContent=_.prefix;let L=document.createElement("span");L.className="libpetri-sidebar-chip-count",L.textContent=String(_.nodeCount),A.appendChild(h),A.appendChild(y),A.appendChild(L),A.addEventListener("click",V=>{let T=_.prefix;if(V.shiftKey){let B=[...e.keys()].every(M=>M===T?r.has(M):!r.has(M));if(r.clear(),B)for(let M of e.keys())r.add(M);else r.add(T)}else V.ctrlKey||V.metaKey?[...e.keys()].some(M=>!r.has(M))?r.has(T)?r.delete(T):r.add(T):(r.clear(),r.add(T)):r.has(T)?r.delete(T):r.add(T);F(),i()}),E.appendChild(A),N.set(_.prefix,A)}c.appendChild(E);function F(){for(let[_,A]of N)A.classList.toggle(Tr,!r.has(_))}return f.addEventListener("click",()=>{r.clear();for(let _ of e.keys())r.add(_);a=!0,g.checked=!0,F(),i()}),v.addEventListener("click",()=>{r.clear(),a=!1,g.checked=!1,F(),i()}),t.appendChild(c),i(),{root:c,dispose(){c.parentNode===t&&t.removeChild(c)}}}var Gr=["is-highlight","is-neighbor","is-faded"];function kr(t){for(let e of Gr)for(let n of Array.from(t.querySelectorAll("."+e)))n.classList.remove(e)}function Mr(t,e){let n=t.querySelector(`g.node[data-id="${be(e)}"]`);if(!n)return new Set([e]);let r=new Set([e]),a=n.getAttribute("data-replica-of")??(e.startsWith("p_")?e.slice(2):null);if(a){let s=t.querySelector(`g.node[data-id="${be("p_"+a)}"]`);if(s){let i=s.getAttribute("data-id");i&&r.add(i)}for(let i of Array.from(t.querySelectorAll(`g.node[data-replica-of="${be(a)}"]`))){let c=i.getAttribute("data-id");c&&r.add(c)}}return r}function Qt(t,e){if(kr(t),e===null)return;let n=Mr(t,e);for(let l of n){let f=t.querySelector(`g.node[data-id="${be(l)}"]`);f&&!f.classList.contains("is-hidden")&&f.classList.add("is-highlight")}let r=new Set,a=new Set,s=[],i=Array.from(n),c=new Set(n),m=Array.from(t.querySelectorAll("g.edge"));for(;i.length>0;){let l=i.shift();for(let f of m){if(f.classList.contains("is-hidden"))continue;let v=f.getAttribute("data-src"),b=f.getAttribute("data-dst");if(v!==l&&b!==l)continue;let g=v===l?b:v;g&&(s.push(f),!c.has(g)&&(c.add(g),g.startsWith("j_")?(a.add(g),i.push(g)):r.add(g)))}}for(let l of s)l.classList.add("is-highlight");for(let l of m)l.classList.contains("is-hidden")||l.classList.contains("is-highlight")||l.classList.add("is-faded");for(let l of Array.from(t.querySelectorAll("g.node"))){if(l.classList.contains("is-hidden"))continue;let f=l.getAttribute("data-id")??"";if(!n.has(f))if(r.has(f))l.classList.add("is-neighbor");else{if(a.has(f))continue;l.classList.add("is-faded")}}for(let l of Array.from(t.querySelectorAll("g.cluster:not(.cluster-orchestrator)")))l.classList.contains("is-hidden")||l.classList.add("is-faded")}function be(t){return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}var Xt=/^(p_[A-Za-z0-9_]+)__rep__/;function en(t){return t.replace(/^p_/,"")}function nn(t){let e=new Set,n=Array.from(t.querySelectorAll("g.node"));for(let r of n){let a=r.querySelector("title")?.textContent??"",s=Xt.exec(a);s&&e.add(s[1])}for(let r of n){let a=r.querySelector("title")?.textContent??"",s=Xt.exec(a),i=null;s?i=en(s[1]):e.has(a)&&(i=en(a)),i!==null&&(r.classList.add("petri-replica"),r.setAttribute("data-replica-of",i),Or(r))}}var _r="http://www.w3.org/2000/svg",tn="libpetri-replica-glyph";function Or(t){if(t.querySelector(`text.${tn}`))return;let e=t.querySelector("ellipse, circle");if(!e)return;let n=0,r=0,a=0,s=0;e.tagName==="ellipse"?(n=parseFloat(e.getAttribute("cx")??"0"),r=parseFloat(e.getAttribute("cy")??"0"),a=parseFloat(e.getAttribute("rx")??"0"),s=parseFloat(e.getAttribute("ry")??"0")):(n=parseFloat(e.getAttribute("cx")??"0"),r=parseFloat(e.getAttribute("cy")??"0"),a=parseFloat(e.getAttribute("r")??"0"),s=a);let i=document.createElementNS(_r,"text");i.setAttribute("class",tn),i.setAttribute("x",(n+a+2).toFixed(2)),i.setAttribute("y",(r-s+2).toFixed(2)),i.setAttribute("text-anchor","start"),i.setAttribute("font-size","9"),i.textContent="\u21C4",t.appendChild(i)}function Nr(t,e){if(e.size===0)return new Set;let n=Array.from(t.querySelectorAll("g.node:not([data-instance])")),r=new Set;for(let v of n){let b=v.getAttribute("data-id");b&&r.add(b)}let a=new Map,s=new Map,i=(v,b,g)=>{let S=v.get(b);S||(S=new Set,v.set(b,S)),S.add(g)};for(let v of Array.from(t.querySelectorAll("g.edge"))){let b=v.getAttribute("data-src")??"",g=v.getAttribute("data-dst")??"";r.has(b)&&r.has(g)&&(i(a,b,g),i(s,g,b))}let c=new Set,m=new Set;for(let v of Array.from(t.querySelectorAll("g.edge.cross-cluster"))){let b=v.getAttribute("data-src")??"",g=v.getAttribute("data-dst")??"",S=v.getAttribute("data-src-cluster")??"",x=v.getAttribute("data-dst-cluster")??"";r.has(b)&&e.has(x)&&c.add(b),r.has(g)&&e.has(S)&&m.add(g)}let l=new Set,f=(v,b)=>{let g=[];for(let S of v)l.add(S),g.push(S);for(;g.length;){let S=g.shift(),x=b.get(S);if(x)for(let w of x)l.has(w)||(l.add(w),g.push(w))}};return f(c,s),f(m,a),l}function rn(t,e){ve(t);let{visibleClusters:n,includeSharedPlaces:r}=e;for(let i of Array.from(t.querySelectorAll("g.cluster:not(.cluster-orchestrator)"))){let m=(i.querySelector(":scope > title")?.textContent??"").replace(/^cluster_/,"");i.classList.toggle("is-hidden",!n.has(m))}for(let i of Array.from(t.querySelectorAll("g.node[data-instance]"))){let c=i.getAttribute("data-instance")??"";i.classList.toggle("is-hidden",!n.has(c))}let a=Nr(t,n);for(let i of Array.from(t.querySelectorAll("g.node:not([data-instance])"))){let c=i.getAttribute("data-id")??"";i.classList.toggle("is-hidden",!a.has(c))}if(!r)for(let i of Array.from(t.querySelectorAll("g.node.petri-replica")))i.classList.add("is-hidden");let s=new Map;for(let i of Array.from(t.querySelectorAll("g.node"))){let c=i.getAttribute("data-id");c&&s.set(c,i)}for(let i of Array.from(t.querySelectorAll("g.edge"))){let c=i.getAttribute("data-src")??"",m=i.getAttribute("data-dst")??"",l=s.get(c)?.classList.contains("is-hidden")??!1,f=s.get(m)?.classList.contains("is-hidden")??!1;i.classList.toggle("is-hidden",l||f)}}var Oe=["--lpv-bg","--lpv-header-bg","--lpv-border","--lpv-text","--lpv-muted","--lpv-cluster-bg","--lpv-cluster-bg-collapsed","--lpv-cluster-stroke-width","--lpv-cluster-stroke-dash","--lpv-cluster-fill-tint","--lpv-dim-opacity","--lpv-active-filter-outline","--lpv-legend-bg","--lpv-chip-bg","--lpv-chip-active-bg","--lpv-sidebar-bg","--lpv-sidebar-border","--lpv-sidebar-text","--lpv-sidebar-muted","--lpv-sidebar-chip-bg","--lpv-sidebar-chip-hover-bg","--lpv-sidebar-chip-off-opacity","--lpv-shared-glyph-color","--lpv-replica-fill","--lpv-replica-stroke","--lpv-highlight-stroke","--lpv-highlight-glow","--lpv-neighbor-stroke","--lpv-faded-node-opacity","--lpv-faded-edge-opacity","--lpv-faded-cluster-opacity"];var Fr=/^\s*subgraph\s+cluster_[A-Za-z0-9_]+\s*\{\s*$/,zr=/^\s*\}\s*$/;function an(t){let e=t.split(`
4
+ `),n=[],r=0;for(let a of e){if(Fr.test(a)){r++;continue}if(r>0){if(zr.test(a)){r--;continue}(a.includes("[")||a.includes("->"))&&n.push(on(a));continue}if(a.includes("->")&&(a.includes("ltail=")||a.includes("lhead="))){n.push(on(a));continue}n.push(a)}return n.join(`
5
+ `)}function on(t){return t.replace(/,\s*ltail="cluster_[^"]*"/g,"").replace(/,\s*lhead="cluster_[^"]*"/g,"").replace(/\[\s*ltail="cluster_[^"]*"\s*,\s*/g,"[").replace(/\[\s*lhead="cluster_[^"]*"\s*,\s*/g,"[").replace(/\[\s*ltail="cluster_[^"]*"\s*\]/g,"[]").replace(/\[\s*lhead="cluster_[^"]*"\s*\]/g,"[]")}async function Ne(t,e,n={}){let r=n.previousHandle??null,a=r?new Set(r.collapsedPrefixes):new Set,s=r?.activeFilter??null,i=n.subnets??r?.subnets??"show";r&&r.dispose();let c,m=e.querySelector(":scope > svg");if(t==null){if(!(m instanceof SVGSVGElement))throw new Error("mount: no DOT source and no pre-rendered SVG");c=m}else{let h=await Promise.resolve().then(()=>(ln(),sn)),y=(n.layout??"elk")==="elk",L=i==="hide"?an(t):t;c=y?await h.renderDotToSvgWithElkLayout(L):await h.renderDotToSvg(L),e.innerHTML="",e.appendChild(c)}e.classList.add("libpetri-viewer");let l=$t(c,n.panzoom),f=he(c);Yt(f);let v=n.layout??"elk";v==="elk"&&(nn(c),ve(c));let b=new Set,g=null,S=null,x=!1,w=null,E=null,N=!0;function F(){if(!n.chrome||w&&w.parentNode===e)return;w=document.createElement("div"),w.className="libpetri-viewer-chrome",w.style.position="absolute",w.style.inset="0",w.style.pointerEvents="none";let h=document.createElement("div");h.className="diagram-controls",h.style.pointerEvents="auto";let y=document.createElement("button");y.type="button",y.className="diagram-btn btn-reset",y.title="Reset view",y.textContent="Reset",y.addEventListener("click",()=>A.fit());let L=document.createElement("button");L.type="button",L.className="diagram-btn btn-fullscreen",L.title="Toggle fullscreen",L.textContent="Fullscreen",L.addEventListener("click",()=>_(e,L));let V=document.createElement("button");V.type="button",V.className="diagram-btn btn-subnets",V.title=i==="show"?"Hide subnet groupings":"Show subnet groupings",V.textContent=i==="show"?"Flat view":"Subnets view",t==null&&(V.disabled=!0,V.title="Subnet toggle unavailable for pre-rendered SVG"),V.addEventListener("click",()=>{A.toggleSubnets()}),h.appendChild(V),h.appendChild(y),h.appendChild(L),w.appendChild(h),getComputedStyle(e).position==="static"&&(e.style.position="relative"),e.appendChild(w),v==="elk"&&i==="show"&&f.size>0&&(E=Jt(e,f,{onVisibilityChange:T=>A.setVisibility(T),onHighlightModeChange:T=>{N=T,T||A.highlight(null)}}))}function _(h,y){let L=h.classList.toggle("diagram-fullscreen");y.textContent=L?"Exit fullscreen":"Fullscreen",requestAnimationFrame(()=>A.fit())}let A={svg:c,panzoom:l,clusters:f,get collapsedPrefixes(){return b},get activeFilter(){return g},get subnets(){return i},setSubnets(h){return t==null||h===i?Promise.resolve(A):Ne(t,e,{...n,previousHandle:A,subnets:h}).then(y=>(e.dispatchEvent(new CustomEvent("libpetri-viewer:remount",{bubbles:!0,detail:{handle:y,subnets:h}})),y))},toggleSubnets(){return A.setSubnets(i==="show"?"hide":"show")},collapse(h){if(x)return;let y=f.get(h);y&&(b.has(h)||(ee(y,!0),b.add(h),n.onClusterCollapse?.(h,!0)))},expand(h){if(x)return;let y=f.get(h);y&&b.has(h)&&(ee(y,!1),b.delete(h),n.onClusterCollapse?.(h,!1))},collapseAll(){if(!x)for(let h of f.values())b.has(h.prefix)||(ee(h,!0),b.add(h.prefix),n.onClusterCollapse?.(h.prefix,!0))},expandAll(){if(!x)for(let h of Array.from(b)){let y=f.get(h);y&&(ee(y,!1),b.delete(h),n.onClusterCollapse?.(h,!1))}},filter(h){x||(g=h,Ut(c,h),n.onClusterFilter?.(h))},resetZoom(){if(!x)try{l.moveTo(0,0),l.zoomAbs(0,0,1)}catch{}},fit(){if(!x)try{l.zoomAbs(0,0,1),l.moveTo(0,0)}catch{}},isInsideCollapsedCluster(h){return Kt(c,f,b,h)},get highlightedNodeId(){return S},highlight(h){x||v==="elk"&&(S=h,Qt(c,h))},setVisibility(h){x||v==="elk"&&rn(c,h)},dispose(){if(!x){x=!0;try{l.dispose()}catch{}E?.dispose(),E=null,w&&w.parentNode===e&&e.removeChild(w),w=null}}};for(let h of a)A.collapse(h);return s!==null&&A.filter(s),v==="elk"&&c.addEventListener("click",h=>{if(!N)return;let y=h.target;if(!(y instanceof Element))return;let L=y.closest("g.node");if(!L){A.highlight(null);return}let V=L.getAttribute("data-id");V&&A.highlight(V===S?null:V)}),F(),requestAnimationFrame(()=>A.fit()),A}globalThis.LibpetriViewer=Fe;})();
@@ -136,6 +136,13 @@
136
136
  background: #e8e8e8;
137
137
  }
138
138
 
139
+ .petrinet-diagram .diagram-btn:disabled,
140
+ .libpetri-viewer .diagram-btn:disabled {
141
+ opacity: 0.5;
142
+ cursor: not-allowed;
143
+ background: white;
144
+ }
145
+
139
146
  .petrinet-diagram details {
140
147
  padding: 0 16px 16px;
141
148
  }
@@ -501,3 +508,259 @@ svg.has-active-filter {
501
508
  outline: 1px solid var(--lpv-active-filter-outline);
502
509
  outline-offset: -1px;
503
510
  }
511
+
512
+ /* ============================================================
513
+ * C0 layout — left sidebar chrome
514
+ *
515
+ * The chip sidebar replaces the legacy `.diagram-legend` (top-right)
516
+ * and `.diagram-filter-strip` (bottom). Built by
517
+ * `viewer/chrome/sidebar.ts` when `mount({ chrome: true, layout: 'elk' })`.
518
+ * Lives inside the viewer container so it travels into fullscreen.
519
+ * ============================================================ */
520
+ :root,
521
+ .petrinet-diagram,
522
+ .libpetri-viewer {
523
+ --lpv-sidebar-bg: #fafafa;
524
+ --lpv-sidebar-border: #e2e2e2;
525
+ --lpv-sidebar-text: #333333;
526
+ --lpv-sidebar-muted: #6b7280;
527
+ --lpv-sidebar-chip-bg: #ffffff;
528
+ --lpv-sidebar-chip-hover-bg: #f4f4ff;
529
+ --lpv-sidebar-chip-off-opacity: 0.45;
530
+ --lpv-shared-glyph-color: #6b46c1;
531
+ --lpv-replica-fill: #f3f4f6;
532
+ --lpv-replica-stroke: #6b46c1;
533
+ --lpv-highlight-stroke: #d97706;
534
+ --lpv-highlight-glow: rgba(217, 119, 6, 0.55);
535
+ --lpv-neighbor-stroke: #2563eb;
536
+ --lpv-faded-node-opacity: 0.14;
537
+ --lpv-faded-edge-opacity: 0.08;
538
+ --lpv-faded-cluster-opacity: 0.25;
539
+ }
540
+
541
+ .libpetri-viewer .libpetri-sidebar {
542
+ position: absolute;
543
+ top: 8px;
544
+ left: 8px;
545
+ width: 220px;
546
+ max-height: calc(100% - 16px);
547
+ overflow-y: auto;
548
+ background: var(--lpv-sidebar-bg);
549
+ border: 1px solid var(--lpv-sidebar-border);
550
+ border-radius: 6px;
551
+ padding: 10px;
552
+ font-size: 12px;
553
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
554
+ color: var(--lpv-sidebar-text);
555
+ z-index: 9;
556
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);
557
+ }
558
+
559
+ .libpetri-sidebar .libpetri-sidebar-title {
560
+ margin: 0 0 8px 0;
561
+ font-weight: 700;
562
+ font-size: 13px;
563
+ color: var(--lpv-sidebar-text);
564
+ }
565
+
566
+ .libpetri-sidebar .libpetri-sidebar-actions {
567
+ display: flex;
568
+ gap: 4px;
569
+ margin-bottom: 8px;
570
+ }
571
+
572
+ .libpetri-sidebar .libpetri-sidebar-actions button {
573
+ flex: 1 1 auto;
574
+ padding: 3px 8px;
575
+ font-size: 11px;
576
+ font-family: inherit;
577
+ border: 1px solid #ccc;
578
+ background: #fff;
579
+ border-radius: 4px;
580
+ cursor: pointer;
581
+ color: var(--lpv-sidebar-text);
582
+ }
583
+
584
+ .libpetri-sidebar .libpetri-sidebar-actions button:hover {
585
+ background: #f0f0f0;
586
+ }
587
+
588
+ .libpetri-sidebar .libpetri-sidebar-checkbox {
589
+ display: flex;
590
+ align-items: center;
591
+ gap: 6px;
592
+ margin: 6px 0;
593
+ font-size: 11.5px;
594
+ color: var(--lpv-sidebar-text);
595
+ cursor: pointer;
596
+ }
597
+
598
+ .libpetri-sidebar .libpetri-sidebar-hint {
599
+ font-size: 10.5px;
600
+ color: var(--lpv-sidebar-muted);
601
+ line-height: 1.4;
602
+ margin: 6px 0 10px 0;
603
+ border-top: 1px solid var(--lpv-sidebar-border);
604
+ padding-top: 8px;
605
+ }
606
+
607
+ .libpetri-sidebar .libpetri-sidebar-chips {
608
+ display: flex;
609
+ flex-direction: column;
610
+ gap: 4px;
611
+ margin: 0;
612
+ padding: 0;
613
+ list-style: none;
614
+ }
615
+
616
+ .libpetri-sidebar .libpetri-sidebar-chip {
617
+ display: flex;
618
+ align-items: center;
619
+ gap: 6px;
620
+ padding: 4px 8px;
621
+ border-radius: 4px;
622
+ cursor: pointer;
623
+ user-select: none;
624
+ border-left: 4px solid var(--lpv-shared-glyph-color);
625
+ background: var(--lpv-sidebar-chip-bg);
626
+ }
627
+
628
+ .libpetri-sidebar .libpetri-sidebar-chip:hover {
629
+ background: var(--lpv-sidebar-chip-hover-bg);
630
+ }
631
+
632
+ .libpetri-sidebar .libpetri-sidebar-chip.is-off {
633
+ opacity: var(--lpv-sidebar-chip-off-opacity);
634
+ border-left-color: #ccc;
635
+ }
636
+
637
+ .libpetri-sidebar .libpetri-sidebar-chip-dot {
638
+ flex: 0 0 10px;
639
+ width: 10px;
640
+ height: 10px;
641
+ border-radius: 50%;
642
+ }
643
+
644
+ .libpetri-sidebar .libpetri-sidebar-chip-name {
645
+ flex: 1 1 auto;
646
+ font-family: ui-monospace, "SF Mono", Menlo, monospace;
647
+ font-weight: 500;
648
+ }
649
+
650
+ .libpetri-sidebar .libpetri-sidebar-chip-count {
651
+ color: var(--lpv-sidebar-muted);
652
+ font-size: 10.5px;
653
+ }
654
+
655
+ /* ============================================================
656
+ * Replica visuals
657
+ *
658
+ * Replicas of shared places get a dashed light-gray ring and a small
659
+ * ⇄ glyph in the upper-right corner. The glyph is injected by
660
+ * `replica-tagging.ts` as a sibling `<text>` inside `<g class="node">`.
661
+ * ============================================================ */
662
+ g.node.petri-replica > ellipse,
663
+ g.node.petri-replica > circle {
664
+ fill: var(--lpv-replica-fill) !important;
665
+ stroke: var(--lpv-replica-stroke) !important;
666
+ stroke-width: 1.2 !important;
667
+ stroke-dasharray: 3 2 !important;
668
+ }
669
+
670
+ g.node.petri-replica > text.libpetri-replica-glyph {
671
+ fill: var(--lpv-shared-glyph-color);
672
+ font-weight: 700;
673
+ pointer-events: none;
674
+ }
675
+
676
+ /* ============================================================
677
+ * Highlight + visibility states
678
+ *
679
+ * `applyHighlight` (highlight.ts) sets `.is-highlight` on focus +
680
+ * every copy, `.is-neighbor` on real-place neighbors, `.is-faded`
681
+ * on the rest. `applyVisibility` (visibility.ts) sets `.is-hidden`
682
+ * on clusters / nodes / edges that the current selection excludes.
683
+ * Constants match v3 colors exactly.
684
+ * ============================================================ */
685
+ .libpetri-viewer svg g.node,
686
+ .libpetri-viewer svg g.edge {
687
+ transition: opacity 0.15s ease-out;
688
+ }
689
+
690
+ .libpetri-viewer svg g.cluster.is-hidden,
691
+ .libpetri-viewer svg g.edge.is-hidden,
692
+ .libpetri-viewer svg g.node.is-hidden {
693
+ display: none !important;
694
+ }
695
+
696
+ .libpetri-viewer svg g.node.is-faded {
697
+ opacity: var(--lpv-faded-node-opacity) !important;
698
+ }
699
+
700
+ .libpetri-viewer svg g.edge.is-faded {
701
+ opacity: var(--lpv-faded-edge-opacity) !important;
702
+ }
703
+
704
+ /* When a cluster is faded, fade only its own border + label, NOT its
705
+ * descendant nodes/edges — intra-cluster highlighted edges must still pop. */
706
+ .libpetri-viewer svg g.cluster.is-faded > polygon,
707
+ .libpetri-viewer svg g.cluster.is-faded > path,
708
+ .libpetri-viewer svg g.cluster.is-faded > text {
709
+ opacity: var(--lpv-faded-cluster-opacity);
710
+ }
711
+
712
+ .libpetri-viewer svg g.node.is-highlight > ellipse,
713
+ .libpetri-viewer svg g.node.is-highlight > circle,
714
+ .libpetri-viewer svg g.node.is-highlight > polygon,
715
+ .libpetri-viewer svg g.node.is-highlight > rect {
716
+ stroke: var(--lpv-highlight-stroke) !important;
717
+ stroke-width: 3 !important;
718
+ filter: drop-shadow(0 0 6px var(--lpv-highlight-glow));
719
+ }
720
+
721
+ .libpetri-viewer svg g.node.is-neighbor > ellipse,
722
+ .libpetri-viewer svg g.node.is-neighbor > circle,
723
+ .libpetri-viewer svg g.node.is-neighbor > polygon,
724
+ .libpetri-viewer svg g.node.is-neighbor > rect {
725
+ stroke: var(--lpv-neighbor-stroke) !important;
726
+ stroke-width: 2.5 !important;
727
+ }
728
+
729
+ .libpetri-viewer svg g.edge.is-highlight {
730
+ opacity: 1 !important;
731
+ }
732
+
733
+ .libpetri-viewer svg g.edge.is-highlight path {
734
+ stroke-width: 2.4 !important;
735
+ opacity: 1 !important;
736
+ filter: drop-shadow(0 0 4px rgba(217, 119, 6, 0.35));
737
+ }
738
+
739
+ /* ============================================================
740
+ * Dark theme overrides for the sidebar
741
+ *
742
+ * Triggered by `data-lpv-theme="dark"` on any ancestor (typically
743
+ * the viewer container itself). Debug-ui sets this so the sidebar
744
+ * matches the surrounding dark chrome.
745
+ * ============================================================ */
746
+ [data-lpv-theme="dark"] {
747
+ --lpv-sidebar-bg: #1f2937;
748
+ --lpv-sidebar-border: #374151;
749
+ --lpv-sidebar-text: #f3f4f6;
750
+ --lpv-sidebar-muted: #9ca3af;
751
+ --lpv-sidebar-chip-bg: #111827;
752
+ --lpv-sidebar-chip-hover-bg: #312e81;
753
+ --lpv-replica-fill: #312e81;
754
+ --lpv-replica-stroke: #a78bfa;
755
+ --lpv-shared-glyph-color: #a78bfa;
756
+ }
757
+
758
+ [data-lpv-theme="dark"] .libpetri-sidebar .libpetri-sidebar-actions button {
759
+ background: #111827;
760
+ color: var(--lpv-sidebar-text);
761
+ border-color: #374151;
762
+ }
763
+
764
+ [data-lpv-theme="dark"] .libpetri-sidebar .libpetri-sidebar-actions button:hover {
765
+ background: #374151;
766
+ }