diff --git a/SequenceDiagram.xcworkspace/contents.xcworkspacedata b/SequenceDiagram.xcworkspace/contents.xcworkspacedata
index 313cd59..3e91372 100644
--- a/SequenceDiagram.xcworkspace/contents.xcworkspacedata
+++ b/SequenceDiagram.xcworkspace/contents.xcworkspacedata
@@ -19,6 +19,9 @@
+
+
diff --git a/spec/support/eslintrc.js b/eslintrc.js
similarity index 98%
rename from spec/support/eslintrc.js
rename to eslintrc.js
index a5526ce..e783427 100644
--- a/spec/support/eslintrc.js
+++ b/eslintrc.js
@@ -10,6 +10,14 @@ module.exports = {
'plugin:jasmine/recommended',
],
'globals': {'SharedArrayBuffer': false},
+ 'overrides': [
+ {
+ 'files': ['**/*spec.*'],
+ 'rules': {
+ 'max-statements': ['off'],
+ },
+ },
+ ],
'parserOptions': {
'sourceType': 'module',
},
diff --git a/lib/sequence-diagram-web.js b/lib/sequence-diagram-web.js
index e56e94b..380e5b9 100644
--- a/lib/sequence-diagram-web.js
+++ b/lib/sequence-diagram-web.js
@@ -4158,6 +4158,10 @@
const STYLES = [
{
+ attrs: {'font-style': 'italic'},
+ begin: {matcher: //g, skip: 0},
+ end: {matcher: /<\/i>/g, skip: 0},
+ }, {
attrs: {'font-style': 'italic'},
begin: {matcher: /[\s_~`>]\*(?=\S)/g, skip: 1},
end: {matcher: /\S\*(?=[\s_~`<])/g, skip: 1},
@@ -4165,6 +4169,10 @@
attrs: {'font-style': 'italic'},
begin: {matcher: /[\s*~`>]_(?=\S)/g, skip: 1},
end: {matcher: /\S_(?=[\s*~`<])/g, skip: 1},
+ }, {
+ attrs: {'font-weight': 'bolder'},
+ begin: {matcher: //g, skip: 0},
+ end: {matcher: /<\/b>/g, skip: 0},
}, {
attrs: {'font-weight': 'bolder'},
begin: {matcher: /[\s_~`>]\*\*(?=\S)/g, skip: 1},
@@ -4173,14 +4181,26 @@
attrs: {'font-weight': 'bolder'},
begin: {matcher: /[\s*~`>]__(?=\S)/g, skip: 1},
end: {matcher: /\S__(?=[\s*~`<])/g, skip: 1},
+ }, {
+ attrs: {'text-decoration': 'line-through'},
+ begin: {matcher: //g, skip: 0},
+ end: {matcher: /<\/s>/g, skip: 0},
}, {
attrs: {'text-decoration': 'line-through'},
begin: {matcher: /[\s_*`>]~(?=\S)/g, skip: 1},
end: {matcher: /\S~(?=[\s_*`<])/g, skip: 1},
+ }, {
+ attrs: {'text-decoration': 'overline'},
+ begin: {matcher: //g, skip: 0},
+ end: {matcher: /<\/o>/g, skip: 0},
}, {
attrs: {'font-family': 'Courier New,Liberation Mono,monospace'},
begin: {matcher: /[\s_*~.>]`(?=\S)/g, skip: 1},
end: {matcher: /\S`(?=[\s_*~.<])/g, skip: 1},
+ }, {
+ attrs: {'text-decoration': 'underline'},
+ begin: {matcher: //g, skip: 0},
+ end: {matcher: /<\/u>/g, skip: 0},
}, {
attrs: {'fill': '#DD0000'},
begin: {matcher: //g, skip: 0},
@@ -4221,11 +4241,21 @@
return null;
}
const attrs = {};
+ const decorations = [];
active.forEach((on, ind) => {
- if(on) {
- Object.assign(attrs, STYLES[ind].attrs);
+ if(!on) {
+ return;
}
+ const activeAttrs = STYLES[ind].attrs;
+ const decoration = activeAttrs['text-decoration'];
+ if(decoration && !decorations.includes(decoration)) {
+ decorations.push(decoration);
+ }
+ Object.assign(attrs, activeAttrs);
});
+ if(decorations.length > 1) {
+ attrs['text-decoration'] = decorations.join(' ');
+ }
return attrs;
}
diff --git a/lib/sequence-diagram-web.min.js b/lib/sequence-diagram-web.min.js
index 67701e7..64e3bd6 100644
--- a/lib/sequence-diagram-web.min.js
+++ b/lib/sequence-diagram-web.min.js
@@ -1 +1 @@
-!function(){"use strict";function t(t,e,n=null){if(null===n)return t.indexOf(e);for(let s=0;s=t.length)return void s.push(n.slice());const r=t[e];if(!Array.isArray(r))return n.push(r),i(t,e+1,n,s),void n.pop();for(let a=0;a{n.push(...e(t))}),n}function o(t,e){const n=It[t.type];return!(!n||t.type!==e.type)&&!n.check.some(n=>t[n]!==e[n])}function h(t,n){It[t.type].merge.forEach(s=>{e(t[s],n[s])})}function l(t,e){for(let n=0;n{for(let s=0;st);return n.forEach(t=>{const s=It[t];s&&n.every(e=>t===e||s.siblings.has(e))&&e.add(t)}),e}function c(t,e,n,s){l(s,s=>{if(!t.has(s.type)||!e.has(s.type))return!1;for(let t=0;t!Et.includes(t.type))?"Cannot use parallel here":function(t){const e=a(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 f(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 m(t,e,n,r=null){s(t,e,Mt.equals),s(t,n,Mt.equals);let i=0,a=t.length;if(r){const e=r.map(e=>Mt.indexOf(t,e)).filter(t=>-1!==t);i=e.reduce((t,e)=>Math.min(t,e),t.length),a=e.reduce((t,e)=>Math.max(t,e),i)+1}return t.splice(i,0,e),t.splice(a+1,0,n),{indexL:i,indexR:a+1}}function b(t,e=[]){return{type:"string",suggest:e,then:Object.assign({"":0},t)}}function y(t,e){return t.v===e.v&&t.prefix===e.prefix&&t.suffix===e.suffix&&t.q===e.q}function x(t,e,n){return a(n.suggest||[""],s=>{if("object"==typeof s)return s.known?t["known"+s.known]||[]:[s];if(""===s)return[function(t,e){return Object.keys(e.then).length>0?{q:!1,suffix:" ",v:t}:{q:!1,suffix:"\n",v:t}}(e,n)];if("string"==typeof s)return[{q:""===e,v:s}];throw new Error("Invalid suggestion type "+s)})}function k(t,n){const s=[],i=r(n);return Object.keys(i.then).forEach(r=>{let a=i.then[r];"number"==typeof a&&(a=n[n.length-a-1]),e(s,x(t,r,a),y)}),s}function w(t,n,s,r){const i=function(t){for(const e of t)if("object"==typeof e&&e.known)return e.known;return null}(r.suggest||[""]);n.type&&i!==n.type&&(!function(t,n,s){e(t["known"+n],[{q:!0,suffix:" ",v:s}],y)}(t,r.override||n.type,n.value),n.value=""),i&&(n.value=function(t,e){return t+(t?e.s:"")+e.v}(n.value,s)),n.type=i}function v(t,e,n){const s={type:"",value:""};let i=n;const a=[i];return t.line.forEach((e,n)=>{n===t.line.length-1&&(t.completions=k(t,a));const o=e.q?"":e.v;let h=i.then[o];void 0===h?(h=i.then[""],t.isVar=!0):t.isVar=e.q,"number"==typeof h?a.length-=h:a.push(h||Tt),i=r(a),w(t,s,e,i)}),e&&w(t,s,null,{}),t.nextCompletions=k(t,a),t.valid=Boolean(i.then["\n"])||0===Object.keys(i.then).length,i.type}function A(t){const e=t.baseToken||{};return{quoted:e.q||!1,value:e.v||""}}function F(t,e,n){return e.lastIndex=n,e.exec(t)}function S(t,e,n){return n?function(t,e,n){if(n.escape){const s=F(t,n.escape,e);if(s)return{appendSpace:"",appendValue:n.escapeWith(s),end:!1,newBlock:null,skip:s[0].length}}const s=F(t,n.end,e);return s?{appendSpace:"",appendValue:n.includeEnd?s[0]:"",end:!0,newBlock:null,skip:s[0].length}:{appendSpace:"",appendValue:t[e],end:!1,newBlock:null,skip:1}}(t,e,n):function(t,e){for(let n=0;n"}function I(t,e,n){const s=" "+t+" ";let r=-1,i=s.length,a=0;return Xt.forEach(({begin:t,end:o},h)=>{const l=n[h]?o:t;l.matcher.lastIndex=e+1-l.skip;const d=l.matcher.exec(s),g=d?d.index+l.skip:Number.POSITIVE_INFINITY;(ga)&&(r=h,i=g,a=l.matcher.lastIndex)}),{end:a-1,start:i-1,styleIndex:r}}function E(t,e){if(!t)return null;const n={};return e.forEach((t,e)=>{t&&Object.assign(n,Xt[e].attrs)}),n}function G(t){return t.replace(/^[\f\n\r\t\v ]+|[\f\n\r\t\v ]+$/g,"")}function D(t){if(!t)return[];const e=Xt.map(()=>!1);let n=0,s=null;const r=[];return G(t).split("\n").forEach(t=>{const i=function(t){return t.replace(/[\f\n\r\t\v ]+/g," ")}(G(t)),a=[];let o=0;for(;;){const{styleIndex:t,start:r,end:h}=I(i,o,e);if(-1===t)break;e[t]?(e[t]=!1,--n):(e[t]=!0,++n),r>o&&a.push({attrs:s,text:i.substring(o,r)}),s=E(n,e),o=h}o=a&&!i){let n=t[e];throw n||(n={b:r(t).e}),L("Missing agent name",n)}return{alias:z(t,a+1,n),name:z(t,e,a)}}(t,h,n,{allowBlankName:l,enableAlias:i});return{alias:g,flags:d?a:o,name:d}}function P(t,e,n,s){const r=[];let i=-1;for(let a=e;a{const r=t.get(e);(null===n||r.indexs.index)&&(s=r)}),{left:n.id,right:s.id}}function U(t=null,e=null){return null===t?e:null===e?t:Math.max(t,e)}function W(t,n){return e(t.agentIDs,n.agentIDs),{agentIDs:t.agentIDs,asynchronousY:U(t.asynchronousY,n.asynchronousY),topShift:Math.max(t.topShift,n.topShift),y:U(t.y,n.y)}}function X(t){return null===t?null:t.element?t.element:t}function Q(t,e,n){if(!Array.isArray(n))throw new Error("Invalid formatted text line: "+n);n.forEach(({text:n,attrs:s})=>{let r=n;s&&(r=t.el("tspan").attrs(s).add(n),s.filter&&r.attr("filter",t.getTextFilter(s.filter))),e.add(r)})}function J(t,e){let n=null,s=null;return e.forEach(e=>{const r=t.get(e);(null===n||r.indexs.index)&&(s=r)}),{left:n.id,right:s.id}}function Z(t,e){return t.v===e.v&&t.prefix===e.prefix&&t.suffix===e.suffix&&t.q===e.q}function K(t,e,n){const s=t.getLine(e),r={squash:{ch:n,line:e},word:{ch:n,line:e}};return n>0&&" "===s[n-1]&&(qe.after.includes(s[n-2])&&r.word.ch--,r.squash.ch--),r}function _(t,e,n){const s=function({v:t,q:e,prefix:n="",suffix:s=""},r){const i=r||!Ue.test(t)?r:'"';return n+(i&&e?i+t.replace(We,"\\$&")+i:t)+s}(t,n),r=t.q?e.fromVar:e.fromKey;return"\n"===s?{className:"pick-virtual",displayFrom:null,displayText:"",from:r.squash,text:"\n",to:e.to.squash}:{className:null,displayFrom:r.word,displayText:s.trim(),from:qe.start.test(s)?r.squash:r.word,text:s,to:qe.end.test(s)?e.to.squash:e.to.word}}function $({global:t,prefix:e="",suffix:n=""},s){const r=s[t];return r?r.map(t=>({prefix:e,q:!0,suffix:n,v:t})):[]}function tt(t,n,s){let r=null;return r=t.ch>0&&n.state.line.length>0?n.state.completions.slice():n.state.beginCompletions.concat(n.state.knownAgent),function(t,n={}){for(let s=0;s=e.ch){n.length=t+1;break}return n}(t,n),i=r(s)||t.getTokenAt(n),a=function(t,e){let n="",s=0,r=0;t.forEach(t=>{t.state.isVar?(n+=t.string,r=t.end):(n="",s=t.end)}),r>e.ch&&(n=n.substr(0,e.ch-s));const i=je.exec(n);n=i[2];let a="";return Ye.test(n)&&(a=n.charAt(0),n=n.substr(1)),{from:s+i[1].length,partial:n,quote:a,valid:r>=s}}(s,n),o=function(t,e){let n=t.string;t.end>e.ch&&(n=n.substr(0,e.ch-t.start));const s=je.exec(n);return{from:t.start+s[1].length,partial:s[2],valid:!0}}(i,n),h=tt(n,i,t.options.globals),l={fromKey:K(t,n.line,o.from),fromVar:K(t,n.line,a.from),to:function(t,e,n){const s={squash:{ch:n,line:e},word:{ch:n,line:e}};return" "===t.getLine(e)[n]&&s.squash.ch++,s}(t,n.line,i.end)};let d=null;const g=h.filter(t=>(t.q||!a.quote)&&function(t,e){return e.valid&&t.startsWith(e.partial)}(t.v,t.q?a:o)).map(t=>e.completeSingle||t.v!==(t.q?a:o).partial?_(t,l,a.quote):(d=t,null)).filter(t=>null!==t);return d&&g.length>0&&g.unshift(_(d,l,a.quote)),{from:function(t,e){let n=null;return t.forEach(({displayFrom:t})=>{t&&(!n||t.line>n.line||t.line===n.line&&t.ch>n.ch)&&(n=t)}),n||e.word}(g,l.fromKey),list:g,to:l.to.word}}function nt(t,e="sequence"){const n=t||window.CodeMirror;n.defineMode(e,()=>Ze),n.registerHelper("hint",e,et)}function st(t){const e=(new DOMParser).parseFromString(t,"image/svg+xml").querySelector("metadata");return e?e.textContent:""}function rt(t){function e(t,e){n.push(e)}const n=[];if(t.forEach(t=>{t.addEventListener("error",e),t.optimisedRenderPreReflow()}),t.forEach(t=>{t.optimisedRenderReflow()}),t.forEach(t=>{t.optimisedRenderPostReflow(),t.removeEventListener("error",e)}),n.length>0)throw n}function it(t,e=null,n={}){if("svg"===t.tagName)return null;const s=function(t){return{interactive:function(t){return void 0!==t&&"false"!==t}(t.dataset.sdInteractive),namespace:t.dataset.sdNamespace||null}}(t),r=new Ke(null===e?t.textContent:e,Object.assign(s,n)),i=r.dom(),a=t.attributes;for(let t=0;tit(t,s,e)).filter(t=>null!==t);return!1!==r.render&&rt(n),n}return it(t,s,r)}class ot{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 ht{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("highlight",()=>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:.9375,slope:0,type:"linear"}),this.svg.el("feFuncB").attrs({intercept:.09375,slope:0,type:"linear"}),this.svg.el("feFuncA").attrs({slope:.7,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,h=.5*n*e.dx,l=.5*-n*e.dy;return this.svg.el("none"===t.fill?"polyline":"polygon").attr("points",r+a-l+" "+(i+o-h)+" "+r+" "+i+" "+(r+a+l)+" "+(i+o+h)).attrs(t)}renderTag(t,{height:e,width:n,x:s,y:r}){const{rx:i,ry:a}=t,o=s+n,h=r+e,l="M"+o+" "+r+"L"+o+" "+(h-a)+"L"+(o-i)+" "+h+"L"+s+" "+h,d=this.svg.el("g");return"none"!==t.fill&&d.add(this.svg.el("path").attr("d",l+"L"+s+" "+r).attrs(t).attr("stroke","none")),"none"!==t.stroke&&d.add(this.svg.el("path").attr("d",l).attrs(t).attr("fill","none")),d}renderDB(t,e){const n=t["db-z"];return this.svg.el("g").add(this.svg.box({rx:e.width/2,ry:n},e).attrs(t),this.svg.el("path").attr("d","M"+e.x+" "+(e.y+n)+"a"+e.width/2+" "+n+" 0 0 0 "+e.width+" 0").attrs(t).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 h=(o-a)/2,l=this.svg.patternedLine(t).move(s,a).line(i,a);return n0?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:t,fadeSize:e,lineAttrs:n,pattern:s,zigHeight:r,zigWidth:i},{env:a,height:o,labelHeight:h,labelWidth:l,width:d,x:g,y:c}){const u=a.addDef("tear-grad",()=>{const n=100/d;return this.svg.linearGradient({},[{offset:t*n+"%","stop-color":"#000000"},{offset:(t+e)*n+"%","stop-color":"#FFFFFF"},{offset:100-(t+e)*n+"%","stop-color":"#FFFFFF"},{offset:100-t*n+"%","stop-color":"#000000"}])}),p=this.svg.el("mask").attr("maskUnits","userSpaceOnUse").add(this.svg.box({fill:"url(#"+u+")"},{height:o+10,width:d,x:g,y:c-5})),f=a.addDef(p);l>0&&p.add(this.svg.box({fill:"#000000",rx:2,ry:2},{height:h+2,width:l,x:g+(d-l)/2,y:c+(o-h)/2-1}));const m=s||new ot(i,[r,-r]);let b=null;const y=this.svg.patternedLine(m).move(g,c).line(g+d,c),x=this.svg.el("g").attr("mask","url(#"+f+")").add(this.svg.el("path").attrs({d:y.asPath(),fill:"none"}).attrs(n));if(o>0){const t=this.svg.patternedLine(m).move(g,c+o).line(g+d,c+o);x.add(this.svg.el("path").attrs({d:t.asPath(),fill:"none"}).attrs(n)),y.line(t.x,t.y,{patterned:!1}).cap(),y.points.push(...t.points.reverse()),b=this.svg.el("path").attrs({d:y.asPath(),fill:"#000000"})}return{mask:b,shape:x}}}const lt="Helvetica,Arial,Liberation Sans,sans-serif",dt=1.3,gt={"font-family":lt,"font-size":8,"line-height":dt},ct={"font-family":lt,"font-size":8,"line-height":dt,"text-anchor":"middle"};class ut extends ht{constructor(t){super(t,{"font-family":lt,"font-size":8,"line-height":dt});const e={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":lt,"font-weight":"bold","font-size":9,"line-height":dt,"text-anchor":"left"}},label:{minHeight:4,padding:{top:1,left:5,right:3,bottom:1},labelAttrs:{"font-family":lt,"font-size":8,"line-height":dt,"text-anchor":"left"}}};Object.assign(this,{titleMargin:10,outerMargin:5,agentMargin:10,actionMargin:10,minActionMargin:3,agentLineHighlightRadius: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":lt,"font-size":12,"line-height":dt,"text-anchor":"middle"}},database:{padding:{top:12,left:10,right:10,bottom:3},arrowBottom:12.8,boxRenderer:this.renderDB.bind(this,{fill:"#FFFFFF",stroke:"#000000","stroke-width":1,"db-z":5}),labelAttrs:{"font-family":lt,"font-size":12,"line-height":dt,"text-anchor":"middle"}},cross:{size:20,render:t.crossFactory({fill:"none",stroke:"#000000","stroke-width":1})},bar:{height:4,render:t.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"}},cross:{short:7,radius:3,render:t.crossFactory({fill:"none",stroke:"#000000","stroke-width":1})}},label:{padding:6,margin:{top:2,bottom:1},attrs:{"font-family":lt,"font-size":8,"line-height":dt,"text-anchor":"middle"},loopbackAttrs:{"font-family":lt,"font-size":8,"line-height":dt}},source:{radius:2,render:t.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:e},"":{margin:{top:0,bottom:0},boxRenderer:t.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:e,sepRenderer:t.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:t.boxFactory({fill:"#FFFFFF"}),labelAttrs:gt},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:t.noteFactory({fill:"#FFFFFF",stroke:"#000000","stroke-width":1},{fill:"none",stroke:"#000000","stroke-width":1}),labelAttrs:gt},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:t.boxFactory({fill:"#FFFFFF",stroke:"#000000","stroke-width":1,rx:10,ry:10}),labelAttrs:gt}},dividers:{"":{labelAttrs:ct,padding:{top:2,left:5,right:5,bottom:2},extend:0,margin:0,render:()=>({})},line:{labelAttrs:ct,padding:{top:2,left:5,right:5,bottom:2},extend:10,margin:0,render:this.renderLineDivider.bind(this,{lineAttrs:{stroke:"#000000"}})},delay:{labelAttrs:ct,padding:{top:2,left:5,right:5,bottom:2},extend:0,margin:0,render:this.renderDelayDivider.bind(this,{dotSize:1,gapSize:2})},tear:{labelAttrs:ct,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 ot(6,.5)})}}const pt="Helvetica,Arial,Liberation Sans,sans-serif",ft=1.3,mt={"font-family":pt,"font-size":8,"line-height":ft},bt={"font-family":pt,"font-size":8,"line-height":ft,"text-anchor":"middle"};class yt extends ht{constructor(t){super(t,{"font-family":pt,"font-size":8,"line-height":ft});const e={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":pt,"font-weight":"bold","font-size":9,"line-height":ft,"text-anchor":"left"}},label:{minHeight:5,padding:{top:2,left:5,right:3,bottom:1},labelAttrs:{"font-family":pt,"font-size":8,"line-height":ft,"text-anchor":"left"}}};Object.assign(this,{titleMargin:12,outerMargin:5,agentMargin:8,actionMargin:5,minActionMargin:5,agentLineHighlightRadius: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":pt,"font-weight":"bold","font-size":14,"line-height":ft,"text-anchor":"middle"}},database:{padding:{top:4,left:3,right:3,bottom:0},arrowBottom:11.1,boxRenderer:this.renderDB.bind(this,{fill:"#FFFFFF",stroke:"#000000","stroke-width":3,"db-z":2}),labelAttrs:{"font-family":pt,"font-weight":"bold","font-size":14,"line-height":ft,"text-anchor":"middle"}},cross:{size:20,render:t.crossFactory({fill:"none",stroke:"#000000","stroke-width":3,"stroke-linecap":"round"})},bar:{height:4,render:t.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"}},cross:{short:10,radius:5,render:t.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":pt,"font-size":8,"line-height":ft,"text-anchor":"middle"},loopbackAttrs:{"font-family":pt,"font-size":8,"line-height":ft}},source:{radius:5,render:t.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:e},"":{margin:{top:0,bottom:0},boxRenderer:t.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:e,sepRenderer:t.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:t.boxFactory({fill:"#FFFFFF"}),labelAttrs:mt},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:t.noteFactory({fill:"#FFFFFF",stroke:"#000000","stroke-width":2,"stroke-linejoin":"round"},{fill:"none",stroke:"#000000","stroke-width":1}),labelAttrs:mt},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:t.boxFactory({fill:"#FFFFFF",stroke:"#000000","stroke-width":3,rx:10,ry:10}),labelAttrs:mt}},dividers:{"":{labelAttrs:bt,padding:{top:2,left:5,right:5,bottom:2},extend:0,margin:0,render:()=>({})},line:{labelAttrs:bt,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:bt,padding:{top:2,left:5,right:5,bottom:2},extend:0,margin:0,render:this.renderDelayDivider.bind(this,{dotSize:3,gapSize:3})},tear:{labelAttrs:bt,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 ot(10,1)})}getTitleAttrs(){return Object.assign(super.getTitleAttrs(),{"font-weight":"bolder"})}}class xt{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 kt="undefined"==typeof window,wt=!kt&&/^((?!chrome|android).)*safari/i.test(window.navigator.userAgent),vt=!kt&&void 0!==window.InstallTrigger;class At{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(/^