import { p as H, c as b, d as q, ar as Q, h as E, l as g, y as j, D as lt } from './index-0e3b96e2.js'; import { a as st } from './createText-ca0c5216-c3320e7a.js'; import { l as ct } from './line-0981dc5a.js'; const ht = (e, t, a, i) => { t.forEach((l) => { wt[l](e, a, i); }); }, ot = (e, t, a) => { g.trace('Making markers for ', a), e .append('defs') .append('marker') .attr('id', a + '_' + t + '-extensionStart') .attr('class', 'marker extension ' + t) .attr('refX', 18) .attr('refY', 7) .attr('markerWidth', 190) .attr('markerHeight', 240) .attr('orient', 'auto') .append('path') .attr('d', 'M 1,7 L18,13 V 1 Z'), e .append('defs') .append('marker') .attr('id', a + '_' + t + '-extensionEnd') .attr('class', 'marker extension ' + t) .attr('refX', 1) .attr('refY', 7) .attr('markerWidth', 20) .attr('markerHeight', 28) .attr('orient', 'auto') .append('path') .attr('d', 'M 1,1 V 13 L18,7 Z'); }, yt = (e, t, a) => { e .append('defs') .append('marker') .attr('id', a + '_' + t + '-compositionStart') .attr('class', 'marker composition ' + t) .attr('refX', 18) .attr('refY', 7) .attr('markerWidth', 190) .attr('markerHeight', 240) .attr('orient', 'auto') .append('path') .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'), e .append('defs') .append('marker') .attr('id', a + '_' + t + '-compositionEnd') .attr('class', 'marker composition ' + t) .attr('refX', 1) .attr('refY', 7) .attr('markerWidth', 20) .attr('markerHeight', 28) .attr('orient', 'auto') .append('path') .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'); }, pt = (e, t, a) => { e .append('defs') .append('marker') .attr('id', a + '_' + t + '-aggregationStart') .attr('class', 'marker aggregation ' + t) .attr('refX', 18) .attr('refY', 7) .attr('markerWidth', 190) .attr('markerHeight', 240) .attr('orient', 'auto') .append('path') .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'), e .append('defs') .append('marker') .attr('id', a + '_' + t + '-aggregationEnd') .attr('class', 'marker aggregation ' + t) .attr('refX', 1) .attr('refY', 7) .attr('markerWidth', 20) .attr('markerHeight', 28) .attr('orient', 'auto') .append('path') .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'); }, ft = (e, t, a) => { e .append('defs') .append('marker') .attr('id', a + '_' + t + '-dependencyStart') .attr('class', 'marker dependency ' + t) .attr('refX', 6) .attr('refY', 7) .attr('markerWidth', 190) .attr('markerHeight', 240) .attr('orient', 'auto') .append('path') .attr('d', 'M 5,7 L9,13 L1,7 L9,1 Z'), e .append('defs') .append('marker') .attr('id', a + '_' + t + '-dependencyEnd') .attr('class', 'marker dependency ' + t) .attr('refX', 13) .attr('refY', 7) .attr('markerWidth', 20) .attr('markerHeight', 28) .attr('orient', 'auto') .append('path') .attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z'); }, xt = (e, t, a) => { e .append('defs') .append('marker') .attr('id', a + '_' + t + '-lollipopStart') .attr('class', 'marker lollipop ' + t) .attr('refX', 13) .attr('refY', 7) .attr('markerWidth', 190) .attr('markerHeight', 240) .attr('orient', 'auto') .append('circle') .attr('stroke', 'black') .attr('fill', 'transparent') .attr('cx', 7) .attr('cy', 7) .attr('r', 6), e .append('defs') .append('marker') .attr('id', a + '_' + t + '-lollipopEnd') .attr('class', 'marker lollipop ' + t) .attr('refX', 1) .attr('refY', 7) .attr('markerWidth', 190) .attr('markerHeight', 240) .attr('orient', 'auto') .append('circle') .attr('stroke', 'black') .attr('fill', 'transparent') .attr('cx', 7) .attr('cy', 7) .attr('r', 6); }, dt = (e, t, a) => { e .append('marker') .attr('id', a + '_' + t + '-pointEnd') .attr('class', 'marker ' + t) .attr('viewBox', '0 0 10 10') .attr('refX', 6) .attr('refY', 5) .attr('markerUnits', 'userSpaceOnUse') .attr('markerWidth', 12) .attr('markerHeight', 12) .attr('orient', 'auto') .append('path') .attr('d', 'M 0 0 L 10 5 L 0 10 z') .attr('class', 'arrowMarkerPath') .style('stroke-width', 1) .style('stroke-dasharray', '1,0'), e .append('marker') .attr('id', a + '_' + t + '-pointStart') .attr('class', 'marker ' + t) .attr('viewBox', '0 0 10 10') .attr('refX', 4.5) .attr('refY', 5) .attr('markerUnits', 'userSpaceOnUse') .attr('markerWidth', 12) .attr('markerHeight', 12) .attr('orient', 'auto') .append('path') .attr('d', 'M 0 5 L 10 10 L 10 0 z') .attr('class', 'arrowMarkerPath') .style('stroke-width', 1) .style('stroke-dasharray', '1,0'); }, gt = (e, t, a) => { e .append('marker') .attr('id', a + '_' + t + '-circleEnd') .attr('class', 'marker ' + t) .attr('viewBox', '0 0 10 10') .attr('refX', 11) .attr('refY', 5) .attr('markerUnits', 'userSpaceOnUse') .attr('markerWidth', 11) .attr('markerHeight', 11) .attr('orient', 'auto') .append('circle') .attr('cx', '5') .attr('cy', '5') .attr('r', '5') .attr('class', 'arrowMarkerPath') .style('stroke-width', 1) .style('stroke-dasharray', '1,0'), e .append('marker') .attr('id', a + '_' + t + '-circleStart') .attr('class', 'marker ' + t) .attr('viewBox', '0 0 10 10') .attr('refX', -1) .attr('refY', 5) .attr('markerUnits', 'userSpaceOnUse') .attr('markerWidth', 11) .attr('markerHeight', 11) .attr('orient', 'auto') .append('circle') .attr('cx', '5') .attr('cy', '5') .attr('r', '5') .attr('class', 'arrowMarkerPath') .style('stroke-width', 1) .style('stroke-dasharray', '1,0'); }, ut = (e, t, a) => { e .append('marker') .attr('id', a + '_' + t + '-crossEnd') .attr('class', 'marker cross ' + t) .attr('viewBox', '0 0 11 11') .attr('refX', 12) .attr('refY', 5.2) .attr('markerUnits', 'userSpaceOnUse') .attr('markerWidth', 11) .attr('markerHeight', 11) .attr('orient', 'auto') .append('path') .attr('d', 'M 1,1 l 9,9 M 10,1 l -9,9') .attr('class', 'arrowMarkerPath') .style('stroke-width', 2) .style('stroke-dasharray', '1,0'), e .append('marker') .attr('id', a + '_' + t + '-crossStart') .attr('class', 'marker cross ' + t) .attr('viewBox', '0 0 11 11') .attr('refX', -1) .attr('refY', 5.2) .attr('markerUnits', 'userSpaceOnUse') .attr('markerWidth', 11) .attr('markerHeight', 11) .attr('orient', 'auto') .append('path') .attr('d', 'M 1,1 l 9,9 M 10,1 l -9,9') .attr('class', 'arrowMarkerPath') .style('stroke-width', 2) .style('stroke-dasharray', '1,0'); }, bt = (e, t, a) => { e.append('defs') .append('marker') .attr('id', a + '_' + t + '-barbEnd') .attr('refX', 19) .attr('refY', 7) .attr('markerWidth', 20) .attr('markerHeight', 14) .attr('markerUnits', 'strokeWidth') .attr('orient', 'auto') .append('path') .attr('d', 'M 19,7 L9,13 L14,7 L9,1 Z'); }, wt = { extension: ot, composition: yt, aggregation: pt, dependency: ft, lollipop: xt, point: dt, circle: gt, cross: ut, barb: bt }, hr = ht; function mt(e, t) { t && e.attr('style', t); } function kt(e) { const t = E(document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject')), a = t.append('xhtml:div'), i = e.label, l = e.isNode ? 'nodeLabel' : 'edgeLabel'; return ( a.html('' + i + ''), mt(a, e.labelStyle), a.style('display', 'inline-block'), a.style('white-space', 'nowrap'), a.attr('xmlns', 'http://www.w3.org/1999/xhtml'), t.node() ); } const vt = (e, t, a, i) => { let l = e || ''; if ((typeof l == 'object' && (l = l[0]), H(b().flowchart.htmlLabels))) { (l = l.replace(/\\n|\n/g, '
')), g.debug('vertexText' + l); const r = { isNode: i, label: Q(l).replace(/fa[blrs]?:fa-[\w-]+/g, (n) => ``), labelStyle: t.replace('fill:', 'color:'), }; return kt(r); } else { const r = document.createElementNS('http://www.w3.org/2000/svg', 'text'); r.setAttribute('style', t.replace('color:', 'fill:')); let s = []; typeof l == 'string' ? (s = l.split(/\\n|\n|/gi)) : Array.isArray(l) ? (s = l) : (s = []); for (const n of s) { const c = document.createElementNS('http://www.w3.org/2000/svg', 'tspan'); c.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve'), c.setAttribute('dy', '1em'), c.setAttribute('x', '0'), a ? c.setAttribute('class', 'title-row') : c.setAttribute('class', 'row'), (c.textContent = n.trim()), r.appendChild(c); } return r; } }, R = vt, M = async (e, t, a, i) => { let l; const r = t.useHtmlLabels || H(b().flowchart.htmlLabels); a ? (l = a) : (l = 'node default'); const s = e .insert('g') .attr('class', l) .attr('id', t.domId || t.id), n = s.insert('g').attr('class', 'label').attr('style', t.labelStyle); let c; t.labelText === void 0 ? (c = '') : (c = typeof t.labelText == 'string' ? t.labelText : t.labelText[0]); const o = n.node(); let h; t.labelType === 'markdown' ? (h = st(n, q(Q(c), b()), { useHtmlLabels: r, width: t.width || b().flowchart.wrappingWidth, classes: 'markdown-node-label' })) : (h = o.appendChild(R(q(Q(c), b()), t.labelStyle, !1, i))); let y = h.getBBox(); const f = t.padding / 2; if (H(b().flowchart.htmlLabels)) { const p = h.children[0], d = E(h), k = p.getElementsByTagName('img'); if (k) { const x = c.replace(/]*>/g, '').trim() === ''; await Promise.all( [...k].map( (u) => new Promise((S) => { function B() { if (((u.style.display = 'flex'), (u.style.flexDirection = 'column'), x)) { const C = b().fontSize ? b().fontSize : window.getComputedStyle(document.body).fontSize, W = 5, D = parseInt(C, 10) * W + 'px'; (u.style.minWidth = D), (u.style.maxWidth = D); } else u.style.width = '100%'; S(u); } setTimeout(() => { u.complete && B(); }), u.addEventListener('error', B), u.addEventListener('load', B); }) ) ); } (y = p.getBoundingClientRect()), d.attr('width', y.width), d.attr('height', y.height); } return ( r ? n.attr('transform', 'translate(' + -y.width / 2 + ', ' + -y.height / 2 + ')') : n.attr('transform', 'translate(0, ' + -y.height / 2 + ')'), t.centerLabel && n.attr('transform', 'translate(' + -y.width / 2 + ', ' + -y.height / 2 + ')'), n.insert('rect', ':first-child'), { shapeSvg: s, bbox: y, halfPadding: f, label: n } ); }, m = (e, t) => { const a = t.node().getBBox(); (e.width = a.width), (e.height = a.height); }; function I(e, t, a, i) { return e .insert('polygon', ':first-child') .attr( 'points', i .map(function (l) { return l.x + ',' + l.y; }) .join(' ') ) .attr('class', 'label-container') .attr('transform', 'translate(' + -t / 2 + ',' + a / 2 + ')'); } function Lt(e, t) { return e.intersect(t); } function it(e, t, a, i) { var l = e.x, r = e.y, s = l - i.x, n = r - i.y, c = Math.sqrt(t * t * n * n + a * a * s * s), o = Math.abs((t * a * s) / c); i.x < l && (o = -o); var h = Math.abs((t * a * n) / c); return i.y < r && (h = -h), { x: l + o, y: r + h }; } function St(e, t, a) { return it(e, t, t, a); } function Mt(e, t, a, i) { var l, r, s, n, c, o, h, y, f, p, d, k, x, u, S; if ( ((l = t.y - e.y), (s = e.x - t.x), (c = t.x * e.y - e.x * t.y), (f = l * a.x + s * a.y + c), (p = l * i.x + s * i.y + c), !(f !== 0 && p !== 0 && J(f, p)) && ((r = i.y - a.y), (n = a.x - i.x), (o = i.x * a.y - a.x * i.y), (h = r * e.x + n * e.y + o), (y = r * t.x + n * t.y + o), !(h !== 0 && y !== 0 && J(h, y)) && ((d = l * n - r * s), d !== 0))) ) return ( (k = Math.abs(d / 2)), (x = s * o - n * c), (u = x < 0 ? (x - k) / d : (x + k) / d), (x = r * c - l * o), (S = x < 0 ? (x - k) / d : (x + k) / d), { x: u, y: S } ); } function J(e, t) { return e * t > 0; } function Tt(e, t, a) { var i = e.x, l = e.y, r = [], s = Number.POSITIVE_INFINITY, n = Number.POSITIVE_INFINITY; typeof t.forEach == 'function' ? t.forEach(function (d) { (s = Math.min(s, d.x)), (n = Math.min(n, d.y)); }) : ((s = Math.min(s, t.x)), (n = Math.min(n, t.y))); for (var c = i - e.width / 2 - s, o = l - e.height / 2 - n, h = 0; h < t.length; h++) { var y = t[h], f = t[h < t.length - 1 ? h + 1 : 0], p = Mt(e, a, { x: c + y.x, y: o + y.y }, { x: c + f.x, y: o + f.y }); p && r.push(p); } return r.length ? (r.length > 1 && r.sort(function (d, k) { var x = d.x - a.x, u = d.y - a.y, S = Math.sqrt(x * x + u * u), B = k.x - a.x, C = k.y - a.y, W = Math.sqrt(B * B + C * C); return S < W ? -1 : S === W ? 0 : 1; }), r[0]) : e; } const Bt = (e, t) => { var a = e.x, i = e.y, l = t.x - a, r = t.y - i, s = e.width / 2, n = e.height / 2, c, o; return ( Math.abs(r) * s > Math.abs(l) * n ? (r < 0 && (n = -n), (c = r === 0 ? 0 : (n * l) / r), (o = n)) : (l < 0 && (s = -s), (c = s), (o = l === 0 ? 0 : (s * r) / l)), { x: a + c, y: i + o } ); }, Et = Bt, w = { node: Lt, circle: St, ellipse: it, polygon: Tt, rect: Et }, Ct = async (e, t) => { t.useHtmlLabels || b().flowchart.htmlLabels || (t.centerLabel = !0); const { shapeSvg: i, bbox: l, halfPadding: r } = await M(e, t, 'node ' + t.classes, !0); g.info('Classes = ', t.classes); const s = i.insert('rect', ':first-child'); return ( s .attr('rx', t.rx) .attr('ry', t.ry) .attr('x', -l.width / 2 - r) .attr('y', -l.height / 2 - r) .attr('width', l.width + t.padding) .attr('height', l.height + t.padding), m(t, s), (t.intersect = function (n) { return w.rect(t, n); }), i ); }, $t = Ct, _t = (e) => { const t = new Set(); for (const a of e) switch (a) { case 'x': t.add('right'), t.add('left'); break; case 'y': t.add('up'), t.add('down'); break; default: t.add(a); break; } return t; }, Rt = (e, t, a) => { const i = _t(e), l = 2, r = t.height + 2 * a.padding, s = r / l, n = t.width + 2 * s + a.padding, c = a.padding / 2; return i.has('right') && i.has('left') && i.has('up') && i.has('down') ? [ { x: 0, y: 0 }, { x: s, y: 0 }, { x: n / 2, y: 2 * c }, { x: n - s, y: 0 }, { x: n, y: 0 }, { x: n, y: -r / 3 }, { x: n + 2 * c, y: -r / 2 }, { x: n, y: (-2 * r) / 3 }, { x: n, y: -r }, { x: n - s, y: -r }, { x: n / 2, y: -r - 2 * c }, { x: s, y: -r }, { x: 0, y: -r }, { x: 0, y: (-2 * r) / 3 }, { x: -2 * c, y: -r / 2 }, { x: 0, y: -r / 3 }, ] : i.has('right') && i.has('left') && i.has('up') ? [ { x: s, y: 0 }, { x: n - s, y: 0 }, { x: n, y: -r / 2 }, { x: n - s, y: -r }, { x: s, y: -r }, { x: 0, y: -r / 2 }, ] : i.has('right') && i.has('left') && i.has('down') ? [ { x: 0, y: 0 }, { x: s, y: -r }, { x: n - s, y: -r }, { x: n, y: 0 }, ] : i.has('right') && i.has('up') && i.has('down') ? [ { x: 0, y: 0 }, { x: n, y: -s }, { x: n, y: -r + s }, { x: 0, y: -r }, ] : i.has('left') && i.has('up') && i.has('down') ? [ { x: n, y: 0 }, { x: 0, y: -s }, { x: 0, y: -r + s }, { x: n, y: -r }, ] : i.has('right') && i.has('left') ? [ { x: s, y: 0 }, { x: s, y: -c }, { x: n - s, y: -c }, { x: n - s, y: 0 }, { x: n, y: -r / 2 }, { x: n - s, y: -r }, { x: n - s, y: -r + c }, { x: s, y: -r + c }, { x: s, y: -r }, { x: 0, y: -r / 2 }, ] : i.has('up') && i.has('down') ? [ { x: n / 2, y: 0 }, { x: 0, y: -c }, { x: s, y: -c }, { x: s, y: -r + c }, { x: 0, y: -r + c }, { x: n / 2, y: -r }, { x: n, y: -r + c }, { x: n - s, y: -r + c }, { x: n - s, y: -c }, { x: n, y: -c }, ] : i.has('right') && i.has('up') ? [ { x: 0, y: 0 }, { x: n, y: -s }, { x: 0, y: -r }, ] : i.has('right') && i.has('down') ? [ { x: 0, y: 0 }, { x: n, y: 0 }, { x: 0, y: -r }, ] : i.has('left') && i.has('up') ? [ { x: n, y: 0 }, { x: 0, y: -s }, { x: n, y: -r }, ] : i.has('left') && i.has('down') ? [ { x: n, y: 0 }, { x: 0, y: 0 }, { x: n, y: -r }, ] : i.has('right') ? [ { x: s, y: -c }, { x: s, y: -c }, { x: n - s, y: -c }, { x: n - s, y: 0 }, { x: n, y: -r / 2 }, { x: n - s, y: -r }, { x: n - s, y: -r + c }, { x: s, y: -r + c }, { x: s, y: -r + c }, ] : i.has('left') ? [ { x: s, y: 0 }, { x: s, y: -c }, { x: n - s, y: -c }, { x: n - s, y: -r + c }, { x: s, y: -r + c }, { x: s, y: -r }, { x: 0, y: -r / 2 }, ] : i.has('up') ? [ { x: s, y: -c }, { x: s, y: -r + c }, { x: 0, y: -r + c }, { x: n / 2, y: -r }, { x: n, y: -r + c }, { x: n - s, y: -r + c }, { x: n - s, y: -c }, ] : i.has('down') ? [ { x: n / 2, y: 0 }, { x: 0, y: -c }, { x: s, y: -c }, { x: s, y: -r + c }, { x: n - s, y: -r + c }, { x: n - s, y: -c }, { x: n, y: -c }, ] : [{ x: 0, y: 0 }]; }, K = (e) => (e ? ' ' + e : ''), _ = (e, t) => `${t || 'node default'}${K(e.classes)} ${K(e.class)}`, P = async (e, t) => { const { shapeSvg: a, bbox: i } = await M(e, t, _(t, void 0), !0), l = i.width + t.padding, r = i.height + t.padding, s = l + r, n = [ { x: s / 2, y: 0 }, { x: s, y: -s / 2 }, { x: s / 2, y: -s }, { x: 0, y: -s / 2 }, ]; g.info('Question main (Circle)'); const c = I(a, s, s, n); return ( c.attr('style', t.style), m(t, c), (t.intersect = function (o) { return g.warn('Intersect called'), w.polygon(t, n, o); }), a ); }, Ht = (e, t) => { const a = e .insert('g') .attr('class', 'node default') .attr('id', t.domId || t.id), i = 28, l = [ { x: 0, y: i / 2 }, { x: i / 2, y: 0 }, { x: 0, y: -i / 2 }, { x: -i / 2, y: 0 }, ]; return ( a .insert('polygon', ':first-child') .attr( 'points', l .map(function (s) { return s.x + ',' + s.y; }) .join(' ') ) .attr('class', 'state-start') .attr('r', 7) .attr('width', 28) .attr('height', 28), (t.width = 28), (t.height = 28), (t.intersect = function (s) { return w.circle(t, 14, s); }), a ); }, It = async (e, t) => { const { shapeSvg: a, bbox: i } = await M(e, t, _(t, void 0), !0), l = 4, r = i.height + t.padding, s = r / l, n = i.width + 2 * s + t.padding, c = [ { x: s, y: 0 }, { x: n - s, y: 0 }, { x: n, y: -r / 2 }, { x: n - s, y: -r }, { x: s, y: -r }, { x: 0, y: -r / 2 }, ], o = I(a, n, r, c); return ( o.attr('style', t.style), m(t, o), (t.intersect = function (h) { return w.polygon(t, c, h); }), a ); }, Nt = async (e, t) => { const { shapeSvg: a, bbox: i } = await M(e, t, void 0, !0), l = 2, r = i.height + 2 * t.padding, s = r / l, n = i.width + 2 * s + t.padding, c = Rt(t.directions, i, t), o = I(a, n, r, c); return ( o.attr('style', t.style), m(t, o), (t.intersect = function (h) { return w.polygon(t, c, h); }), a ); }, Ot = async (e, t) => { const { shapeSvg: a, bbox: i } = await M(e, t, _(t, void 0), !0), l = i.width + t.padding, r = i.height + t.padding, s = [ { x: -r / 2, y: 0 }, { x: l, y: 0 }, { x: l, y: -r }, { x: -r / 2, y: -r }, { x: 0, y: -r / 2 }, ]; return ( I(a, l, r, s).attr('style', t.style), (t.width = l + r), (t.height = r), (t.intersect = function (c) { return w.polygon(t, s, c); }), a ); }, Wt = async (e, t) => { const { shapeSvg: a, bbox: i } = await M(e, t, _(t), !0), l = i.width + t.padding, r = i.height + t.padding, s = [ { x: (-2 * r) / 6, y: 0 }, { x: l - r / 6, y: 0 }, { x: l + (2 * r) / 6, y: -r }, { x: r / 6, y: -r }, ], n = I(a, l, r, s); return ( n.attr('style', t.style), m(t, n), (t.intersect = function (c) { return w.polygon(t, s, c); }), a ); }, Xt = async (e, t) => { const { shapeSvg: a, bbox: i } = await M(e, t, _(t, void 0), !0), l = i.width + t.padding, r = i.height + t.padding, s = [ { x: (2 * r) / 6, y: 0 }, { x: l + r / 6, y: 0 }, { x: l - (2 * r) / 6, y: -r }, { x: -r / 6, y: -r }, ], n = I(a, l, r, s); return ( n.attr('style', t.style), m(t, n), (t.intersect = function (c) { return w.polygon(t, s, c); }), a ); }, Yt = async (e, t) => { const { shapeSvg: a, bbox: i } = await M(e, t, _(t, void 0), !0), l = i.width + t.padding, r = i.height + t.padding, s = [ { x: (-2 * r) / 6, y: 0 }, { x: l + (2 * r) / 6, y: 0 }, { x: l - r / 6, y: -r }, { x: r / 6, y: -r }, ], n = I(a, l, r, s); return ( n.attr('style', t.style), m(t, n), (t.intersect = function (c) { return w.polygon(t, s, c); }), a ); }, Dt = async (e, t) => { const { shapeSvg: a, bbox: i } = await M(e, t, _(t, void 0), !0), l = i.width + t.padding, r = i.height + t.padding, s = [ { x: r / 6, y: 0 }, { x: l - r / 6, y: 0 }, { x: l + (2 * r) / 6, y: -r }, { x: (-2 * r) / 6, y: -r }, ], n = I(a, l, r, s); return ( n.attr('style', t.style), m(t, n), (t.intersect = function (c) { return w.polygon(t, s, c); }), a ); }, At = async (e, t) => { const { shapeSvg: a, bbox: i } = await M(e, t, _(t, void 0), !0), l = i.width + t.padding, r = i.height + t.padding, s = [ { x: 0, y: 0 }, { x: l + r / 2, y: 0 }, { x: l, y: -r / 2 }, { x: l + r / 2, y: -r }, { x: 0, y: -r }, ], n = I(a, l, r, s); return ( n.attr('style', t.style), m(t, n), (t.intersect = function (c) { return w.polygon(t, s, c); }), a ); }, jt = async (e, t) => { const { shapeSvg: a, bbox: i } = await M(e, t, _(t, void 0), !0), l = i.width + t.padding, r = l / 2, s = r / (2.5 + l / 50), n = i.height + s + t.padding, c = 'M 0,' + s + ' a ' + r + ',' + s + ' 0,0,0 ' + l + ' 0 a ' + r + ',' + s + ' 0,0,0 ' + -l + ' 0 l 0,' + n + ' a ' + r + ',' + s + ' 0,0,0 ' + l + ' 0 l 0,' + -n, o = a .attr('label-offset-y', s) .insert('path', ':first-child') .attr('style', t.style) .attr('d', c) .attr('transform', 'translate(' + -l / 2 + ',' + -(n / 2 + s) + ')'); return ( m(t, o), (t.intersect = function (h) { const y = w.rect(t, h), f = y.x - t.x; if (r != 0 && (Math.abs(f) < t.width / 2 || (Math.abs(f) == t.width / 2 && Math.abs(y.y - t.y) > t.height / 2 - s))) { let p = s * s * (1 - (f * f) / (r * r)); p != 0 && (p = Math.sqrt(p)), (p = s - p), h.y - t.y > 0 && (p = -p), (y.y += p); } return y; }), a ); }, Ut = async (e, t) => { const { shapeSvg: a, bbox: i, halfPadding: l } = await M(e, t, 'node ' + t.classes + ' ' + t.class, !0), r = a.insert('rect', ':first-child'), s = t.positioned ? t.width : i.width + t.padding, n = t.positioned ? t.height : i.height + t.padding, c = t.positioned ? -s / 2 : -i.width / 2 - l, o = t.positioned ? -n / 2 : -i.height / 2 - l; if ( (r .attr('class', 'basic label-container') .attr('style', t.style) .attr('rx', t.rx) .attr('ry', t.ry) .attr('x', c) .attr('y', o) .attr('width', s) .attr('height', n), t.props) ) { const h = new Set(Object.keys(t.props)); t.props.borders && (V(r, t.props.borders, s, n), h.delete('borders')), h.forEach((y) => { g.warn(`Unknown node property ${y}`); }); } return ( m(t, r), (t.intersect = function (h) { return w.rect(t, h); }), a ); }, zt = async (e, t) => { const { shapeSvg: a, bbox: i, halfPadding: l } = await M(e, t, 'node ' + t.classes, !0), r = a.insert('rect', ':first-child'), s = t.positioned ? t.width : i.width + t.padding, n = t.positioned ? t.height : i.height + t.padding, c = t.positioned ? -s / 2 : -i.width / 2 - l, o = t.positioned ? -n / 2 : -i.height / 2 - l; if ( (r .attr('class', 'basic cluster composite label-container') .attr('style', t.style) .attr('rx', t.rx) .attr('ry', t.ry) .attr('x', c) .attr('y', o) .attr('width', s) .attr('height', n), t.props) ) { const h = new Set(Object.keys(t.props)); t.props.borders && (V(r, t.props.borders, s, n), h.delete('borders')), h.forEach((y) => { g.warn(`Unknown node property ${y}`); }); } return ( m(t, r), (t.intersect = function (h) { return w.rect(t, h); }), a ); }, Zt = async (e, t) => { const { shapeSvg: a } = await M(e, t, 'label', !0); g.trace('Classes = ', t.class); const i = a.insert('rect', ':first-child'), l = 0, r = 0; if ((i.attr('width', l).attr('height', r), a.attr('class', 'label edgeLabel'), t.props)) { const s = new Set(Object.keys(t.props)); t.props.borders && (V(i, t.props.borders, l, r), s.delete('borders')), s.forEach((n) => { g.warn(`Unknown node property ${n}`); }); } return ( m(t, i), (t.intersect = function (s) { return w.rect(t, s); }), a ); }; function V(e, t, a, i) { const l = [], r = (n) => { l.push(n, 0); }, s = (n) => { l.push(0, n); }; t.includes('t') ? (g.debug('add top border'), r(a)) : s(a), t.includes('r') ? (g.debug('add right border'), r(i)) : s(i), t.includes('b') ? (g.debug('add bottom border'), r(a)) : s(a), t.includes('l') ? (g.debug('add left border'), r(i)) : s(i), e.attr('stroke-dasharray', l.join(' ')); } const Gt = (e, t) => { let a; t.classes ? (a = 'node ' + t.classes) : (a = 'node default'); const i = e .insert('g') .attr('class', a) .attr('id', t.domId || t.id), l = i.insert('rect', ':first-child'), r = i.insert('line'), s = i.insert('g').attr('class', 'label'), n = t.labelText.flat ? t.labelText.flat() : t.labelText; let c = ''; typeof n == 'object' ? (c = n[0]) : (c = n), g.info('Label text abc79', c, n, typeof n == 'object'); const o = s.node().appendChild(R(c, t.labelStyle, !0, !0)); let h = { width: 0, height: 0 }; if (H(b().flowchart.htmlLabels)) { const k = o.children[0], x = E(o); (h = k.getBoundingClientRect()), x.attr('width', h.width), x.attr('height', h.height); } g.info('Text 2', n); const y = n.slice(1, n.length); let f = o.getBBox(); const p = s.node().appendChild(R(y.join ? y.join('
') : y, t.labelStyle, !0, !0)); if (H(b().flowchart.htmlLabels)) { const k = p.children[0], x = E(p); (h = k.getBoundingClientRect()), x.attr('width', h.width), x.attr('height', h.height); } const d = t.padding / 2; return ( E(p).attr('transform', 'translate( ' + (h.width > f.width ? 0 : (f.width - h.width) / 2) + ', ' + (f.height + d + 5) + ')'), E(o).attr('transform', 'translate( ' + (h.width < f.width ? 0 : -(f.width - h.width) / 2) + ', 0)'), (h = s.node().getBBox()), s.attr('transform', 'translate(' + -h.width / 2 + ', ' + (-h.height / 2 - d + 3) + ')'), l .attr('class', 'outer title-state') .attr('x', -h.width / 2 - d) .attr('y', -h.height / 2 - d) .attr('width', h.width + t.padding) .attr('height', h.height + t.padding), r .attr('class', 'divider') .attr('x1', -h.width / 2 - d) .attr('x2', h.width / 2 + d) .attr('y1', -h.height / 2 - d + f.height + d) .attr('y2', -h.height / 2 - d + f.height + d), m(t, l), (t.intersect = function (k) { return w.rect(t, k); }), i ); }, Ft = async (e, t) => { const { shapeSvg: a, bbox: i } = await M(e, t, _(t, void 0), !0), l = i.height + t.padding, r = i.width + l / 4 + t.padding, s = a .insert('rect', ':first-child') .attr('style', t.style) .attr('rx', l / 2) .attr('ry', l / 2) .attr('x', -r / 2) .attr('y', -l / 2) .attr('width', r) .attr('height', l); return ( m(t, s), (t.intersect = function (n) { return w.rect(t, n); }), a ); }, Qt = async (e, t) => { const { shapeSvg: a, bbox: i, halfPadding: l } = await M(e, t, _(t, void 0), !0), r = a.insert('circle', ':first-child'); return ( r .attr('style', t.style) .attr('rx', t.rx) .attr('ry', t.ry) .attr('r', i.width / 2 + l) .attr('width', i.width + t.padding) .attr('height', i.height + t.padding), g.info('Circle main'), m(t, r), (t.intersect = function (s) { return g.info('Circle intersect', t, i.width / 2 + l, s), w.circle(t, i.width / 2 + l, s); }), a ); }, Vt = async (e, t) => { const { shapeSvg: a, bbox: i, halfPadding: l } = await M(e, t, _(t, void 0), !0), r = 5, s = a.insert('g', ':first-child'), n = s.insert('circle'), c = s.insert('circle'); return ( s.attr('class', t.class), n .attr('style', t.style) .attr('rx', t.rx) .attr('ry', t.ry) .attr('r', i.width / 2 + l + r) .attr('width', i.width + t.padding + r * 2) .attr('height', i.height + t.padding + r * 2), c .attr('style', t.style) .attr('rx', t.rx) .attr('ry', t.ry) .attr('r', i.width / 2 + l) .attr('width', i.width + t.padding) .attr('height', i.height + t.padding), g.info('DoubleCircle main'), m(t, n), (t.intersect = function (o) { return g.info('DoubleCircle intersect', t, i.width / 2 + l + r, o), w.circle(t, i.width / 2 + l + r, o); }), a ); }, qt = async (e, t) => { const { shapeSvg: a, bbox: i } = await M(e, t, _(t, void 0), !0), l = i.width + t.padding, r = i.height + t.padding, s = [ { x: 0, y: 0 }, { x: l, y: 0 }, { x: l, y: -r }, { x: 0, y: -r }, { x: 0, y: 0 }, { x: -8, y: 0 }, { x: l + 8, y: 0 }, { x: l + 8, y: -r }, { x: -8, y: -r }, { x: -8, y: 0 }, ], n = I(a, l, r, s); return ( n.attr('style', t.style), m(t, n), (t.intersect = function (c) { return w.polygon(t, s, c); }), a ); }, Jt = (e, t) => { const a = e .insert('g') .attr('class', 'node default') .attr('id', t.domId || t.id), i = a.insert('circle', ':first-child'); return ( i.attr('class', 'state-start').attr('r', 7).attr('width', 14).attr('height', 14), m(t, i), (t.intersect = function (l) { return w.circle(t, 7, l); }), a ); }, tt = (e, t, a) => { const i = e .insert('g') .attr('class', 'node default') .attr('id', t.domId || t.id); let l = 70, r = 10; a === 'LR' && ((l = 10), (r = 70)); const s = i .append('rect') .attr('x', (-1 * l) / 2) .attr('y', (-1 * r) / 2) .attr('width', l) .attr('height', r) .attr('class', 'fork-join'); return ( m(t, s), (t.height = t.height + t.padding / 2), (t.width = t.width + t.padding / 2), (t.intersect = function (n) { return w.rect(t, n); }), i ); }, Kt = (e, t) => { const a = e .insert('g') .attr('class', 'node default') .attr('id', t.domId || t.id), i = a.insert('circle', ':first-child'), l = a.insert('circle', ':first-child'); return ( l.attr('class', 'state-start').attr('r', 7).attr('width', 14).attr('height', 14), i.attr('class', 'state-end').attr('r', 5).attr('width', 10).attr('height', 10), m(t, l), (t.intersect = function (r) { return w.circle(t, 7, r); }), a ); }, Pt = (e, t) => { const a = t.padding / 2, i = 4, l = 8; let r; t.classes ? (r = 'node ' + t.classes) : (r = 'node default'); const s = e .insert('g') .attr('class', r) .attr('id', t.domId || t.id), n = s.insert('rect', ':first-child'), c = s.insert('line'), o = s.insert('line'); let h = 0, y = i; const f = s.insert('g').attr('class', 'label'); let p = 0; const d = t.classData.annotations && t.classData.annotations[0], k = t.classData.annotations[0] ? '«' + t.classData.annotations[0] + '»' : '', x = f.node().appendChild(R(k, t.labelStyle, !0, !0)); let u = x.getBBox(); if (H(b().flowchart.htmlLabels)) { const v = x.children[0], L = E(x); (u = v.getBoundingClientRect()), L.attr('width', u.width), L.attr('height', u.height); } t.classData.annotations[0] && ((y += u.height + i), (h += u.width)); let S = t.classData.label; t.classData.type !== void 0 && t.classData.type !== '' && (b().flowchart.htmlLabels ? (S += '<' + t.classData.type + '>') : (S += '<' + t.classData.type + '>')); const B = f.node().appendChild(R(S, t.labelStyle, !0, !0)); E(B).attr('class', 'classTitle'); let C = B.getBBox(); if (H(b().flowchart.htmlLabels)) { const v = B.children[0], L = E(B); (C = v.getBoundingClientRect()), L.attr('width', C.width), L.attr('height', C.height); } (y += C.height + i), C.width > h && (h = C.width); const W = []; t.classData.members.forEach((v) => { const L = v.getDisplayDetails(); let X = L.displayText; b().flowchart.htmlLabels && (X = X.replace(//g, '>')); const N = f.node().appendChild(R(X, L.cssStyle ? L.cssStyle : t.labelStyle, !0, !0)); let $ = N.getBBox(); if (H(b().flowchart.htmlLabels)) { const F = N.children[0], A = E(N); ($ = F.getBoundingClientRect()), A.attr('width', $.width), A.attr('height', $.height); } $.width > h && (h = $.width), (y += $.height + i), W.push(N); }), (y += l); const D = []; if ( (t.classData.methods.forEach((v) => { const L = v.getDisplayDetails(); let X = L.displayText; b().flowchart.htmlLabels && (X = X.replace(//g, '>')); const N = f.node().appendChild(R(X, L.cssStyle ? L.cssStyle : t.labelStyle, !0, !0)); let $ = N.getBBox(); if (H(b().flowchart.htmlLabels)) { const F = N.children[0], A = E(N); ($ = F.getBoundingClientRect()), A.attr('width', $.width), A.attr('height', $.height); } $.width > h && (h = $.width), (y += $.height + i), D.push(N); }), (y += l), d) ) { let v = (h - u.width) / 2; E(x).attr('transform', 'translate( ' + ((-1 * h) / 2 + v) + ', ' + (-1 * y) / 2 + ')'), (p = u.height + i); } let nt = (h - C.width) / 2; return ( E(B).attr('transform', 'translate( ' + ((-1 * h) / 2 + nt) + ', ' + ((-1 * y) / 2 + p) + ')'), (p += C.height + i), c .attr('class', 'divider') .attr('x1', -h / 2 - a) .attr('x2', h / 2 + a) .attr('y1', -y / 2 - a + l + p) .attr('y2', -y / 2 - a + l + p), (p += l), W.forEach((v) => { E(v).attr('transform', 'translate( ' + -h / 2 + ', ' + ((-1 * y) / 2 + p + l / 2) + ')'); const L = v == null ? void 0 : v.getBBox(); p += ((L == null ? void 0 : L.height) ?? 0) + i; }), (p += l), o .attr('class', 'divider') .attr('x1', -h / 2 - a) .attr('x2', h / 2 + a) .attr('y1', -y / 2 - a + l + p) .attr('y2', -y / 2 - a + l + p), (p += l), D.forEach((v) => { E(v).attr('transform', 'translate( ' + -h / 2 + ', ' + ((-1 * y) / 2 + p) + ')'); const L = v == null ? void 0 : v.getBBox(); p += ((L == null ? void 0 : L.height) ?? 0) + i; }), n .attr('style', t.style) .attr('class', 'outer title-state') .attr('x', -h / 2 - a) .attr('y', -(y / 2) - a) .attr('width', h + t.padding) .attr('height', y + t.padding), m(t, n), (t.intersect = function (v) { return w.rect(t, v); }), s ); }, rt = { rhombus: P, composite: zt, question: P, rect: Ut, labelRect: Zt, rectWithTitle: Gt, choice: Ht, circle: Qt, doublecircle: Vt, stadium: Ft, hexagon: It, block_arrow: Nt, rect_left_inv_arrow: Ot, lean_right: Wt, lean_left: Xt, trapezoid: Yt, inv_trapezoid: Dt, rect_right_inv_arrow: At, cylinder: jt, start: Jt, end: Kt, note: $t, subroutine: qt, fork: tt, join: tt, class_box: Pt, }; let Y = {}; const or = async (e, t, a) => { let i, l; if (t.link) { let r; b().securityLevel === 'sandbox' ? (r = '_top') : t.linkTarget && (r = t.linkTarget || '_blank'), (i = e.insert('svg:a').attr('xlink:href', t.link).attr('target', r)), (l = await rt[t.shape](i, t, a)); } else (l = await rt[t.shape](e, t, a)), (i = l); return ( t.tooltip && l.attr('title', t.tooltip), t.class && l.attr('class', 'node default ' + t.class), i.attr('data-node', 'true'), i.attr('data-id', t.id), (Y[t.id] = i), t.haveCallback && Y[t.id].attr('class', Y[t.id].attr('class') + ' clickable'), i ); }, yr = (e, t) => { Y[t.id] = e; }, pr = () => { Y = {}; }, fr = (e) => { const t = Y[e.id]; g.trace('Transforming node', e.diff, e, 'translate(' + (e.x - e.width / 2 - 5) + ', ' + e.width / 2 + ')'); const a = 8, i = e.diff || 0; return ( e.clusterNode ? t.attr('transform', 'translate(' + (e.x + i - e.width / 2) + ', ' + (e.y - e.height / 2 - a) + ')') : t.attr('transform', 'translate(' + e.x + ', ' + e.y + ')'), i ); }, tr = ({ flowchart: e }) => { var t, a; const i = ((t = e == null ? void 0 : e.subGraphTitleMargin) == null ? void 0 : t.top) ?? 0, l = ((a = e == null ? void 0 : e.subGraphTitleMargin) == null ? void 0 : a.bottom) ?? 0, r = i + l; return { subGraphTitleTopMargin: i, subGraphTitleBottomMargin: l, subGraphTitleTotalMargin: r }; }, O = { aggregation: 18, extension: 18, composition: 18, dependency: 6, lollipop: 13.5, arrow_point: 5.3 }; function U(e, t) { if (e === void 0 || t === void 0) return { angle: 0, deltaX: 0, deltaY: 0 }; (e = Z(e)), (t = Z(t)); const [a, i] = [e.x, e.y], [l, r] = [t.x, t.y], s = l - a, n = r - i; return { angle: Math.atan(n / s), deltaX: s, deltaY: n }; } const Z = (e) => (Array.isArray(e) ? { x: e[0], y: e[1] } : e), rr = (e) => ({ x: function (t, a, i) { let l = 0; if (a === 0 && Object.hasOwn(O, e.arrowTypeStart)) { const { angle: r, deltaX: s } = U(i[0], i[1]); l = O[e.arrowTypeStart] * Math.cos(r) * (s >= 0 ? 1 : -1); } else if (a === i.length - 1 && Object.hasOwn(O, e.arrowTypeEnd)) { const { angle: r, deltaX: s } = U(i[i.length - 1], i[i.length - 2]); l = O[e.arrowTypeEnd] * Math.cos(r) * (s >= 0 ? 1 : -1); } return Z(t).x + l; }, y: function (t, a, i) { let l = 0; if (a === 0 && Object.hasOwn(O, e.arrowTypeStart)) { const { angle: r, deltaY: s } = U(i[0], i[1]); l = O[e.arrowTypeStart] * Math.abs(Math.sin(r)) * (s >= 0 ? 1 : -1); } else if (a === i.length - 1 && Object.hasOwn(O, e.arrowTypeEnd)) { const { angle: r, deltaY: s } = U(i[i.length - 1], i[i.length - 2]); l = O[e.arrowTypeEnd] * Math.abs(Math.sin(r)) * (s >= 0 ? 1 : -1); } return Z(t).y + l; }, }), ar = (e, t, a, i, l) => { t.arrowTypeStart && at(e, 'start', t.arrowTypeStart, a, i, l), t.arrowTypeEnd && at(e, 'end', t.arrowTypeEnd, a, i, l); }, er = { arrow_cross: 'cross', arrow_point: 'point', arrow_barb: 'barb', arrow_circle: 'circle', aggregation: 'aggregation', extension: 'extension', composition: 'composition', dependency: 'dependency', lollipop: 'lollipop', }, at = (e, t, a, i, l, r) => { const s = er[a]; if (!s) { g.warn(`Unknown arrow type: ${a}`); return; } const n = t === 'start' ? 'Start' : 'End'; e.attr(`marker-${t}`, `url(${i}#${l}_${r}-${s}${n})`); }; let G = {}, T = {}; const xr = () => { (G = {}), (T = {}); }, dr = (e, t) => { const a = H(b().flowchart.htmlLabels), i = t.labelType === 'markdown' ? st(e, t.label, { style: t.labelStyle, useHtmlLabels: a, addSvgBackground: !0 }) : R(t.label, t.labelStyle), l = e.insert('g').attr('class', 'edgeLabel'), r = l.insert('g').attr('class', 'label'); r.node().appendChild(i); let s = i.getBBox(); if (a) { const c = i.children[0], o = E(i); (s = c.getBoundingClientRect()), o.attr('width', s.width), o.attr('height', s.height); } r.attr('transform', 'translate(' + -s.width / 2 + ', ' + -s.height / 2 + ')'), (G[t.id] = l), (t.width = s.width), (t.height = s.height); let n; if (t.startLabelLeft) { const c = R(t.startLabelLeft, t.labelStyle), o = e.insert('g').attr('class', 'edgeTerminals'), h = o.insert('g').attr('class', 'inner'); n = h.node().appendChild(c); const y = c.getBBox(); h.attr('transform', 'translate(' + -y.width / 2 + ', ' + -y.height / 2 + ')'), T[t.id] || (T[t.id] = {}), (T[t.id].startLeft = o), z(n, t.startLabelLeft); } if (t.startLabelRight) { const c = R(t.startLabelRight, t.labelStyle), o = e.insert('g').attr('class', 'edgeTerminals'), h = o.insert('g').attr('class', 'inner'); (n = o.node().appendChild(c)), h.node().appendChild(c); const y = c.getBBox(); h.attr('transform', 'translate(' + -y.width / 2 + ', ' + -y.height / 2 + ')'), T[t.id] || (T[t.id] = {}), (T[t.id].startRight = o), z(n, t.startLabelRight); } if (t.endLabelLeft) { const c = R(t.endLabelLeft, t.labelStyle), o = e.insert('g').attr('class', 'edgeTerminals'), h = o.insert('g').attr('class', 'inner'); n = h.node().appendChild(c); const y = c.getBBox(); h.attr('transform', 'translate(' + -y.width / 2 + ', ' + -y.height / 2 + ')'), o.node().appendChild(c), T[t.id] || (T[t.id] = {}), (T[t.id].endLeft = o), z(n, t.endLabelLeft); } if (t.endLabelRight) { const c = R(t.endLabelRight, t.labelStyle), o = e.insert('g').attr('class', 'edgeTerminals'), h = o.insert('g').attr('class', 'inner'); n = h.node().appendChild(c); const y = c.getBBox(); h.attr('transform', 'translate(' + -y.width / 2 + ', ' + -y.height / 2 + ')'), o.node().appendChild(c), T[t.id] || (T[t.id] = {}), (T[t.id].endRight = o), z(n, t.endLabelRight); } return i; }; function z(e, t) { b().flowchart.htmlLabels && e && ((e.style.width = t.length * 9 + 'px'), (e.style.height = '12px')); } const gr = (e, t) => { g.debug('Moving label abc88 ', e.id, e.label, G[e.id], t); let a = t.updatedPath ? t.updatedPath : t.originalPath; const i = b(), { subGraphTitleTotalMargin: l } = tr(i); if (e.label) { const r = G[e.id]; let s = e.x, n = e.y; if (a) { const c = j.calcLabelPosition(a); g.debug('Moving label ' + e.label + ' from (', s, ',', n, ') to (', c.x, ',', c.y, ') abc88'), t.updatedPath && ((s = c.x), (n = c.y)); } r.attr('transform', `translate(${s}, ${n + l / 2})`); } if (e.startLabelLeft) { const r = T[e.id].startLeft; let s = e.x, n = e.y; if (a) { const c = j.calcTerminalLabelPosition(e.arrowTypeStart ? 10 : 0, 'start_left', a); (s = c.x), (n = c.y); } r.attr('transform', `translate(${s}, ${n})`); } if (e.startLabelRight) { const r = T[e.id].startRight; let s = e.x, n = e.y; if (a) { const c = j.calcTerminalLabelPosition(e.arrowTypeStart ? 10 : 0, 'start_right', a); (s = c.x), (n = c.y); } r.attr('transform', `translate(${s}, ${n})`); } if (e.endLabelLeft) { const r = T[e.id].endLeft; let s = e.x, n = e.y; if (a) { const c = j.calcTerminalLabelPosition(e.arrowTypeEnd ? 10 : 0, 'end_left', a); (s = c.x), (n = c.y); } r.attr('transform', `translate(${s}, ${n})`); } if (e.endLabelRight) { const r = T[e.id].endRight; let s = e.x, n = e.y; if (a) { const c = j.calcTerminalLabelPosition(e.arrowTypeEnd ? 10 : 0, 'end_right', a); (s = c.x), (n = c.y); } r.attr('transform', `translate(${s}, ${n})`); } }, sr = (e, t) => { const a = e.x, i = e.y, l = Math.abs(t.x - a), r = Math.abs(t.y - i), s = e.width / 2, n = e.height / 2; return l >= s || r >= n; }, ir = (e, t, a) => { g.debug(`intersection calc abc89: outsidePoint: ${JSON.stringify(t)} insidePoint : ${JSON.stringify(a)} node : x:${e.x} y:${e.y} w:${e.width} h:${e.height}`); const i = e.x, l = e.y, r = Math.abs(i - a.x), s = e.width / 2; let n = a.x < t.x ? s - r : s + r; const c = e.height / 2, o = Math.abs(t.y - a.y), h = Math.abs(t.x - a.x); if (Math.abs(l - t.y) * s > Math.abs(i - t.x) * c) { let y = a.y < t.y ? t.y - c - l : l - c - t.y; n = (h * y) / o; const f = { x: a.x < t.x ? a.x + n : a.x - h + n, y: a.y < t.y ? a.y + o - y : a.y - o + y }; return ( n === 0 && ((f.x = t.x), (f.y = t.y)), h === 0 && (f.x = t.x), o === 0 && (f.y = t.y), g.debug(`abc89 topp/bott calc, Q ${o}, q ${y}, R ${h}, r ${n}`, f), f ); } else { a.x < t.x ? (n = t.x - s - i) : (n = i - s - t.x); let y = (o * n) / h, f = a.x < t.x ? a.x + h - n : a.x - h + n, p = a.y < t.y ? a.y + y : a.y - y; return ( g.debug(`sides calc abc89, Q ${o}, q ${y}, R ${h}, r ${n}`, { _x: f, _y: p }), n === 0 && ((f = t.x), (p = t.y)), h === 0 && (f = t.x), o === 0 && (p = t.y), { x: f, y: p } ); } }, et = (e, t) => { g.debug('abc88 cutPathAtIntersect', e, t); let a = [], i = e[0], l = !1; return ( e.forEach((r) => { if (!sr(t, r) && !l) { const s = ir(t, i, r); let n = !1; a.forEach((c) => { n = n || (c.x === s.x && c.y === s.y); }), a.some((c) => c.x === s.x && c.y === s.y) || a.push(s), (l = !0); } else (i = r), l || a.push(r); }), a ); }, ur = function (e, t, a, i, l, r, s) { let n = a.points; g.debug('abc88 InsertEdge: edge=', a, 'e=', t); let c = !1; const o = r.node(t.v); var h = r.node(t.w); h != null && h.intersect && o != null && o.intersect && ((n = n.slice(1, a.points.length - 1)), n.unshift(o.intersect(n[0])), n.push(h.intersect(n[n.length - 1]))), a.toCluster && (g.debug('to cluster abc88', i[a.toCluster]), (n = et(a.points, i[a.toCluster].node)), (c = !0)), a.fromCluster && (g.debug('from cluster abc88', i[a.fromCluster]), (n = et(n.reverse(), i[a.fromCluster].node).reverse()), (c = !0)); const y = n.filter((C) => !Number.isNaN(C.y)); let f = lt; a.curve && (l === 'graph' || l === 'flowchart') && (f = a.curve); const { x: p, y: d } = rr(a), k = ct().x(p).y(d).curve(f); let x; switch (a.thickness) { case 'normal': x = 'edge-thickness-normal'; break; case 'thick': x = 'edge-thickness-thick'; break; case 'invisible': x = 'edge-thickness-thick'; break; default: x = ''; } switch (a.pattern) { case 'solid': x += ' edge-pattern-solid'; break; case 'dotted': x += ' edge-pattern-dotted'; break; case 'dashed': x += ' edge-pattern-dashed'; break; } const u = e .append('path') .attr('d', k(y)) .attr('id', a.id) .attr('class', ' ' + x + (a.classes ? ' ' + a.classes : '')) .attr('style', a.style); let S = ''; (b().flowchart.arrowMarkerAbsolute || b().state.arrowMarkerAbsolute) && ((S = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search), (S = S.replace(/\(/g, '\\(')), (S = S.replace(/\)/g, '\\)'))), ar(u, a, S, s, l); let B = {}; return c && (B.updatedPath = n), (B.originalPath = a.points), B; }; export { or as a, dr as b, ur as c, gr as d, pr as e, xr as f, tr as g, R as h, hr as i, Et as j, rr as k, M as l, ar as m, fr as p, yr as s, m as u, };