import { p as P, d as N, s as W } from './styles-0784dbeb-d32e3ad6.js'; import { c as t, h as H, l as b, i as R, j as T, D as v, y as U } from './index-0e3b96e2.js'; import { G as C } from './graph-39d39682.js'; import { l as F } from './layout-004a3162.js'; import { l as $ } from './line-0981dc5a.js'; import './index-9c042f98.js'; import './_plugin-vue_export-helper-c27b6911.js'; import './array-9f3ba611.js'; import './path-53f90ab3.js'; const O = (e) => e .append('circle') .attr('class', 'start-state') .attr('r', t().state.sizeUnit) .attr('cx', t().state.padding + t().state.sizeUnit) .attr('cy', t().state.padding + t().state.sizeUnit), X = (e) => e .append('line') .style('stroke', 'grey') .style('stroke-dasharray', '3') .attr('x1', t().state.textHeight) .attr('class', 'divider') .attr('x2', t().state.textHeight * 2) .attr('y1', 0) .attr('y2', 0), J = (e, i) => { const o = e .append('text') .attr('x', 2 * t().state.padding) .attr('y', t().state.textHeight + 2 * t().state.padding) .attr('font-size', t().state.fontSize) .attr('class', 'state-title') .text(i.id), c = o.node().getBBox(); return ( e .insert('rect', ':first-child') .attr('x', t().state.padding) .attr('y', t().state.padding) .attr('width', c.width + 2 * t().state.padding) .attr('height', c.height + 2 * t().state.padding) .attr('rx', t().state.radius), o ); }, Y = (e, i) => { const o = function (l, m, w) { const E = l .append('tspan') .attr('x', 2 * t().state.padding) .text(m); w || E.attr('dy', t().state.textHeight); }, s = e .append('text') .attr('x', 2 * t().state.padding) .attr('y', t().state.textHeight + 1.3 * t().state.padding) .attr('font-size', t().state.fontSize) .attr('class', 'state-title') .text(i.descriptions[0]) .node() .getBBox(), g = s.height, p = e .append('text') .attr('x', t().state.padding) .attr('y', g + t().state.padding * 0.4 + t().state.dividerMargin + t().state.textHeight) .attr('class', 'state-description'); let a = !0, r = !0; i.descriptions.forEach(function (l) { a || (o(p, l, r), (r = !1)), (a = !1); }); const y = e .append('line') .attr('x1', t().state.padding) .attr('y1', t().state.padding + g + t().state.dividerMargin / 2) .attr('y2', t().state.padding + g + t().state.dividerMargin / 2) .attr('class', 'descr-divider'), x = p.node().getBBox(), d = Math.max(x.width, s.width); return ( y.attr('x2', d + 3 * t().state.padding), e .insert('rect', ':first-child') .attr('x', t().state.padding) .attr('y', t().state.padding) .attr('width', d + 2 * t().state.padding) .attr('height', x.height + g + 2 * t().state.padding) .attr('rx', t().state.radius), e ); }, I = (e, i, o) => { const c = t().state.padding, s = 2 * t().state.padding, g = e.node().getBBox(), p = g.width, a = g.x, r = e.append('text').attr('x', 0).attr('y', t().state.titleShift).attr('font-size', t().state.fontSize).attr('class', 'state-title').text(i.id), x = r.node().getBBox().width + s; let d = Math.max(x, p); d === p && (d = d + s); let l; const m = e.node().getBBox(); i.doc, (l = a - c), x > p && (l = (p - d) / 2 + c), Math.abs(a - m.x) < c && x > p && (l = a - (x - p) / 2); const w = 1 - t().state.textHeight; return ( e .insert('rect', ':first-child') .attr('x', l) .attr('y', w) .attr('class', o ? 'alt-composit' : 'composit') .attr('width', d) .attr('height', m.height + t().state.textHeight + t().state.titleShift + 1) .attr('rx', '0'), r.attr('x', l + c), x <= p && r.attr('x', a + (d - s) / 2 - x / 2 + c), e .insert('rect', ':first-child') .attr('x', l) .attr('y', t().state.titleShift - t().state.textHeight - t().state.padding) .attr('width', d) .attr('height', t().state.textHeight * 3) .attr('rx', t().state.radius), e .insert('rect', ':first-child') .attr('x', l) .attr('y', t().state.titleShift - t().state.textHeight - t().state.padding) .attr('width', d) .attr('height', m.height + 3 + 2 * t().state.textHeight) .attr('rx', t().state.radius), e ); }, _ = (e) => ( e .append('circle') .attr('class', 'end-state-outer') .attr('r', t().state.sizeUnit + t().state.miniPadding) .attr('cx', t().state.padding + t().state.sizeUnit + t().state.miniPadding) .attr('cy', t().state.padding + t().state.sizeUnit + t().state.miniPadding), e .append('circle') .attr('class', 'end-state-inner') .attr('r', t().state.sizeUnit) .attr('cx', t().state.padding + t().state.sizeUnit + 2) .attr('cy', t().state.padding + t().state.sizeUnit + 2) ), q = (e, i) => { let o = t().state.forkWidth, c = t().state.forkHeight; if (i.parentId) { let s = o; (o = c), (c = s); } return e .append('rect') .style('stroke', 'black') .style('fill', 'black') .attr('width', o) .attr('height', c) .attr('x', t().state.padding) .attr('y', t().state.padding); }, Z = (e, i, o, c) => { let s = 0; const g = c.append('text'); g.style('text-anchor', 'start'), g.attr('class', 'noteText'); let p = e.replace(/\r\n/g, '
'); p = p.replace(/\n/g, '
'); const a = p.split(T.lineBreakRegex); let r = 1.25 * t().state.noteMargin; for (const y of a) { const x = y.trim(); if (x.length > 0) { const d = g.append('tspan'); if ((d.text(x), r === 0)) { const l = d.node().getBBox(); r += l.height; } (s += r), d.attr('x', i + t().state.noteMargin), d.attr('y', o + s + 1.25 * t().state.noteMargin); } } return { textWidth: g.node().getBBox().width, textHeight: s }; }, j = (e, i) => { i.attr('class', 'state-note'); const o = i.append('rect').attr('x', 0).attr('y', t().state.padding), c = i.append('g'), { textWidth: s, textHeight: g } = Z(e, 0, 0, c); return o.attr('height', g + 2 * t().state.noteMargin), o.attr('width', s + t().state.noteMargin * 2), o; }, L = function (e, i) { const o = i.id, c = { id: o, label: i.id, width: 0, height: 0 }, s = e.append('g').attr('id', o).attr('class', 'stateGroup'); i.type === 'start' && O(s), i.type === 'end' && _(s), (i.type === 'fork' || i.type === 'join') && q(s, i), i.type === 'note' && j(i.note.text, s), i.type === 'divider' && X(s), i.type === 'default' && i.descriptions.length === 0 && J(s, i), i.type === 'default' && i.descriptions.length > 0 && Y(s, i); const g = s.node().getBBox(); return (c.width = g.width + 2 * t().state.padding), (c.height = g.height + 2 * t().state.padding), c; }; let G = 0; const D = function (e, i, o) { const c = function (r) { switch (r) { case N.relationType.AGGREGATION: return 'aggregation'; case N.relationType.EXTENSION: return 'extension'; case N.relationType.COMPOSITION: return 'composition'; case N.relationType.DEPENDENCY: return 'dependency'; } }; i.points = i.points.filter((r) => !Number.isNaN(r.y)); const s = i.points, g = $() .x(function (r) { return r.x; }) .y(function (r) { return r.y; }) .curve(v), p = e .append('path') .attr('d', g(s)) .attr('id', 'edge' + G) .attr('class', 'transition'); let a = ''; if ( (t().state.arrowMarkerAbsolute && ((a = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search), (a = a.replace(/\(/g, '\\(')), (a = a.replace(/\)/g, '\\)'))), p.attr('marker-end', 'url(' + a + '#' + c(N.relationType.DEPENDENCY) + 'End)'), o.title !== void 0) ) { const r = e.append('g').attr('class', 'stateLabel'), { x: y, y: x } = U.calcLabelPosition(i.points), d = T.getRows(o.title); let l = 0; const m = []; let w = 0, E = 0; for (let u = 0; u <= d.length; u++) { const h = r .append('text') .attr('text-anchor', 'middle') .text(d[u]) .attr('x', y) .attr('y', x + l), f = h.node().getBBox(); (w = Math.max(w, f.width)), (E = Math.min(E, f.x)), b.info(f.x, y, x + l), l === 0 && ((l = h.node().getBBox().height), b.info('Title height', l, x)), m.push(h); } let k = l * d.length; if (d.length > 1) { const u = (d.length - 1) * l * 0.5; m.forEach((h, f) => h.attr('y', x + f * l - u)), (k = l * d.length); } const n = r.node().getBBox(); r .insert('rect', ':first-child') .attr('class', 'box') .attr('x', y - w / 2 - t().state.padding / 2) .attr('y', x - k / 2 - t().state.padding / 2 - 3.5) .attr('width', w + t().state.padding) .attr('height', k + t().state.padding), b.info(n); } G++; }; let B; const z = {}, K = function () {}, Q = function (e) { e.append('defs') .append('marker') .attr('id', 'dependencyEnd') .attr('refX', 19) .attr('refY', 7) .attr('markerWidth', 20) .attr('markerHeight', 28) .attr('orient', 'auto') .append('path') .attr('d', 'M 19,7 L9,13 L14,7 L9,1 Z'); }, V = function (e, i, o, c) { B = t().state; const s = t().securityLevel; let g; s === 'sandbox' && (g = H('#i' + i)); const p = s === 'sandbox' ? H(g.nodes()[0].contentDocument.body) : H('body'), a = s === 'sandbox' ? g.nodes()[0].contentDocument : document; b.debug('Rendering diagram ' + e); const r = p.select(`[id='${i}']`); Q(r); const y = c.db.getRootDoc(); A(y, r, void 0, !1, p, a, c); const x = B.padding, d = r.node().getBBox(), l = d.width + x * 2, m = d.height + x * 2, w = l * 1.75; R(r, m, w, B.useMaxWidth), r.attr('viewBox', `${d.x - B.padding} ${d.y - B.padding} ` + l + ' ' + m); }, tt = (e) => (e ? e.length * B.fontSizeFactor : 1), A = (e, i, o, c, s, g, p) => { const a = new C({ compound: !0, multigraph: !0 }); let r, y = !0; for (r = 0; r < e.length; r++) if (e[r].stmt === 'relation') { y = !1; break; } o ? a.setGraph({ rankdir: 'LR', multigraph: !0, compound: !0, ranker: 'tight-tree', ranksep: y ? 1 : B.edgeLengthFactor, nodeSep: y ? 1 : 50, isMultiGraph: !0, }) : a.setGraph({ rankdir: 'TB', multigraph: !0, compound: !0, ranksep: y ? 1 : B.edgeLengthFactor, nodeSep: y ? 1 : 50, ranker: 'tight-tree', isMultiGraph: !0, }), a.setDefaultEdgeLabel(function () { return {}; }), p.db.extract(e); const x = p.db.getStates(), d = p.db.getRelations(), l = Object.keys(x); for (const n of l) { const u = x[n]; o && (u.parentId = o); let h; if (u.doc) { let f = i.append('g').attr('id', u.id).attr('class', 'stateGroup'); h = A(u.doc, f, u.id, !c, s, g, p); { f = I(f, u, c); let S = f.node().getBBox(); (h.width = S.width), (h.height = S.height + B.padding / 2), (z[u.id] = { y: B.compositTitleSize }); } } else h = L(i, u); if (u.note) { const f = { descriptions: [], id: u.id + '-note', note: u.note, type: 'note' }, S = L(i, f); u.note.position === 'left of' ? (a.setNode(h.id + '-note', S), a.setNode(h.id, h)) : (a.setNode(h.id, h), a.setNode(h.id + '-note', S)), a.setParent(h.id, h.id + '-group'), a.setParent(h.id + '-note', h.id + '-group'); } else a.setNode(h.id, h); } b.debug('Count=', a.nodeCount(), a); let m = 0; d.forEach(function (n) { m++, b.debug('Setting edge', n), a.setEdge(n.id1, n.id2, { relation: n, width: tt(n.title), height: B.labelHeight * T.getRows(n.title).length, labelpos: 'c' }, 'id' + m); }), F(a), b.debug('Graph after layout', a.nodes()); const w = i.node(); a.nodes().forEach(function (n) { n !== void 0 && a.node(n) !== void 0 ? (b.warn('Node ' + n + ': ' + JSON.stringify(a.node(n))), s .select('#' + w.id + ' #' + n) .attr( 'transform', 'translate(' + (a.node(n).x - a.node(n).width / 2) + ',' + (a.node(n).y + (z[n] ? z[n].y : 0) - a.node(n).height / 2) + ' )' ), s.select('#' + w.id + ' #' + n).attr('data-x-shift', a.node(n).x - a.node(n).width / 2), g.querySelectorAll('#' + w.id + ' #' + n + ' .divider').forEach((h) => { const f = h.parentElement; let S = 0, M = 0; f && (f.parentElement && (S = f.parentElement.getBBox().width), (M = parseInt(f.getAttribute('data-x-shift'), 10)), Number.isNaN(M) && (M = 0)), h.setAttribute('x1', 0 - M + 8), h.setAttribute('x2', S - M - 8); })) : b.debug('No Node ' + n + ': ' + JSON.stringify(a.node(n))); }); let E = w.getBBox(); a.edges().forEach(function (n) { n !== void 0 && a.edge(n) !== void 0 && (b.debug('Edge ' + n.v + ' -> ' + n.w + ': ' + JSON.stringify(a.edge(n))), D(i, a.edge(n), a.edge(n).relation)); }), (E = w.getBBox()); const k = { id: o || 'root', label: o || 'root', width: 0, height: 0 }; return (k.width = E.width + 2 * B.padding), (k.height = E.height + 2 * B.padding), b.debug('Doc rendered', k, a), k; }, et = { setConf: K, draw: V }, gt = { parser: P, db: N, renderer: et, styles: W, init: (e) => { e.state || (e.state = {}), (e.state.arrowMarkerAbsolute = e.arrowMarkerAbsolute), N.clear(); }, }; export { gt as diagram };