basb-cli
Version:
Blog as Second Brain!
1 lines • 153 kB
JavaScript
class t{constructor(t,e){Array.isArray(e)?this.deltas=e:this.deltas=[0,2*-e/3,-e,2*-e/3,0,2*e/3,e,2*e/3],this.partWidth=t/this.deltas.length}getDelta(t){return this.deltas[t%this.deltas.length]}}class e{constructor(t,e){this.svg=t,this.baseFontAttrs=e,this.fontSize=this.baseFontAttrs["font-size"],this.connectLines=new Map}addConnectLine(t,{attrs:e={},pattern:n=null}={}){const s=this.connectLines.get("solid")||{attrs:{}},r=Object.assign({fill:"none"},s.attrs,e);this.connectLines.set(t,{attrs:r,renderFlat:this.renderFlatConnect.bind(this,n,r),renderRev:this.renderRevConnect.bind(this,n,r)})}reset(){}addDefs(t,e){e("mark",(()=>this.svg.el("filter").add(this.svg.el("feMorphology").attrs({in:"SourceAlpha",operator:"dilate",radius:"4"}),this.svg.el("feGaussianBlur").attrs({edgeMode:"none",stdDeviation:"3, 1.5"}),this.svg.el("feComponentTransfer").add(this.svg.el("feFuncA").attrs({intercept:-70,slope:100,type:"linear"})),this.svg.el("feComponentTransfer").add(this.svg.el("feFuncR").attrs({intercept:1,slope:0,type:"linear"}),this.svg.el("feFuncG").attrs({intercept:.875,slope:0,type:"linear"}),this.svg.el("feFuncB").attrs({intercept:0,slope:0,type:"linear"}),this.svg.el("feFuncA").attrs({slope:.8,type:"linear"})),this.svg.el("feMerge").add(this.svg.el("feMergeNode"),this.svg.el("feMergeNode").attr("in","SourceGraphic")))))}getTitleAttrs(){return Object.assign({},this.baseFontAttrs,{"font-size":2.5*this.fontSize,"text-anchor":"middle"})}getConnectLine(t){const e=this.connectLines;return e.get(t)||e.get("solid")}getBlock(t){return this.blocks[t]||this.blocks[""]}getNote(t){return this.notes[t]||this.notes[""]}getDivider(t){return this.dividers[t]||this.dividers[""]}optionsAttributes(t,e){return function(t,e){const n=Object.assign({},t[""]);return e.forEach((e=>{Object.assign(n,t[e]||{})})),n}(t,e)}renderAgentLine({className:t,options:e,width:n,x:s,y0:r,y1:i}){const a=this.optionsAttributes(this.agentLineAttrs,e);return n>0?this.svg.box(a,{height:i-r,width:n,x:s-n/2,y:r}).addClass(t):this.svg.line(a,{x1:s,x2:s,y1:r,y2:i}).addClass(t)}renderArrowHead(t,{dir:e,height:n,width:s,x:r,y:i}){const a=s*e.dx,o=s*e.dy,l=.5*n*e.dx,h=.5*-n*e.dy;return this.svg.el("none"===t.fill?"polyline":"polygon").attr("points",r+a-h+" "+(i+o-l)+" "+r+" "+i+" "+(r+a+h)+" "+(i+o+l)).attrs(t)}renderTag(t,{height:e,width:n,x:s,y:r}){const{rx:i,ry:a}=t,o=s+n,l=r+e,h="M"+o+" "+r+"L"+o+" "+(l-a)+"L"+(o-i)+" "+l+"L"+s+" "+l,d=this.svg.el("g");return"none"!==t.fill&&d.add(this.svg.el("path").attr("d",h+"L"+s+" "+r).attrs(t).attr("stroke","none")),"none"!==t.stroke&&d.add(this.svg.el("path").attr("d",h).attrs(t).attr("fill","none")),d}renderPerson({iconHeight:t,iconWidth:e},n,s,r){const i=r.x+r.width/2,a=e/2,o=t;return this.svg.el("g").add(this.svg.el("path").attr("d","M"+(i-a)+" "+(r.y+t)+"a"+a+" "+.3*o+" 0 0 1 "+2*a+" 0").attrs(n),this.svg.el("path").attr("d","M"+i+" "+r.y+"c"+.224*a+" 0 "+.4*a+" "+.1*o+" "+.4*a+" "+.275*o+"s"+.176*-a+" "+.35*o+" "+.4*-a+" "+.35*o+"s"+.4*-a+" "+.175*-o+" "+.4*-a+" "+.35*-o+"s"+.176*a+" "+.275*-o+" "+.4*a+" "+.275*-o).attrs(n),this.svg.box(s,{height:r.height-t,width:r.width,x:r.x,y:r.y+t}))}renderDB({tilt:t},e,n){return this.svg.el("g").add(this.svg.box({rx:n.width/2,ry:t},n).attrs(e),this.svg.el("path").attr("d","M"+n.x+" "+(n.y+t)+"a"+n.width/2+" "+t+" 0 0 0 "+n.width+" 0").attrs(e).attr("fill","none"))}renderRef(t,e){return{fill:this.svg.box(t,e).attrs({stroke:"none"}),mask:this.svg.box(t,e).attrs({fill:"#000000",stroke:"none"}),shape:this.svg.box(t,e).attrs({fill:"none"})}}renderFlatConnect(t,e,{x1:n,y1:s,x2:r,y2:i}){return{p1:{x:n,y:s},p2:{x:r,y:i},shape:this.svg.el("path").attr("d",this.svg.patternedLine(t).move(n,s).line(r,i).cap().asPath()).attrs(e)}}renderRevConnect(t,e,{rad:n,x1:s,x2:r,xR:i,y1:a,y2:o}){const l=(o-a)/2,h=this.svg.patternedLine(t).move(s,a).line(i,a);return n<l?h.arc(i,a+n,Math.PI/2).line(i+n,o-n).arc(i,o-n,Math.PI/2):h.arc(i,(a+o)/2,Math.PI),{p1:{x:s,y:a},p2:{x:r,y:o},shape:this.svg.el("path").attr("d",h.line(r,o).cap().asPath()).attrs(e)}}renderLineDivider({lineAttrs:t},{height:e,labelWidth:n,width:s,x:r,y:i}){let a=null;const o=i+e/2;return a=n>0?this.svg.el("g").add(this.svg.line({fill:"none"},{x1:r,x2:r+(s-n)/2,y1:o,y2:o}).attrs(t),this.svg.line({fill:"none"},{x1:r+(s+n)/2,x2:r+s,y1:o,y2:o}).attrs(t)):this.svg.line({fill:"none"},{x1:r,x2:r+s,y1:o,y2:o}).attrs(t),{shape:a}}renderDelayDivider({dotSize:t,gapSize:e},{height:n,width:s,x:r,y:i}){const a=this.svg.el("g");for(let o=0;o+e<=n;o+=t+e)a.add(this.svg.box({fill:"#000000"},{height:e,width:s,x:r,y:i+o}));return{mask:a}}renderTearDivider({fadeBegin:e,fadeSize:n,lineAttrs:s,pattern:r,zigHeight:i,zigWidth:a},{env:o,height:l,labelHeight:h,labelWidth:d,width:g,x:c,y:u}){const p=o.addDef("tear-grad",(()=>{const t=100/g;return this.svg.linearGradient({},[{offset:e*t+"%","stop-color":"#000000"},{offset:(e+n)*t+"%","stop-color":"#FFFFFF"},{offset:100-(e+n)*t+"%","stop-color":"#FFFFFF"},{offset:100-e*t+"%","stop-color":"#000000"}])})),f=this.svg.el("mask").attr("maskUnits","userSpaceOnUse").add(this.svg.box({fill:"url(#"+p+")"},{height:l+10,width:g,x:c,y:u-5})),m=o.addDef(f);d>0&&f.add(this.svg.box({fill:"#000000",rx:2,ry:2},{height:h+2,width:d,x:c+(g-d)/2,y:u+(l-h)/2-1}));const b=r||new t(a,[i,-i]);let y=null;const x=this.svg.patternedLine(b).move(c,u).line(c+g,u),k=this.svg.el("g").attr("mask","url(#"+m+")").add(this.svg.el("path").attrs({d:x.asPath(),fill:"none"}).attrs(s));if(l>0){const t=this.svg.patternedLine(b).move(c,u+l).line(c+g,u+l);k.add(this.svg.el("path").attrs({d:t.asPath(),fill:"none"}).attrs(s)),x.line(t.x,t.y,{patterned:!1}).cap(),x.points.push(...t.points.reverse()),y=this.svg.el("path").attrs({d:x.asPath(),fill:"#000000"})}return{mask:y,shape:k}}}const n="Helvetica,Arial,Liberation Sans,sans-serif",s=1.3,r={"font-family":n,"font-size":8,"line-height":s},i={"font-family":n,"font-size":8,"line-height":s,"text-anchor":"middle"};class a extends e{constructor(e){super(e,{"font-family":n,"font-size":8,"line-height":s});const a={padding:{top:3,bottom:2},tag:{padding:{top:1,left:3,right:3,bottom:0},boxRenderer:this.renderTag.bind(this,{fill:"#FFFFFF",stroke:"#000000","stroke-width":1,rx:2,ry:2}),labelAttrs:{"font-family":n,"font-weight":"bold","font-size":9,"line-height":s,"text-anchor":"left"}},label:{minHeight:4,padding:{top:1,left:5,right:3,bottom:1},labelAttrs:{"font-family":n,"font-size":8,"line-height":s,"text-anchor":"left"}}};Object.assign(this,{titleMargin:10,outerMargin:5,agentMargin:10,actionMargin:10,minActionMargin:3,agentLineActivationRadius:4,agentCap:{box:{padding:{top:5,left:10,right:10,bottom:5},arrowBottom:12.8,boxAttrs:{fill:"#FFFFFF",stroke:"#000000","stroke-width":1},labelAttrs:{"font-family":n,"font-size":12,"line-height":s,"text-anchor":"middle"}},person:{padding:{top:20,left:10,right:10,bottom:5},arrowBottom:12.8,boxRenderer:this.renderPerson.bind(this,{iconHeight:15,iconWidth:18},{fill:"#000000"},{fill:"#FFFFFF",stroke:"#000000","stroke-width":1}),labelAttrs:{"font-family":n,"font-size":12,"line-height":s,"text-anchor":"middle"}},database:{padding:{top:12,left:10,right:10,bottom:3},arrowBottom:12.8,boxRenderer:this.renderDB.bind(this,{tilt:5},{fill:"#FFFFFF",stroke:"#000000","stroke-width":1}),labelAttrs:{"font-family":n,"font-size":12,"line-height":s,"text-anchor":"middle"}},cross:{size:20,render:e.crossFactory({fill:"none",stroke:"#000000","stroke-width":1})},bar:{height:4,render:e.boxFactory({fill:"#000000",stroke:"#000000","stroke-width":1})},fade:{width:5,height:6,extend:1},none:{height:10}},connect:{loopbackRadius:6,arrow:{single:{width:5,height:10,render:this.renderArrowHead.bind(this),attrs:{fill:"#000000","stroke-width":0,"stroke-linejoin":"miter"}},double:{width:4,height:6,render:this.renderArrowHead.bind(this),attrs:{fill:"none",stroke:"#000000","stroke-width":1,"stroke-linejoin":"miter"}},fade:{short:2,size:16},cross:{short:7,radius:3,render:e.crossFactory({fill:"none",stroke:"#000000","stroke-width":1})}},label:{padding:6,margin:{top:2,bottom:1},attrs:{"font-family":n,"font-size":8,"line-height":s,"text-anchor":"middle"},loopbackAttrs:{"font-family":n,"font-size":8,"line-height":s}},source:{radius:2,render:e.circleFactory({fill:"#000000",stroke:"#000000","stroke-width":1})},mask:{padding:{top:0,left:3,right:3,bottom:1}}},agentLineAttrs:{"":{fill:"none",stroke:"#000000","stroke-width":1},red:{stroke:"#CC0000"}},blocks:{ref:{margin:{top:0,bottom:0},boxRenderer:this.renderRef.bind(this,{fill:"#FFFFFF",stroke:"#000000","stroke-width":1.5,rx:2,ry:2}),section:a},"":{margin:{top:0,bottom:0},boxRenderer:e.boxFactory({fill:"none",stroke:"#000000","stroke-width":1.5,rx:2,ry:2}),collapsedBoxRenderer:this.renderRef.bind(this,{fill:"#FFFFFF",stroke:"#000000","stroke-width":1.5,rx:2,ry:2}),section:a,sepRenderer:e.lineFactory({stroke:"#000000","stroke-width":1.5,"stroke-dasharray":"4, 2"})}},notes:{text:{margin:{top:0,left:2,right:2,bottom:0},padding:{top:2,left:2,right:2,bottom:2},overlap:{left:10,right:10},boxRenderer:e.boxFactory({fill:"#FFFFFF"}),labelAttrs:r},note:{margin:{top:0,left:5,right:5,bottom:0},padding:{top:5,left:5,right:10,bottom:5},overlap:{left:10,right:10},boxRenderer:e.noteFactory({fill:"#FFFFFF",stroke:"#000000","stroke-width":1},{fill:"none",stroke:"#000000","stroke-width":1}),labelAttrs:r},state:{margin:{top:0,left:5,right:5,bottom:0},padding:{top:7,left:7,right:7,bottom:7},overlap:{left:10,right:10},boxRenderer:e.boxFactory({fill:"#FFFFFF",stroke:"#000000","stroke-width":1,rx:10,ry:10}),labelAttrs:r}},dividers:{"":{labelAttrs:i,padding:{top:2,left:5,right:5,bottom:2},extend:0,margin:0,render:()=>({})},line:{labelAttrs:i,padding:{top:2,left:5,right:5,bottom:2},extend:10,margin:0,render:this.renderLineDivider.bind(this,{lineAttrs:{stroke:"#000000"}})},delay:{labelAttrs:i,padding:{top:2,left:5,right:5,bottom:2},extend:0,margin:0,render:this.renderDelayDivider.bind(this,{dotSize:1,gapSize:2})},tear:{labelAttrs:i,padding:{top:2,left:5,right:5,bottom:2},extend:10,margin:10,render:this.renderTearDivider.bind(this,{fadeBegin:5,fadeSize:10,zigWidth:6,zigHeight:1,lineAttrs:{stroke:"#000000"}})}}}),this.addConnectLine("solid",{attrs:{stroke:"#000000","stroke-width":1}}),this.addConnectLine("dash",{attrs:{"stroke-dasharray":"4, 2"}}),this.addConnectLine("wave",{attrs:{"stroke-linejoin":"round","stroke-linecap":"round"},pattern:new t(6,.5)})}}const o="Helvetica,Arial,Liberation Sans,sans-serif",l=1.3,h={"font-family":o,"font-size":8,"line-height":l},d={"font-family":o,"font-size":8,"line-height":l,"text-anchor":"middle"};class g extends e{constructor(e){super(e,{"font-family":o,"font-size":8,"line-height":l});const n={padding:{top:3,bottom:4},tag:{padding:{top:2,left:5,right:5,bottom:1},boxRenderer:this.renderTag.bind(this,{fill:"#FFFFFF",stroke:"#000000","stroke-width":2,rx:3,ry:3}),labelAttrs:{"font-family":o,"font-weight":"bold","font-size":9,"line-height":l,"text-anchor":"left"}},label:{minHeight:5,padding:{top:2,left:5,right:3,bottom:1},labelAttrs:{"font-family":o,"font-size":8,"line-height":l,"text-anchor":"left"}}};Object.assign(this,{titleMargin:12,outerMargin:5,agentMargin:8,actionMargin:5,minActionMargin:5,agentLineActivationRadius:4,agentCap:{box:{padding:{top:1,left:3,right:3,bottom:1},arrowBottom:11.1,boxAttrs:{fill:"#FFFFFF",stroke:"#000000","stroke-width":3,rx:4,ry:4},labelAttrs:{"font-family":o,"font-weight":"bold","font-size":14,"line-height":l,"text-anchor":"middle"}},person:{padding:{top:16,left:3,right:3,bottom:1},arrowBottom:11.1,boxRenderer:this.renderPerson.bind(this,{iconHeight:15,iconWidth:18},{fill:"#000000"},{fill:"#FFFFFF",stroke:"#000000","stroke-width":3,rx:4,ry:4}),labelAttrs:{"font-family":o,"font-weight":"bold","font-size":14,"line-height":l,"text-anchor":"middle"}},database:{padding:{top:4,left:3,right:3,bottom:0},arrowBottom:11.1,boxRenderer:this.renderDB.bind(this,{tilt:2},{fill:"#FFFFFF",stroke:"#000000","stroke-width":3}),labelAttrs:{"font-family":o,"font-weight":"bold","font-size":14,"line-height":l,"text-anchor":"middle"}},cross:{size:20,render:e.crossFactory({fill:"none",stroke:"#000000","stroke-width":3,"stroke-linecap":"round"})},bar:{height:4,render:e.boxFactory({fill:"#000000",stroke:"#000000","stroke-width":3,rx:2,ry:2})},fade:{width:5,height:10,extend:1},none:{height:10}},connect:{loopbackRadius:8,arrow:{single:{width:10,height:12,render:this.renderArrowHead.bind(this),attrs:{fill:"#000000",stroke:"#000000","stroke-width":3,"stroke-linejoin":"round"}},double:{width:10,height:12,render:this.renderArrowHead.bind(this),attrs:{fill:"none",stroke:"#000000","stroke-width":3,"stroke-linejoin":"round","stroke-linecap":"round"}},fade:{short:3,size:12},cross:{short:10,radius:5,render:e.crossFactory({fill:"none",stroke:"#000000","stroke-width":3,"stroke-linejoin":"round","stroke-linecap":"round"})}},label:{padding:7,margin:{top:2,bottom:3},attrs:{"font-family":o,"font-size":8,"line-height":l,"text-anchor":"middle"},loopbackAttrs:{"font-family":o,"font-size":8,"line-height":l}},source:{radius:5,render:e.circleFactory({fill:"#000000",stroke:"#000000","stroke-width":3})},mask:{padding:{top:1,left:5,right:5,bottom:3}}},agentLineAttrs:{"":{fill:"none",stroke:"#000000","stroke-width":3},red:{stroke:"#DD0000"}},blocks:{ref:{margin:{top:0,bottom:0},boxRenderer:this.renderRef.bind(this,{fill:"#FFFFFF",stroke:"#000000","stroke-width":4,rx:5,ry:5}),section:n},"":{margin:{top:0,bottom:0},boxRenderer:e.boxFactory({fill:"none",stroke:"#000000","stroke-width":4,rx:5,ry:5}),collapsedBoxRenderer:this.renderRef.bind(this,{fill:"#FFFFFF",stroke:"#000000","stroke-width":4,rx:5,ry:5}),section:n,sepRenderer:e.lineFactory({stroke:"#000000","stroke-width":2,"stroke-dasharray":"5, 3"})}},notes:{text:{margin:{top:0,left:2,right:2,bottom:0},padding:{top:2,left:2,right:2,bottom:2},overlap:{left:10,right:10},boxRenderer:e.boxFactory({fill:"#FFFFFF"}),labelAttrs:h},note:{margin:{top:0,left:5,right:5,bottom:0},padding:{top:3,left:3,right:10,bottom:3},overlap:{left:10,right:10},boxRenderer:e.noteFactory({fill:"#FFFFFF",stroke:"#000000","stroke-width":2,"stroke-linejoin":"round"},{fill:"none",stroke:"#000000","stroke-width":1}),labelAttrs:h},state:{margin:{top:0,left:5,right:5,bottom:0},padding:{top:5,left:7,right:7,bottom:5},overlap:{left:10,right:10},boxRenderer:e.boxFactory({fill:"#FFFFFF",stroke:"#000000","stroke-width":3,rx:10,ry:10}),labelAttrs:h}},dividers:{"":{labelAttrs:d,padding:{top:2,left:5,right:5,bottom:2},extend:0,margin:0,render:()=>({})},line:{labelAttrs:d,padding:{top:2,left:5,right:5,bottom:2},extend:10,margin:0,render:this.renderLineDivider.bind(this,{lineAttrs:{stroke:"#000000","stroke-width":2,"stroke-linecap":"round"}})},delay:{labelAttrs:d,padding:{top:2,left:5,right:5,bottom:2},extend:0,margin:0,render:this.renderDelayDivider.bind(this,{dotSize:3,gapSize:3})},tear:{labelAttrs:d,padding:{top:2,left:5,right:5,bottom:2},extend:10,margin:10,render:this.renderTearDivider.bind(this,{fadeBegin:5,fadeSize:10,zigWidth:6,zigHeight:1,lineAttrs:{stroke:"#000000","stroke-width":2,"stroke-linejoin":"round"}})}}}),this.addConnectLine("solid",{attrs:{stroke:"#000000","stroke-width":3}}),this.addConnectLine("dash",{attrs:{"stroke-dasharray":"10, 4"}}),this.addConnectLine("wave",{attrs:{"stroke-linejoin":"round","stroke-linecap":"round"},pattern:new t(10,1)})}getTitleAttrs(){return Object.assign(super.getTitleAttrs(),{"font-weight":"bolder"})}}class c{constructor(){this.listeners=new Map,this.forwards=new Set}addEventListener(t,e){const n=this.listeners.get(t);n?n.push(e):this.listeners.set(t,[e])}removeEventListener(t,e){const n=this.listeners.get(t);if(!n)return;const s=n.indexOf(e);-1!==s&&n.splice(s,1)}on(t,e){return this.addEventListener(t,e),this}off(t,e){return this.removeEventListener(t,e),this}countEventListeners(t){return(this.listeners.get(t)||[]).length}removeAllEventListeners(t){t?this.listeners.delete(t):this.listeners.clear()}addEventForwarding(t){this.forwards.add(t)}removeEventForwarding(t){this.forwards.delete(t)}removeAllEventForwardings(){this.forwards.clear()}trigger(t,e=[]){(this.listeners.get(t)||[]).forEach((t=>t(...e))),this.forwards.forEach((n=>n.trigger(t,e)))}}const u="undefined"==typeof window,p=!u&&/^((?!chrome|android).)*safari/i.test(window.navigator.userAgent),f=!u&&void 0!==window.InstallTrigger,m=/<svg ?/;class b{constructor(){this.latestSVG=null,this.latestInternalSVG=null,this.canvas=null,this.context=null,this.indexPNG=0,this.latestPNGIndex=0,this.latestPNG=null}getSVGContent(t){let e=t.dom().outerHTML;return e=e.replace(m,'<svg width="'+(t.width||1)+'" height="'+(t.height||1)+'" '),'<?xml version="1.0" encoding="UTF-8" ?>'+e}getSVGBlob(t){return new Blob([this.getSVGContent(t)],{type:"image/svg+xml"})}getSVGURL(t){const e=this.getSVGBlob(t);return this.latestSVG&&URL.revokeObjectURL(this.latestSVG),this.latestSVG=URL.createObjectURL(e),this.latestSVG}getCanvas(t,e,n){this.canvas||(window.devicePixelRatio=1,this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"));const s=(t.width||1)*e,r=(t.height||1)*e,i=new Image(s,r);let a=null;p&&(a=document.createElement("div"),a.style.position="absolute",a.style.visibility="hidden",a.appendChild(i),document.body.appendChild(a));const o=()=>{this.canvas.width=s,this.canvas.height=r,this.context.drawImage(i,0,0,s,r),a&&document.body.removeChild(a),n(this.canvas)};i.addEventListener("load",(()=>{a?setTimeout(o,50):o()}),{once:!0}),i.src=this.getSVGURL(t)}getPNGBlob(t,e,n){this.getCanvas(t,e,(t=>{t.toBlob(n,"image/png")}))}getPNGURL(t,e,n){++this.indexPNG;const s=this.indexPNG;this.getPNGBlob(t,e,(t=>{const e=URL.createObjectURL(t);s>=this.latestPNGIndex?(this.latestPNG&&URL.revokeObjectURL(this.latestPNG),this.latestPNG=e,this.latestPNGIndex=s,n(e,!0)):(n(e,!1),URL.revokeObjectURL(e))}))}}function y(t,e,n=null){if(null===n)return t.indexOf(e);for(let s=0;s<t.length;++s)if(n(t[s],e))return s;return-1}function x(t,e=null,n=null){if(e)for(let s=0;s<e.length;++s)-1===y(t,e[s],n)&&t.push(e[s])}function k(t,e,n=null){for(let s=0;s<e.length;++s)if(-1!==y(t,e[s],n))return!0;return!1}function w(t,e=null,n=null){if(e)for(let s=0;s<e.length;++s){const r=y(t,e[s],n);-1!==r&&t.splice(r,1)}}function v(t,e,n=null){const s=y(t,e,n);-1!==s&&t.splice(s,1)}function A(t){return t[t.length-1]}function F(t,e,n,s){if(e>=t.length)return void s.push(n.slice());const r=t[e];if(!Array.isArray(r))return n.push(r),F(t,e+1,n,s),void n.pop();for(let i=0;i<r.length;++i)n.push(r[i]),F(t,e+1,n,s),n.pop()}function M(t){const e=[];return F(t,0,[],e),e}function S(t,e){const n=[];return t.forEach((t=>{n.push(...e(t))})),n}class R{constructor({blocked:t=!1,covered:e=!1,group:n=null,activation:s=0,locked:r=!1,visible:i=!1}={}){this.blocked=t,this.covered=e,this.group=n,this.activation=s,this.locked=r,this.visible=i}}R.LOCKED=new R({locked:!0}),R.DEFAULT=new R;const C=(t,e=!0)=>n=>n.flags.includes(t)===e,I={addNearby:(t,e,n,s)=>{const r=y(t,e,I.equals);-1===r?t.push(n):t.splice(r+s,0,n)},equals:(t,e)=>t.id===e.id,hasIntersection:(t,e)=>k(t,e,I.equals),indexOf:(t,e)=>y(t,e,I.equals),make:(t,{anchorRight:e=!1,isVirtualSource:n=!1}={})=>({anchorRight:e,id:t,isVirtualSource:n,options:[]})};const E={"note left":[I.make("[")],"note over":[I.make("["),I.make("]")],"note right":[I.make("]")]},G=["[","]"],D={"agent activation":{check:["delta"],checkDistinct:["agentIDs"],merge:["agentIDs"],siblings:new Set(["agent begin","agent end"])},"agent begin":{check:["mode"],checkDistinct:[],merge:["agentIDs"],siblings:new Set(["agent activation"])},"agent end":{check:["mode"],checkDistinct:[],merge:["agentIDs"],siblings:new Set(["agent activation"])}};function L(t,e){const n=D[t.type];return!(!n||t.type!==e.type)&&(!n.check.some((n=>t[n]!==e[n]))&&!n.checkDistinct.some((n=>k(t[n],e[n]))))}function N(t,e){D[t.type].merge.forEach((n=>{x(t[n],e[n])}))}function z(t,e){for(let n=0;n<t.length;){e(t[n],n)?t.splice(n,1):++n}}function O(t){z(t,((e,n)=>{for(let s=0;s<n;++s)if(L(t[s],e))return N(t[s],e),!0;return!1}))}function T(t){const e=new Set,n=t.map((({type:t})=>t));return n.forEach((t=>{const s=D[t];s&&n.every((e=>t===e||s.siblings.has(e)))&&e.add(t)})),e}function B(t,e,n,s){z(s,(s=>{if(!t.has(s.type)||!e.has(s.type))return!1;for(let t=0;t<n.length;++t)if(L(n[t],s))return N(n[t],s),!0;return!1}))}function V(t,e){for(const n of e)n&&("parallel"===n.type?V(t,n.stages):t.push(n))}const P=["agent begin","agent end","agent activation","block begin","block end","connect","connect-delay-begin","connect-delay-end","note over","note right","note left","note between"];function j(t,e){if(!t)return"Nothing to run statement in parallel with";const n=[];return V(n,[t]),V(n,[e]),n.some((t=>!P.includes(t.type)))?"Cannot use parallel here":function(t){const e=S(t.filter((t=>"agent begin"===t.type)),(t=>t.agentIDs));for(const n of t)if("agent end"===n.type)for(const t of n.agentIDs)if(-1!==e.indexOf(t))return"Cannot create and destroy "+t+" simultaneously";return null}(n)||function(t){const e=t.filter((t=>"block begin"===t.type||"block end"===t.type)).length;if(!e)return null;if(e!==t.length)return"Cannot use parallel here";const n=t.filter((t=>"block begin"===t.type)).map((t=>t.left));for(const e of t)if("block end"===e.type&&-1!==n.indexOf(e.left))return"Cannot create and destroy reference simultaneously";return null}(n)||function(t){const e=t.filter((t=>"connect-delay-begin"===t.type)).map((t=>t.tag));for(const n of t)if("connect-delay-end"===n.type&&-1!==e.indexOf(n.tag))return"Cannot start and finish delayed connection simultaneously";return null}(n)||function(t){const e=new Set;for(const n of t)if("agent activation"===n.type)for(const t of n.agentIDs){if(e.has(t))return"Conflicting agent activation";e.add(t)}return null}(n)}function H(t,e){if("agent begin"===t.type)return t.mode=e,!0;if("parallel"===t.type){let n=!1;return t.stages.forEach((t=>{"agent begin"===t.type&&(t.mode=e,n=!0)})),n}return!1}function q(t,e,n,s=null){v(t,e,I.equals),v(t,n,I.equals);let r=0,i=t.length;if(s){const e=s.map((e=>I.indexOf(t,e))).filter((t=>-1!==t));r=e.reduce(((t,e)=>Math.min(t,e)),t.length),i=e.reduce(((t,e)=>Math.max(t,e)),r)+1}return t.splice(r,0,e),t.splice(i+1,0,n),{indexL:r,indexR:i+1}}class Y{constructor(){this.agentStates=new Map,this.agentAliases=new Map,this.activeGroups=new Map,this.gAgents=[],this.labelPattern=null,this.nextID=0,this.nesting=[],this.markers=new Set,this.currentSection=null,this.currentNest=null,this.stageHandlers={"agent activation":this.handleAgentActivation.bind(this),"agent begin":this.handleAgentBegin.bind(this),"agent define":this.handleAgentDefine.bind(this),"agent end":this.handleAgentEnd.bind(this),"agent options":this.handleAgentOptions.bind(this),"agent relabel":this.handleAgentRelabel.bind(this),async:this.handleAsync.bind(this),"block begin":this.handleBlockBegin.bind(this),"block end":this.handleBlockEnd.bind(this),"block split":this.handleBlockSplit.bind(this),connect:this.handleConnect.bind(this),"connect-delay-begin":this.handleConnectDelayBegin.bind(this),"connect-delay-end":this.handleConnectDelayEnd.bind(this),divider:this.handleDivider.bind(this),"group begin":this.handleGroupBegin.bind(this),"label pattern":this.handleLabelPattern.bind(this),mark:this.handleMark.bind(this),"note between":this.handleNote.bind(this),"note left":this.handleNote.bind(this),"note over":this.handleNote.bind(this),"note right":this.handleNote.bind(this)},this.expandGroupedGAgent=this.expandGroupedGAgent.bind(this),this.handleStage=this.handleStage.bind(this),this.toGAgent=this.toGAgent.bind(this),this.endGroup=this.endGroup.bind(this)}_aliasInUse(t){const e=this.agentAliases.get(t);return!(!e||e===t)||this.gAgents.some((e=>e.id===t))}toGAgent({name:t,alias:e,flags:n}){if(e){if(this.agentAliases.has(t))throw new Error("Cannot alias "+t+"; it is already an alias");if(this._aliasInUse(e))throw new Error("Cannot use "+e+" as an alias; it is already in use");this.agentAliases.set(e,t)}return I.make(this.agentAliases.get(t)||t,{isVirtualSource:n.includes("source")})}addStage(t,{isVisible:e=!0,parallel:n=!1}={}){if(!t)return;e&&(this.currentNest.hasContent=!0),void 0===t.ln&&(t.ln=this.latestLine);const{stages:s}=this.currentSection;if(n){const e=A(s),n=j(e,t);if(n)throw new Error(n);const r=this.makeParallel([e,t]);r.ln=t.ln,--s.length,s.push(r)}else s.push(t)}addImpStage(t,{parallel:e=!1}={}){if(!t)return;void 0===t.ln&&(t.ln=this.latestLine);const{stages:n}=this.currentSection;if(e){const e=n[n.length-2];if(0===n.length)throw new Error("Nothing to run statement in parallel with");if(j(e,t))n.splice(n.length-1,0,t);else{const s=this.makeParallel([e,t]);s.ln=t.ln,n.splice(n.length-2,1,s)}}else n.push(t)}makeParallel(t){const e=[];return V(e,t),0===e.length?null:1===e.length?e[0]:(e.forEach((t=>{void 0===t.ln&&(t.ln=this.latestLine)})),{stages:e,type:"parallel"})}defineGAgents(t){x(this.currentNest.gAgents,t.filter((t=>!G.includes(t.id))),I.equals),x(this.gAgents,t,I.equals)}getGAgentState(t){return this.agentStates.get(t.id)||R.DEFAULT}updateGAgentState(t,e){const n=this.agentStates.get(t.id);n?Object.assign(n,e):this.agentStates.set(t.id,new R(e))}replaceGAgentState(t,e){this.agentStates.set(t.id,e)}validateGAgents(t,{allowGrouped:e=!1,allowCovered:n=!1,allowVirtual:s=!1}={}){t.forEach((t=>{const r=this.getGAgentState(t),i=t.id;if(function(t){return t.blocked&&null===t.group}(r))throw new Error("Duplicate agent name: "+i);if(!n&&r.covered)throw new Error("Agent "+i+" is hidden behind group");if(!e&&null!==r.group)throw new Error("Agent "+i+" is in a group");if(!s&&t.isVirtualSource)throw new Error("Cannot use message source here");if(function(t){return t.startsWith("__")}(i))throw new Error(i+" is a reserved name")}))}setGAgentVis(t,e,n,s=!1){const r=new Set,i="begin"!==e,a=t.filter((t=>{if(r.has(t.id))return!1;r.add(t.id);const e=this.getGAgentState(t);if(e.locked||e.blocked){if(s)throw new Error("Cannot begin/end agent: "+t.id);return!1}return e.visible===i}));return 0===a.length?null:("relabel"!==e&&(a.forEach((t=>{this.updateGAgentState(t,{visible:"begin"===e})})),this.defineGAgents(a)),{agentIDs:a.map((t=>t.id)),mode:n,type:"agent "+e})}setGAgentActivation(t,e,n=!1){const s=t.filter((t=>{const s=this.getGAgentState(t);if(s.locked||s.blocked){if(n)throw new Error("Cannot activate agent: "+t.id);return!1}return!(e<0&&0===s.activation)&&s.visible}));return 0===s.length?null:(s.forEach((t=>{const n=this.getGAgentState(t);this.updateGAgentState(t,{activation:Math.max(0,n.activation+e)})})),{agentIDs:s.map((t=>t.id)),delta:e,type:"agent activation"})}_makeSection(t,e){return{delayedConnections:new Map,header:t,stages:e}}_checkSectionEnd(){const t=this.currentSection.delayedConnections;if(t.size>0){const e=t.values().next().value;throw new Error('Unused delayed connection "'+e.tag+'" at line '+(e.ln+1))}}beginNested(t,{tag:e,label:n,name:s,ln:r}){const i=I.make(s+"[",{anchorRight:!0}),a=I.make(s+"]"),o=[i,a],l=[];return this.currentSection=this._makeSection({blockType:t,canHide:!0,label:this.textFormatter(n),left:i.id,ln:r,right:a.id,tag:this.textFormatter(e),type:"block begin"},l),this.currentNest={blockType:t,gAgents:o,hasContent:!1,leftGAgent:i,rightGAgent:a,sections:[this.currentSection]},this.replaceGAgentState(i,R.LOCKED),this.replaceGAgentState(a,R.LOCKED),this.nesting.push(this.currentNest),{stages:l}}nextBlockName(){const t="__BLOCK"+this.nextID;return++this.nextID,t}nextVirtualAgentName(){const t="__"+this.nextID;return++this.nextID,t}handleBlockBegin({ln:t,blockType:e,tag:n,label:s,parallel:r}){if(r)throw new Error("Cannot use parallel here");this.beginNested(e,{label:s,ln:t,name:this.nextBlockName(),tag:n})}handleBlockSplit({ln:t,blockType:e,tag:n,label:s,parallel:r}){if(r)throw new Error("Cannot use parallel here");if("if"!==this.currentNest.blockType)throw new Error('Invalid block nesting ("else" inside '+this.currentNest.blockType+")");this._checkSectionEnd(),this.currentSection=this._makeSection({blockType:e,label:this.textFormatter(s),left:this.currentNest.leftGAgent.id,ln:t,right:this.currentNest.rightGAgent.id,tag:this.textFormatter(n),type:"block split"},[]),this.currentNest.sections.push(this.currentSection)}handleBlockEnd({parallel:t}){if(this.nesting.length<=1)throw new Error('Invalid block nesting (too many "end"s)');this._checkSectionEnd();const e=this.nesting.pop();if(this.currentNest=A(this.nesting),this.currentSection=A(this.currentNest.sections),!e.hasContent)throw new Error("Empty block");this.defineGAgents(e.gAgents),q(this.gAgents,e.leftGAgent,e.rightGAgent,e.gAgents),e.sections.forEach((t=>{this.currentSection.stages.push(t.header),this.currentSection.stages.push(...t.stages)})),this.addStage({left:e.leftGAgent.id,right:e.rightGAgent.id,type:"block end"},{parallel:t})}makeGroupDetails(t,e){const n=t.map(this.toGAgent);if(this.validateGAgents(n),this.agentStates.has(e))throw new Error("Duplicate agent name: "+e);const s=this.nextBlockName(),r=I.make(s+"[",{anchorRight:!0}),i=I.make(s+"]");this.replaceGAgentState(r,R.LOCKED),this.replaceGAgentState(i,R.LOCKED),this.updateGAgentState(I.make(e),{blocked:!0,group:e}),this.defineGAgents([...n,r,i]);const{indexL:a,indexR:o}=q(this.gAgents,r,i,n),l=[],h=n.slice();for(let t=a+1;t<o;++t)l.push(this.gAgents[t]);return w(l,h,I.equals),{gAgents:n,gAgentsContained:h,gAgentsCovered:l,leftGAgent:r,rightGAgent:i}}handleGroupBegin({agents:t,blockType:e,tag:n,label:s,alias:r,parallel:i}){const a=this.makeGroupDetails(t,r);a.gAgentsContained.forEach((t=>{this.updateGAgentState(t,{group:r})})),a.gAgentsCovered.forEach((t=>{this.updateGAgentState(t,{covered:!0})})),this.activeGroups.set(r,a),this.addImpStage(this.setGAgentVis(a.gAgents,"begin","box"),{parallel:i}),this.addStage({blockType:e,canHide:!1,label:this.textFormatter(s),left:a.leftGAgent.id,right:a.rightGAgent.id,tag:this.textFormatter(n),type:"block begin"},{parallel:i})}endGroup({name:t}){const e=this.activeGroups.get(t);return e?(this.activeGroups.delete(t),e.gAgentsContained.forEach((t=>{this.updateGAgentState(t,{group:null})})),e.gAgentsCovered.forEach((t=>{this.updateGAgentState(t,{covered:!1})})),this.updateGAgentState(I.make(t),{group:null}),{left:e.leftGAgent.id,right:e.rightGAgent.id,type:"block end"}):null}handleMark({name:t,parallel:e}){this.markers.add(t),this.addStage({name:t,type:"mark"},{isVisible:!1,parallel:e})}handleDivider({mode:t,height:e,label:n,parallel:s}){this.addStage({formattedLabel:this.textFormatter(n),height:e,mode:t,type:"divider"},{isVisible:!1,parallel:s})}handleAsync({target:t,parallel:e}){if(""!==t&&!this.markers.has(t))throw new Error("Unknown marker: "+t);this.addStage({target:t,type:"async"},{isVisible:!1,parallel:e})}handleLabelPattern({pattern:t}){this.labelPattern=t.slice();for(let t=0;t<this.labelPattern.length;++t){const e=this.labelPattern[t];"object"==typeof e&&void 0!==e.start&&(this.labelPattern[t]=Object.assign({current:e.start},e))}}applyLabelPattern(t){let e="";const n={label:t};return this.labelPattern.forEach((t=>{"string"==typeof t?e+=t:void 0!==t.token?e+=n[t.token]:void 0!==t.current&&(e+=t.current.toFixed(t.dp),t.current+=t.inc)})),e}expandGroupedGAgent(t){const{group:e}=this.getGAgentState(t);if(!e)return[t];const n=this.activeGroups.get(e);return[n.leftGAgent,n.rightGAgent]}expandGroupedGAgentConnection(t){const e=this.expandGroupedGAgent(t[0]),n=this.expandGroupedGAgent(t[1]);let s=I.indexOf(this.gAgents,e[0]),r=I.indexOf(this.gAgents,n[0]);return-1===s&&(s=e[0].isVirtualSource?-1:this.gAgents.length),-1===r&&(r=this.gAgents.length),s===r?[A(e),A(n)]:s<r?[A(e),n[0]]:[e[0],A(n)]}filterConnectFlags(t){const e=t.filter(C("begin")).map(this.toGAgent),n=t.filter(C("end")).map(this.toGAgent);if(I.hasIntersection(e,n))throw new Error("Cannot set agent visibility multiple times");const s=t.filter(C("start")).map(this.toGAgent),r=t.filter(C("stop")).map(this.toGAgent);if(x(r,n),I.hasIntersection(s,r))throw new Error("Cannot set agent activation multiple times");return this.validateGAgents(e),this.validateGAgents(n),this.validateGAgents(s),this.validateGAgents(r),{beginGAgents:e,endGAgents:n,startGAgents:s,stopGAgents:r}}makeVirtualAgent(t){const e=I.make(this.nextVirtualAgentName(),{anchorRight:t,isVirtualSource:!0});return this.replaceGAgentState(e,R.LOCKED),e}addNearbyAgent(t,e,n){I.addNearby(this.currentNest.gAgents,t,e,n),I.addNearby(this.gAgents,t,e,n)}expandVirtualSourceAgents(t){if(t[0].isVirtualSource){if(t[1].isVirtualSource)throw new Error("Cannot connect found messages");if(G.includes(t[1].id))throw new Error("Cannot connect found messages to special agents");const e=this.makeVirtualAgent(!0);return this.addNearbyAgent(t[1],e,0),[e,t[1]]}if(t[1].isVirtualSource){if(G.includes(t[0].id))throw new Error("Cannot connect found messages to special agents");const e=this.makeVirtualAgent(!1);return this.addNearbyAgent(t[0],e,1),[t[0],e]}return t}_handlePartialConnect(t,e){const n=this.filterConnectFlags(t),s=t.map(this.toGAgent);this.validateGAgents(s,{allowGrouped:!0,allowVirtual:!0}),this.defineGAgents(S(s,this.expandGroupedGAgent).filter((t=>!t.isVirtualSource)));const r=t.filter(C("begin",!1)).map(this.toGAgent).filter((t=>!t.isVirtualSource));return this.addImpStage(this.setGAgentVis(r,"begin","box"),{parallel:e}),{flags:n,gAgents:s}}_makeConnectParallelStages(t,e){return this.makeParallel([this.setGAgentVis(t.beginGAgents,"begin","box",!0),this.setGAgentActivation(t.startGAgents,1,!0),e,this.setGAgentActivation(t.stopGAgents,-1,!0),this.setGAgentVis(t.endGAgents,"end","cross",!0)])}_isSelfConnect(t){const e=t.map(this.toGAgent),n=this.expandGroupedGAgentConnection(e);return n[0].id===n[1].id&&!n.some((t=>t.isVirtualSource))}handleConnect({agents:t,label:e,options:n,parallel:s}){if(this._isSelfConnect(t)){const r={};return this.handleConnectDelayBegin({agent:t[0],ln:0,options:n,parallel:s,tag:r}),void this.handleConnectDelayEnd({agent:t[1],label:e,options:n,tag:r})}let{flags:r,gAgents:i}=this._handlePartialConnect(t,s);i=this.expandGroupedGAgentConnection(i),i=this.expandVirtualSourceAgents(i);const a={agentIDs:i.map((t=>t.id)),label:this.textFormatter(this.applyLabelPattern(e)),options:n,type:"connect"};this.addStage(this._makeConnectParallelStages(r,a),{parallel:s})}handleConnectDelayBegin({agent:t,tag:e,options:n,ln:s,parallel:r}){const i=this.currentSection.delayedConnections;if(i.has(e))throw new Error('Duplicate delayed connection "'+e+'"');const{flags:a,gAgents:o}=this._handlePartialConnect([t],r),l=this.nextVirtualAgentName(),h={agentIDs:null,label:null,options:n,tag:l,type:"connect-delay-begin"};i.set(e,{connectStage:h,gAgents:o,ln:s,tag:e,uniqueTag:l}),this.addStage(this._makeConnectParallelStages(a,h),{parallel:r})}handleConnectDelayEnd({agent:t,tag:e,label:n,options:s,parallel:r}){const i=this.currentSection.delayedConnections,a=i.get(e);if(!a)throw new Error('Unknown delayed connection "'+e+'"');let{flags:o,gAgents:l}=this._handlePartialConnect([t],r);l=this.expandGroupedGAgentConnection([...a.gAgents,...l]),l=this.expandVirtualSourceAgents(l);let h=a.connectStage.options;if(h.line!==s.line)throw new Error("Mismatched delayed connection arrows");s.right&&(h=Object.assign({},h,{right:s.right})),Object.assign(a.connectStage,{agentIDs:l.map((t=>t.id)),label:this.textFormatter(this.applyLabelPattern(n)),options:h});const d={tag:a.uniqueTag,type:"connect-delay-end"};this.addStage(this._makeConnectParallelStages(o,d),{parallel:r}),i.delete(e)}handleNote({type:t,agents:e,mode:n,label:s,parallel:r}){let i=null;i=0===e.length?E[t]||[]:e.map(this.toGAgent),this.validateGAgents(i,{allowGrouped:!0}),i=S(i,this.expandGroupedGAgent);const a=i.map((t=>t.id)),o=new Set(a).size;if("note between"===t&&o<2)throw new Error("note between requires at least 2 agents");this.defineGAgents(i),this.addImpStage(this.setGAgentVis(i,"begin","box"),{parallel:r}),this.addStage({agentIDs:a,label:this.textFormatter(s),mode:n,type:t},{parallel:r})}handleAgentDefine({agents:t}){const e=t.map(this.toGAgent);this.validateGAgents(e,{allowCovered:!0,allowGrouped:!0}),x(this.gAgents,e,I.equals)}handleAgentOptions({agent:t,options:e}){const n=this.toGAgent(t),s=[n];this.validateGAgents(s,{allowCovered:!0,allowGrouped:!0}),x(this.gAgents,s,I.equals),this.gAgents.filter((({id:t})=>t===n.id)).forEach((t=>{x(t.options,e)}))}handleAgentActivation({agents:t,delta:e,parallel:n}){const s=t.map(this.toGAgent);this.validateGAgents(s),this.defineGAgents(s),this.addImpStage(this.setGAgentVis(s,"begin","box"),{parallel:n}),this.addStage(this.setGAgentActivation(s,e),{parallel:n})}handleAgentBegin({agents:t,mode:e,parallel:n}){const s=t.map(this.toGAgent);this.validateGAgents(s),this.addStage(this.setGAgentVis(s,"begin",e,!0),{parallel:n})}handleAgentRelabel({agents:t,parallel:e}){let n=null;0===t.length?n=this.gAgents.filter((t=>{const e=this.getGAgentState(t);return!(e.covered||e.group||e.locked||e.blocked||t.isVirtualSource)})):(n=t.map(this.toGAgent),this.validateGAgents(n)),this.addStage(this.setGAgentVis(n,"relabel","box"),{parallel:e})}handleAgentEnd({agents:t,mode:e,parallel:n}){const s=t.filter((t=>this.activeGroups.has(t.name))),r=t.filter((t=>!this.activeGroups.has(t.name))).map(this.toGAgent);this.validateGAgents(r),this.addStage(this.makeParallel([this.setGAgentActivation(r,Number.NEGATIVE_INFINITY),this.setGAgentVis(r,"end",e,!0),...s.map(this.endGroup)]),{parallel:n})}handleStage(t){this.latestLine=t.ln;try{const e=this.stageHandlers[t.type];if(!e)throw new Error("Unknown command: "+t.type);e(t)}catch(e){if("object"==typeof e&&e.message)throw e.message+=" at line "+(t.ln+1),e}}_reset(){this.agentStates.clear(),this.markers.clear(),this.agentAliases.clear(),this.activeGroups.clear(),this.gAgents.length=0,this.nextID=0,this.nesting.length=0,this.labelPattern=[{token:"label"}]}_finalise(t){q(this.gAgents,this.currentNest.leftGAgent,this.currentNest.rightGAgent),function(t){let e=[],n=new Set;for(let s=0;s<t.length;){const r=t[s];let i=null;i="parallel"===r.type?r.stages:[r],O(i);const a=T(i);B(n,a,e,i),0===i.length?t.splice(s,1):("parallel"===r.type&&1===i.length&&t.splice(s,1,i[0]),n=a,e=i,++s)}}(t.stages),this.gAgents.forEach((t=>{t.formattedLabel=this.textFormatter(t.id)}))}generate({stages:t,meta:e={}}){this._reset(),this.textFormatter=e.textFormatter;const n=this.beginNested("global",{label:"",ln:0,name:"",tag:""});if(t.forEach(this.handleStage),1!==this.nesting.length)throw new Error("Unterminated section at line "+(this.currentSection.header.ln+1));if(this.activeGroups.size>0)throw new Error("Unterminated group");this._checkSectionEnd();const s=e.terminators||"none";return this.addStage(this.makeParallel([this.setGAgentActivation(this.gAgents,Number.NEGATIVE_INFINITY),this.setGAgentVis(this.gAgents,"end",s)])),this._finalise(n),function(t,e){for(let n=0;n<t.length&&!H(t[n],e);++n);}(n.stages,e.headers||"box"),{agents:this.gAgents.slice(),meta:{code:e.code,theme:e.theme,title:this.textFormatter(e.title)},stages:n.stages}}}const U="Courier New,Liberation Mono,monospace",W=1.3,X={"font-family":U,"font-size":8,"line-height":W},Q={"font-family":U,"font-size":8,"line-height":W,"text-anchor":"middle"};class J extends e{constructor(e){super(e,{"font-family":U,"font-size":8,"line-height":W});const n={padding:{top:3,bottom:2},tag:{padding:{top:2,left:4,right:4,bottom:2},boxRenderer:this.renderTag.bind(this,{fill:"#FFFFFF",stroke:"#000000","stroke-width":1,rx:3,ry:3}),labelAttrs:{"font-family":U,"font-weight":"bold","font-size":9,"line-height":W,"text-anchor":"left"}},label:{minHeight:8,padding:{top:2,left:8,right:8,bottom:2},labelAttrs:{"font-family":U,"font-size":8,"line-height":W,"text-anchor":"left"}}};Object.assign(this,{titleMargin:8,outerMargin:4,agentMargin:12,actionMargin:12,minActionMargin:4,agentLineActivationRadius:4,agentCap:{box:{padding:{top:4,left:8,right:8,bottom:4},arrowBottom:12,boxAttrs:{fill:"#FFFFFF",stroke:"#000000","stroke-width":1},labelAttrs:{"font-family":U,"font-size":12,"line-height":W,"text-anchor":"middle"}},person:{padding:{top:16,left:8,right:8,bottom:4},arrowBottom:12,boxRenderer:this.renderPerson.bind(this,{iconHeight:12,iconWidth:14},{fill:"#000000"},{fill:"#FFFFFF",stroke:"#000000","stroke-width":1}),labelAttrs:{"font-family":U,"font-size":12,"line-height":W,"text-anchor":"middle"}},database:{padding:{top:9,left:8,right:8,bottom:3},arrowBottom:12,boxRenderer:this.renderDB.bind(this,{tilt:4},{fill:"#FFFFFF",stroke:"#000000","stroke-width":1}),labelAttrs:{"font-family":U,"font-size":12,"line-height":W,"text-anchor":"middle"}},cross:{size:16,render:e.crossFactory({fill:"none",stroke:"#000000","stroke-width":1})},bar:{height:4,render:e.boxFactory({fill:"#000000",stroke:"#000000","stroke-width":1})},fade:{width:5,height:8,extend:1},none:{height:8}},connect:{loopbackRadius:4,arrow:{single:{width:4,height:8,render:this.renderArrowHead.bind(this),attrs:{fill:"#000000","stroke-width":0,"stroke-linejoin":"miter"}},double:{width:3,height:6,render:this.renderArrowHead.bind(this),attrs:{fill:"none",stroke:"#000000","stroke-width":1,"stroke-linejoin":"miter"}},fade:{short:2,size:10},cross:{short:8,radius:4,render:e.crossFactory({fill:"none",stroke:"#000000","stroke-width":1})}},label:{padding:4,margin:{top:2,bottom:1},attrs:{"font-family":U,"font-size":8,"line-height":W,"text-anchor":"middle"},loopbackAttrs:{"font-family":U,"font-size":8,"line-height":W}},source:{radius:2,render:e.circleFactory({fill:"#000000",stroke:"#000000","stroke-width":1})},mask:{padding:{top:0,left:3,right:3,bottom:1}}},agentLineAttrs:{"":{fill:"none",stroke:"#000000","stroke-width":1},red:{stroke:"#AA0000"}},blocks:{ref:{margin:{top:0,bottom:0},boxRenderer:this.renderRef.bind(this,{fill:"#FFFFFF",stroke:"#000000","stroke-width":2}),section:n},"":{margin:{top:0,bottom:0},boxRenderer:e.boxFactory({fill:"none",stroke:"#000000","stroke-width":2}),collapsedBoxRenderer:this.renderRef.bind(this,{fill:"#FFFFFF",stroke:"#000000","stroke-width":2}),section:n,sepRenderer:e.lineFactory({stroke:"#000000","stroke-width":2,"stroke-dasharray":"8, 4"})}},notes:{text:{margin:{top:0,left:8,right:8,bottom:0},padding:{top:4,left:4,right:4,bottom:4},overlap:{left:8,right:8},boxRenderer:e.boxFactory({fill:"#FFFFFF"}),labelAttrs:X},note:{margin:{top:0,left:8,right:8,bottom:0},padding:{top:8,left:8,right:8,bottom:8},overlap:{left:8,right:8},boxRenderer:e.noteFactory({fill:"#FFFFFF",stroke:"#000000","stroke-width":1},{fill:"none",stroke:"#000000","stroke-width":1}),labelAttrs:X},state:{margin:{top:0,left:8,right:8,bottom:0},padding:{top:8,left:8,right:8,bottom:8},overlap:{left:8,right:8},boxRenderer:e.boxFactory({fill:"#FFFFFF",stroke:"#000000","stroke-width":1,rx:8,ry:8}),labelAttrs:X}},dividers:{"":{labelAttrs:Q,padding:{top:2,left:5,right:5,bottom:2},extend:0,margin:0,render:()=>({})},line:{labelAttrs:Q,padding:{top:2,left:5,right:5,bottom:2},extend:8,margin:0,render:this.renderLineDivider.bind(this,{lineAttrs:{stroke:"#000000"}})},delay:{labelAttrs:Q,padding:{top:2,left:5,right:5,bottom:2},extend:0,margin:0,render:this.renderDelayDivider.bind(this,{dotSize:2,gapSize:2})},tear:{labelAttrs:Q,padding:{top:2,left:5,right:5,bottom:2},extend:8,margin:8,render:this.renderTearDivider.bind(this,{fadeBegin:4,fadeSize:4,zigWidth:4,zigHeight:1,lineAttrs:{stroke:"#000000"}})}}}),this.addConnectLine("solid",{attrs:{stroke:"#000000","stroke-width":1}}),this.addConnectLine("dash",{attrs:{"stroke-dasharray":"4, 4"}}),this.addConnectLine("wave",{pattern:new t(6,[0,-.25,-.5,-.25,0,.25,.5,.25])})}}const Z={type:"error line-error",suggest:[],then:{"":0}};function K(t,e=[]){return{type:"string",suggest:e,then:Object.assign({"":0},t)}}function _(t,e){return t.v===e.v&&t.prefix===e.prefix&&t.suffix===e.suffix&&t.q===e.q}const $=["person","database","red"],tt=["activate","begin","deactivate","end","note","state","text"],et=(()=>{function t(t,e=1){return{type:"variable",suggest:[{known:"Agent"}],then:Object.assign({},t,{"":0,",":{type:"operator",then:{"":e}}})}}const e={type:"",suggest:["\n"],then:{}},n={type:"",suggest:[],then:{}},s=K({"\n":e}),r={type:"operator",then:{"":s,"\n":n}},i=t({"\n":e,as:{type:"keyword",then:{"":{type:"variable",suggest:[{known:"Agent"}],then:{"":0,",":{type:"operator",then:{"":3}},"\n":e}}}}}),a=t({":":r}),o={type:"variable",suggest:[{known:"Agent"}],then:{"":0,":":{type:"operator",then:{"":s,"\n":n}},"\n":e}},l={":":{type:"operator",then:{"":K({as:{type:"keyword",then:{"":{type:"variable",suggest:[{known:"Agent"}],then:{"":0,"\n":e}}}}})}}},h={type:"keyword",then:Object.assign({over:{type:"keyword",then:{"":t(l)}}},l)},d={"\n":e,":":{type:"operator",then:{"":s,"\n":n}},with:{type:"keyword",suggest:["with height "],then:{height:{type:"keyword",then:{"":{type:"number",suggest:["6 ","30 "],then:{"\n":e,":":{type:"operator",then:{"":s,"\n":n}}}}}}}}};const g=function(t,e,n){const s=Object.assign({},n);return e.forEach((e=>{s[e]={type:t,then:n}})),s}("keyword",["a","an"],function(t,e,n){const s={},r=Object.assign({},n);return e.forEach((e=>{s[e]={type:t,then:r},r[e]=0})),s}("keyword",$,{"\n":e}));function c(t){return{type:"keyword",suggest:[t+" of ",t+": "],then:{of:{type:"keyword",then:{"":a}},":":{type:"operator",then:{"":s}},"":a}}}function u({exit:t,sourceExit:e,blankExit:n}){const s={type:"operator",then:{"+":Z,"-":Z,"*":Z,"!":Z,"":t}};return{"+":{type:"operator",then:{"+":Z,"-":Z,"*":s,"!":Z,"":t}},"-":{type:"operator",then:{"+":Z,"-":Z,"*":s,"!":{type:"operator",then:{"+":Z,"-":Z,"*":Z,"!":Z,"":t}},"":t}},"*":{type:"operator",then:Object.assign({"+":s,"-":s,"*":Z,"!":Z,"":t},e||t)},"!":s,"":n||t}}const p={type:"keyword",then:{"":s,":":{type:"operator",then:{"":s}},"\n":e}},f={title:{type:"keyword",then:{"":s}},theme:{type:"keyword",then:{"":{type:"string",suggest:[{global:"themes",suffix:"\n"}],then:{"":0,"\n":e}}}},headers:{type:"keyword",then:{none:{type:"keyword",then:{}},cross:{type:"keyword",then:{}},box:{type:"keyword",then:{}},fade:{type:"keyword",then:{}},bar:{type:"keyword",then:{}}}},terminators:{type:"keyword",then:{none:{type:"keyword",then:{}},cross:{type:"keyword",then:{}},box:{type:"keyword",then:{}},fade:{type:"keyword",then:{}},bar:{type:"keyword",then:{}}}},divider:{type:"keyword",then:Object.assign({line:{type:"keyword",then:d},space:{type:"keyword",then:d},delay:{type:"keyword",then:d},tear:{type:"keyword",then:d}},d)},define:{type:"keyword",then:{"":i,as:Z}},begin:{type:"keyword",then:{"":i,reference:h,as:Z}},relabel:{type:"keyword",then:{"":t({"\n":e}),as:Z,"\n":e}},end:{type:"keyword",then:{"":t({"\n":e}),as:Z,"\n":e}},activate:{type:"keyword",then:{"":t({"\n":e})}},deactivate:{type:"keyword",then:{"":t({"\n":e})}},if:p,else:{type:"keyword",suggest:["else\n","else if: "],then:{if:{type:"keyword",suggest:["if: "],then:{"":s,":":{type:"operator",then:{"":s}}}},"\n":e}},repeat:p,group:p,note:{type:"keyword",then:{over:{type:"keyword",then:{"":a}},left:c("left"),right:c("right"),between:{type:"keyword",then:{"":t({":":Z},a)}}}},state:{type:"keyword",suggest:["state over "],then:{over:{type:"keyword",then:{"":{type:"variable",suggest:[{known:"Agent"}],then:{"":0,",":Z,":":r}}}}}},text:{type:"keyword",then:{left:c("left"),right:c("right")}},autolabel:{type:"keyword",then:{off:{type:"keyword",then:{}},"":K({"\n":e},[{v:"<label>",suffix:"\n",q:!0},{v:"[<inc>] <label>",suffix:"\n",q:!0},{v:"[<inc 1,0.01>] <label>",suffix:"\n",q:!0}])}},simultaneously:{type:"keyword",then:{":":{type:"operator",then:{}},with:{type:"keyword",then:{"":{type:"variable",suggest:[{known:"Label"}],then:{"":0,":":{type:"operator",then:{}}}}}}}}};return t=>{const s=function(t){const s={type:"keyword",then:Object.assign({},u({exit:o,sourceExit:{":":r,"\n":n}}),{"...":{type:"operator",then:{"":{type:"variable",suggest:[{known:"DelayedAgent"}],then:{"":0,":":Z,"\n":e}},":":Z,"\n":e}}})},i={};t.forEach((t=>i[t]=s));const a={type:"operator",suggest:[],override:"Label",then:{}},l={type:"variable",suggest:[{known:"Agent"}],then:Object.assign({"":0},i,{":":{type:"operator",override:"Label",then:{}}})},h={type:"variable",suggest:[{known:"DelayedAgent"}],then:Object.assign({"":0,":":a},i)},d=Object.assign({},l,{then:Object.assign({},l.then,{is:{type:"keyword",then:g}})});return Object.assign({"...":{type:"operator",then:Object.assign({"":h,":":Z},i)}},u({exit:l,sourceExit:Object.assign({"":l,":":a},i),blankExit:d}))}(t),i={};for(const t of tt)i[t]=f[t];return Object.assign(i,s),{type:"error line-error",then:Object.assign({},f,{"&":{type:"keyword",then:i}},s)}}})();function nt(t,e){return Object.keys(e.then).length>0?{q:!1,suffix:" ",v:t}:{q:!1,suffix:"\n",v:t}}function st(t,e){const n=[],s=A(e);return Object.keys(s.then).forEach((r=>{let i=s.then[r];"number"==typeof i&&(i=e[e.length-i-1]),x(n,function(t,e,n){return S(n.suggest||[""],(s=>{if("object"==typeof s)return s.known?t["known"+s.known]||[]:[s];if(""===s)return[nt(e,n)];if("string"==typeof s)return[{q:""===e,v:s}];throw new Error("Invalid suggestion type "+s)}))}(t,r,i),_)})),n}function rt(t,e,n,s){const r=function(t){for(const e of t)if("object"==typeof e&&e.known)return e.known;return null}(s.suggest||[""]);e.type&&r!==e.type&&(!function(t,e,n){x(t["known"+e],[{q:!0,suffix:" ",v:n}],_)}(t,s.override||e.type,e.value),e.value=""),r&&(e.value=function(t,e){return t+(t?e.s:"")+e.v}(e.value,n)),e.type=r}function it(t,e,n){const s={type:"",value:""};let r=n;const i=[r];return t.line.forEach(((e,n)=>{n===t.line.length-1&&(t.completions=st(t,i));const a=e.q?"":e.v;let o=r.then[a];void 0===o?(o=r.then[""],t.isVar=!0):t.isVar=e.q,"number"==typeof o?i.length-=o:i.push(o||Z),r=A(i),rt(t,s,e,r)})),e&&rt(t,s,null,{}),t.nextCompletions=st(t,i),t.valid=Boolean(r.then["\n"])||0===Object.keys(r.then).length,r.type}function at(t){const e=t.baseToken||{};return{quoted:e.q||!1,value:e.v||""}}class ot{constructor(t,e){this.tokenDefinitions=t,this.commands=et(e),this.lineComment="#"}startState(){return{beginCompletions:st({},[this.commands]),completions:[],current:"",currentQuoted:!1,currentSpace:"",currentType:-1,indent:0,isVar:!0,knownAgent:[],knownDelayedAgent:[],knownLabel:[],line:[],nextCompletions:[],valid:!0}}_matchPattern(t,e,n){retur