UNPKG

ranui

Version:

A framework-agnostic Web Components UI library built on native custom elements, with TypeScript types, light/dark theming, SSR and PWA support.

755 lines (750 loc) 37.4 kB
import { n as de } from "./mermaid-parser.core-uIDZYuBu.js"; import { n as l } from "./chunk-Y2CYZVJY-0JxdZxki.js"; import { m as w, p as le } from "./src-DtRLxcYO.js"; import { H as he, K as $e, U as fe, Y as ge, a as ue, b as J, f as ye, s as B, v as xe, w as me, x as D, y as pe } from "./chunk-WYO6CB5R-DDHkKowO.js"; import { g as be, i as we, m as ke } from "./chunk-ICXQ74PX-DR8rL-xF.js"; import { t as Ce } from "./chunk-JWPE2WC7-CGEmUMMZ.js"; import { t as ve } from "./chunk-2Q5K7J3B-DlFVJRAn.js"; var m = { NORMAL: 0, REVERSE: 1, HIGHLIGHT: 2, MERGE: 3, CHERRY_PICK: 4 }, Ee = ye.gitGraph, S = /* @__PURE__ */ l(() => we({ ...Ee, ...J().gitGraph }), "getConfig"), d = new ve(() => { const e = S(), r = e.mainBranchName, t = e.mainBranchOrder; return { mainBranchName: r, commits: /* @__PURE__ */ new Map(), head: null, branchConfig: /* @__PURE__ */ new Map([[r, { name: r, order: t }]]), branches: /* @__PURE__ */ new Map([[r, null]]), currBranch: r, direction: "LR", seq: 0, options: {} }; }); function j() { return ke({ length: 7 }); } l(j, "getID"); function re(e, r) { const t = /* @__PURE__ */ Object.create(null); return e.reduce((s, o) => { const c = r(o); return t[c] || (t[c] = !0, s.push(o)), s; }, []); } l(re, "uniqBy"); var Be = /* @__PURE__ */ l(function(e) { d.records.direction = e; }, "setDirection"), Te = /* @__PURE__ */ l(function(e) { w.debug("options str", e), e = e?.trim(), e = e || "{}"; try { d.records.options = JSON.parse(e); } catch (r) { w.error("error while parsing gitGraph options", r.message); } }, "setOptions"), Le = /* @__PURE__ */ l(function() { return d.records.options; }, "getOptions"), Me = /* @__PURE__ */ l(function(e) { let r = e.msg, t = e.id; const s = e.type; let o = e.tags; w.info("commit", r, t, s, o), w.debug("Entering commit:", r, t, s, o); const c = S(); t = B.sanitizeText(t, c), r = B.sanitizeText(r, c), o = o?.map((n) => B.sanitizeText(n, c)); const a = { id: t || d.records.seq + "-" + j(), message: r, seq: d.records.seq++, type: s ?? m.NORMAL, tags: o ?? [], parents: d.records.head == null ? [] : [d.records.head.id], branch: d.records.currBranch }; d.records.head = a, w.info("main branch", c.mainBranchName), d.records.commits.has(a.id) && w.warn(`Commit ID ${a.id} already exists`), d.records.commits.set(a.id, a), d.records.branches.set(d.records.currBranch, a.id), w.debug("in pushCommit " + a.id); }, "commit"), Re = /* @__PURE__ */ l(function(e) { let r = e.name; const t = e.order; if (r = B.sanitizeText(r, S()), d.records.branches.has(r)) throw new Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${r}")`); d.records.branches.set(r, d.records.head != null ? d.records.head.id : null), d.records.branchConfig.set(r, { name: r, order: t }), te(r), w.debug("in createBranch"); }, "branch"), Ie = /* @__PURE__ */ l((e) => { let r = e.branch, t = e.id; const s = e.type, o = e.tags, c = S(); r = B.sanitizeText(r, c), t && (t = B.sanitizeText(t, c)); const a = d.records.branches.get(d.records.currBranch), n = d.records.branches.get(r), $ = a ? d.records.commits.get(a) : void 0, f = n ? d.records.commits.get(n) : void 0; if ($ && f && $.branch === r) throw new Error(`Cannot merge branch '${r}' into itself.`); if (d.records.currBranch === r) { const i = /* @__PURE__ */ new Error('Incorrect usage of "merge". Cannot merge a branch to itself'); throw i.hash = { text: `merge ${r}`, token: `merge ${r}`, expected: ["branch abc"] }, i; } if ($ === void 0 || !$) { const i = /* @__PURE__ */ new Error(`Incorrect usage of "merge". Current branch (${d.records.currBranch})has no commits`); throw i.hash = { text: `merge ${r}`, token: `merge ${r}`, expected: ["commit"] }, i; } if (!d.records.branches.has(r)) { const i = /* @__PURE__ */ new Error('Incorrect usage of "merge". Branch to be merged (' + r + ") does not exist"); throw i.hash = { text: `merge ${r}`, token: `merge ${r}`, expected: [`branch ${r}`] }, i; } if (f === void 0 || !f) { const i = /* @__PURE__ */ new Error('Incorrect usage of "merge". Branch to be merged (' + r + ") has no commits"); throw i.hash = { text: `merge ${r}`, token: `merge ${r}`, expected: ['"commit"'] }, i; } if ($ === f) { const i = /* @__PURE__ */ new Error('Incorrect usage of "merge". Both branches have same head'); throw i.hash = { text: `merge ${r}`, token: `merge ${r}`, expected: ["branch abc"] }, i; } if (t && d.records.commits.has(t)) { const i = /* @__PURE__ */ new Error('Incorrect usage of "merge". Commit with id:' + t + " already exists, use different custom id"); throw i.hash = { text: `merge ${r} ${t} ${s} ${o?.join(" ")}`, token: `merge ${r} ${t} ${s} ${o?.join(" ")}`, expected: [`merge ${r} ${t}_UNIQUE ${s} ${o?.join(" ")}`] }, i; } const g = n || "", h = { id: t || `${d.records.seq}-${j()}`, message: `merged branch ${r} into ${d.records.currBranch}`, seq: d.records.seq++, parents: d.records.head == null ? [] : [d.records.head.id, g], branch: d.records.currBranch, type: m.MERGE, customType: s, customId: !!t, tags: o ?? [] }; d.records.head = h, d.records.commits.set(h.id, h), d.records.branches.set(d.records.currBranch, h.id), w.debug(d.records.branches), w.debug("in mergeBranch"); }, "merge"), Oe = /* @__PURE__ */ l(function(e) { let r = e.id, t = e.targetId, s = e.tags, o = e.parent; w.debug("Entering cherryPick:", r, t, s); const c = S(); if (r = B.sanitizeText(r, c), t = B.sanitizeText(t, c), s = s?.map(($) => B.sanitizeText($, c)), o = B.sanitizeText(o, c), !r || !d.records.commits.has(r)) { const $ = /* @__PURE__ */ new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided'); throw $.hash = { text: `cherryPick ${r} ${t}`, token: `cherryPick ${r} ${t}`, expected: ["cherry-pick abc"] }, $; } const a = d.records.commits.get(r); if (a === void 0 || !a) throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided'); if (o && !(Array.isArray(a.parents) && a.parents.includes(o))) throw /* @__PURE__ */ new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit."); const n = a.branch; if (a.type === m.MERGE && !o) throw /* @__PURE__ */ new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified."); if (!t || !d.records.commits.has(t)) { if (n === d.records.currBranch) { const h = /* @__PURE__ */ new Error('Incorrect usage of "cherryPick". Source commit is already on current branch'); throw h.hash = { text: `cherryPick ${r} ${t}`, token: `cherryPick ${r} ${t}`, expected: ["cherry-pick abc"] }, h; } const $ = d.records.branches.get(d.records.currBranch); if ($ === void 0 || !$) { const h = /* @__PURE__ */ new Error(`Incorrect usage of "cherry-pick". Current branch (${d.records.currBranch})has no commits`); throw h.hash = { text: `cherryPick ${r} ${t}`, token: `cherryPick ${r} ${t}`, expected: ["cherry-pick abc"] }, h; } const f = d.records.commits.get($); if (f === void 0 || !f) { const h = /* @__PURE__ */ new Error(`Incorrect usage of "cherry-pick". Current branch (${d.records.currBranch})has no commits`); throw h.hash = { text: `cherryPick ${r} ${t}`, token: `cherryPick ${r} ${t}`, expected: ["cherry-pick abc"] }, h; } const g = { id: d.records.seq + "-" + j(), message: `cherry-picked ${a?.message} into ${d.records.currBranch}`, seq: d.records.seq++, parents: d.records.head == null ? [] : [d.records.head.id, a.id], branch: d.records.currBranch, type: m.CHERRY_PICK, tags: s ? s.filter(Boolean) : [`cherry-pick:${a.id}${a.type === m.MERGE ? `|parent:${o}` : ""}`] }; d.records.head = g, d.records.commits.set(g.id, g), d.records.branches.set(d.records.currBranch, g.id), w.debug(d.records.branches), w.debug("in cherryPick"); } }, "cherryPick"), te = /* @__PURE__ */ l(function(e) { if (e = B.sanitizeText(e, S()), d.records.branches.has(e)) { d.records.currBranch = e; const r = d.records.branches.get(d.records.currBranch); r === void 0 || !r ? d.records.head = null : d.records.head = d.records.commits.get(r) ?? null; } else { const r = /* @__PURE__ */ new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${e}")`); throw r.hash = { text: `checkout ${e}`, token: `checkout ${e}`, expected: [`branch ${e}`] }, r; } }, "checkout"); function V(e, r, t) { const s = e.indexOf(r); s === -1 ? e.push(t) : e.splice(s, 1, t); } l(V, "upsert"); function Q(e) { const r = e.reduce((o, c) => o.seq > c.seq ? o : c, e[0]); let t = ""; e.forEach(function(o) { o === r ? t += " *" : t += " |"; }); const s = [ t, r.id, r.seq ]; for (const o in d.records.branches) d.records.branches.get(o) === r.id && s.push(o); if (w.debug(s.join(" ")), r.parents && r.parents.length == 2 && r.parents[0] && r.parents[1]) { const o = d.records.commits.get(r.parents[0]); V(e, r, o), r.parents[1] && e.push(d.records.commits.get(r.parents[1])); } else { if (r.parents.length == 0) return; if (r.parents[0]) { const o = d.records.commits.get(r.parents[0]); V(e, r, o); } } e = re(e, (o) => o.id), Q(e); } l(Q, "prettyPrintCommitHistory"); var _e = /* @__PURE__ */ l(function() { w.debug(d.records.commits); const e = ae()[0]; Q([e]); }, "prettyPrint"), Ge = /* @__PURE__ */ l(function() { d.reset(), ue(); }, "clear"), He = /* @__PURE__ */ l(function() { return [...d.records.branchConfig.values()].map((e, r) => e.order !== null && e.order !== void 0 ? e : { ...e, order: parseFloat(`0.${r}`) }).sort((e, r) => (e.order ?? 0) - (r.order ?? 0)).map(({ name: e }) => ({ name: e })); }, "getBranchesAsObjArray"), Se = /* @__PURE__ */ l(function() { return d.records.branches; }, "getBranches"), Ae = /* @__PURE__ */ l(function() { return d.records.commits; }, "getCommits"), ae = /* @__PURE__ */ l(function() { const e = [...d.records.commits.values()]; return e.forEach(function(r) { w.debug(r.id); }), e.sort((r, t) => r.seq - t.seq), e; }, "getCommitsArray"), ne = { commitType: m, getConfig: S, setDirection: Be, setOptions: Te, getOptions: Le, commit: Me, branch: Re, merge: Ie, cherryPick: Oe, checkout: te, prettyPrint: _e, clear: Ge, getBranchesAsObjArray: He, getBranches: Se, getCommits: Ae, getCommitsArray: ae, getCurrentBranch: /* @__PURE__ */ l(function() { return d.records.currBranch; }, "getCurrentBranch"), getDirection: /* @__PURE__ */ l(function() { return d.records.direction; }, "getDirection"), getHead: /* @__PURE__ */ l(function() { return d.records.head; }, "getHead"), setAccTitle: fe, getAccTitle: pe, getAccDescription: xe, setAccDescription: he, setDiagramTitle: $e, getDiagramTitle: me }, We = /* @__PURE__ */ l((e, r) => { Ce(e, r), e.dir && r.setDirection(e.dir); for (const t of e.statements) qe(t, r); }, "populate"), qe = /* @__PURE__ */ l((e, r) => { const t = { Commit: /* @__PURE__ */ l((s) => r.commit(Ne(s)), "Commit"), Branch: /* @__PURE__ */ l((s) => r.branch(De(s)), "Branch"), Merge: /* @__PURE__ */ l((s) => r.merge(ze(s)), "Merge"), Checkout: /* @__PURE__ */ l((s) => r.checkout(Fe(s)), "Checkout"), CherryPicking: /* @__PURE__ */ l((s) => r.cherryPick(Pe(s)), "CherryPicking") }[e.$type]; t ? t(e) : w.error(`Unknown statement type: ${e.$type}`); }, "parseStatement"), Ne = /* @__PURE__ */ l((e) => ({ id: e.id, msg: e.message ?? "", type: e.type !== void 0 ? m[e.type] : m.NORMAL, tags: e.tags ?? void 0 }), "parseCommit"), De = /* @__PURE__ */ l((e) => ({ name: e.name, order: e.order ?? 0 }), "parseBranch"), ze = /* @__PURE__ */ l((e) => ({ branch: e.branch, id: e.id ?? "", type: e.type !== void 0 ? m[e.type] : void 0, tags: e.tags ?? void 0 }), "parseMerge"), Fe = /* @__PURE__ */ l((e) => e.branch, "parseCheckout"), Pe = /* @__PURE__ */ l((e) => ({ id: e.id, targetId: "", tags: e.tags?.length === 0 ? void 0 : e.tags, parent: e.parent }), "parseCherryPicking"), Ye = { parse: /* @__PURE__ */ l(async (e) => { const r = await de("gitGraph", e); w.debug(r), We(r, ne); }, "parse") }, O = 10, _ = 40, L = 4, R = 2, G = 8, U = /* @__PURE__ */ new Set([ "redux", "redux-dark", "redux-color", "redux-dark-color" ]), X = 12, Z = /* @__PURE__ */ new Set(["redux-color", "redux-dark-color"]), je = /* @__PURE__ */ new Set([ "dark", "redux-dark", "redux-dark-color", "neo-dark" ]), H = /* @__PURE__ */ l((e, r, t = !1) => t && e > 0 ? (e - 1) % (r - 1) + 1 : e % r, "calcColorIndex"), v = /* @__PURE__ */ new Map(), E = /* @__PURE__ */ new Map(), P = 30, q = /* @__PURE__ */ new Map(), Y = [], I = 0, y = "LR", Ue = /* @__PURE__ */ l(() => { v.clear(), E.clear(), q.clear(), I = 0, Y = [], y = "LR"; }, "clear"), se = /* @__PURE__ */ l((e) => { const r = document.createElementNS("http://www.w3.org/2000/svg", "text"); return (typeof e == "string" ? e.split(/\\n|\n|<br\s*\/?>/gi) : e).forEach((t) => { const s = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); s.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"), s.setAttribute("dy", "1em"), s.setAttribute("x", "0"), s.setAttribute("class", "row"), s.textContent = t.trim(), r.appendChild(s); }), r; }, "drawText"), oe = /* @__PURE__ */ l((e) => { let r, t, s; return y === "BT" ? (t = /* @__PURE__ */ l((o, c) => o <= c, "comparisonFunc"), s = 1 / 0) : (t = /* @__PURE__ */ l((o, c) => o >= c, "comparisonFunc"), s = 0), e.forEach((o) => { const c = y === "TB" || y == "BT" ? E.get(o)?.y : E.get(o)?.x; c !== void 0 && t(c, s) && (r = o, s = c); }), r; }, "findClosestParent"), Ke = /* @__PURE__ */ l((e) => { let r = "", t = 1 / 0; return e.forEach((s) => { const o = E.get(s).y; o <= t && (r = s, t = o); }), r || void 0; }, "findClosestParentBT"), Ve = /* @__PURE__ */ l((e, r, t) => { let s = t, o = t; const c = []; e.forEach((a) => { const n = r.get(a); if (!n) throw new Error(`Commit not found for key ${a}`); n.parents.length ? (s = Je(n), o = Math.max(s, o)) : c.push(n), Qe(n, s); }), s = o, c.forEach((a) => { Ze(a, s, t); }), e.forEach((a) => { const n = r.get(a); if (n?.parents.length) { const $ = Ke(n.parents); s = E.get($).y - _, s <= o && (o = s); const f = v.get(n.branch).pos, g = s - O; E.set(n.id, { x: f, y: g }); } }); }, "setParallelBTPos"), Xe = /* @__PURE__ */ l((e) => { const r = oe(e.parents.filter((s) => s !== null)); if (!r) throw new Error(`Closest parent not found for commit ${e.id}`); const t = E.get(r)?.y; if (t === void 0) throw new Error(`Closest parent position not found for commit ${e.id}`); return t; }, "findClosestParentPos"), Je = /* @__PURE__ */ l((e) => Xe(e) + _, "calculateCommitPosition"), Qe = /* @__PURE__ */ l((e, r) => { const t = v.get(e.branch); if (!t) throw new Error(`Branch not found for commit ${e.id}`); const s = t.pos, o = r + O; return E.set(e.id, { x: s, y: o }), { x: s, y: o }; }, "setCommitPosition"), Ze = /* @__PURE__ */ l((e, r, t) => { const s = v.get(e.branch); if (!s) throw new Error(`Branch not found for commit ${e.id}`); const o = r + t, c = s.pos; E.set(e.id, { x: c, y: o }); }, "setRootPosition"), er = /* @__PURE__ */ l((e, r, t, s, o, c) => { const { theme: a } = D(), n = U.has(a ?? ""), $ = Z.has(a ?? ""), f = je.has(a ?? ""); if (c === m.HIGHLIGHT) e.append("rect").attr("x", t.x - 10 + (n ? 3 : 0)).attr("y", t.y - 10 + (n ? 3 : 0)).attr("width", n ? 14 : 20).attr("height", n ? 14 : 20).attr("class", `commit ${r.id} commit-highlight${H(o, G, $)} ${s}-outer`), e.append("rect").attr("x", t.x - 6 + (n ? 2 : 0)).attr("y", t.y - 6 + (n ? 2 : 0)).attr("width", n ? 8 : 12).attr("height", n ? 8 : 12).attr("class", `commit ${r.id} commit${H(o, G, $)} ${s}-inner`); else if (c === m.CHERRY_PICK) e.append("circle").attr("cx", t.x).attr("cy", t.y).attr("r", n ? 7 : 10).attr("class", `commit ${r.id} ${s}`), e.append("circle").attr("cx", t.x - 3).attr("cy", t.y + 2).attr("r", n ? 2.5 : 2.75).attr("fill", f ? "#000000" : "#fff").attr("class", `commit ${r.id} ${s}`), e.append("circle").attr("cx", t.x + 3).attr("cy", t.y + 2).attr("r", n ? 2.5 : 2.75).attr("fill", f ? "#000000" : "#fff").attr("class", `commit ${r.id} ${s}`), e.append("line").attr("x1", t.x + 3).attr("y1", t.y + 1).attr("x2", t.x).attr("y2", t.y - 5).attr("stroke", f ? "#000000" : "#fff").attr("class", `commit ${r.id} ${s}`), e.append("line").attr("x1", t.x - 3).attr("y1", t.y + 1).attr("x2", t.x).attr("y2", t.y - 5).attr("stroke", f ? "#000000" : "#fff").attr("class", `commit ${r.id} ${s}`); else { const g = e.append("circle"); if (g.attr("cx", t.x), g.attr("cy", t.y), g.attr("r", n ? 7 : 10), g.attr("class", `commit ${r.id} commit${H(o, G, $)}`), c === m.MERGE) { const h = e.append("circle"); h.attr("cx", t.x), h.attr("cy", t.y), h.attr("r", n ? 5 : 6), h.attr("class", `commit ${s} ${r.id} commit${H(o, G, $)}`); } if (c === m.REVERSE) { const h = e.append("path"), i = n ? 4 : 5; h.attr("d", `M ${t.x - i},${t.y - i}L${t.x + i},${t.y + i}M${t.x - i},${t.y + i}L${t.x + i},${t.y - i}`).attr("class", `commit ${s} ${r.id} commit${H(o, G, $)}`); } } }, "drawCommitBullet"), rr = /* @__PURE__ */ l((e, r, t, s, o) => { if (r.type !== m.CHERRY_PICK && (r.customId && r.type === m.MERGE || r.type !== m.MERGE) && o.showCommitLabel) { const c = e.append("g"), a = c.insert("rect").attr("class", "commit-label-bkg"), n = c.append("text").attr("x", s).attr("y", t.y + 25).attr("class", "commit-label").text(r.id), $ = n.node()?.getBBox(); if ($ && (a.attr("x", t.posWithOffset - $.width / 2 - R).attr("y", t.y + 13.5).attr("width", $.width + 2 * R).attr("height", $.height + 2 * R), y === "TB" || y === "BT" ? (a.attr("x", t.x - ($.width + 4 * L + 5)).attr("y", t.y - 12), n.attr("x", t.x - ($.width + 4 * L)).attr("y", t.y + $.height - 12)) : n.attr("x", t.posWithOffset - $.width / 2), o.rotateCommitLabel)) if (y === "TB" || y === "BT") n.attr("transform", "rotate(-45, " + t.x + ", " + t.y + ")"), a.attr("transform", "rotate(-45, " + t.x + ", " + t.y + ")"); else { const f = -7.5 - ($.width + 10) / 25 * 9.5, g = 10 + $.width / 25 * 8.5; c.attr("transform", "translate(" + f + ", " + g + ") rotate(-45, " + s + ", " + t.y + ")"); } } }, "drawCommitLabel"), tr = /* @__PURE__ */ l((e, r, t, s) => { if (r.tags.length > 0) { let o = 0, c = 0, a = 0; const n = []; for (const $ of r.tags.reverse()) { const f = e.insert("polygon"), g = e.append("circle"), h = e.append("text").attr("y", t.y - 16 - o).attr("class", "tag-label").text($), i = h.node()?.getBBox(); if (!i) throw new Error("Tag bbox not found"); c = Math.max(c, i.width), a = Math.max(a, i.height), h.attr("x", t.posWithOffset - i.width / 2), n.push({ tag: h, hole: g, rect: f, yOffset: o }), o += 20; } for (const { tag: $, hole: f, rect: g, yOffset: h } of n) { const i = a / 2, x = t.y - 19.2 - h; if (g.attr("class", "tag-label-bkg").attr("points", ` ${s - c / 2 - L / 2},${x + R} ${s - c / 2 - L / 2},${x - R} ${t.posWithOffset - c / 2 - L},${x - i - R} ${t.posWithOffset + c / 2 + L},${x - i - R} ${t.posWithOffset + c / 2 + L},${x + i + R} ${t.posWithOffset - c / 2 - L},${x + i + R}`), f.attr("cy", x).attr("cx", s - c / 2 + L / 2).attr("r", 1.5).attr("class", "tag-hole"), y === "TB" || y === "BT") { const u = s + h; g.attr("class", "tag-label-bkg").attr("points", ` ${t.x},${u + 2} ${t.x},${u - 2} ${t.x + O},${u - i - 2} ${t.x + O + c + 4},${u - i - 2} ${t.x + O + c + 4},${u + i + 2} ${t.x + O},${u + i + 2}`).attr("transform", "translate(12,12) rotate(45, " + t.x + "," + s + ")"), f.attr("cx", t.x + L / 2).attr("cy", u).attr("transform", "translate(12,12) rotate(45, " + t.x + "," + s + ")"), $.attr("x", t.x + 5).attr("y", u + 3).attr("transform", "translate(14,14) rotate(45, " + t.x + "," + s + ")"); } } } }, "drawCommitTags"), ar = /* @__PURE__ */ l((e) => { switch (e.customType ?? e.type) { case m.NORMAL: return "commit-normal"; case m.REVERSE: return "commit-reverse"; case m.HIGHLIGHT: return "commit-highlight"; case m.MERGE: return "commit-merge"; case m.CHERRY_PICK: return "commit-cherry-pick"; default: return "commit-normal"; } }, "getCommitClassType"), nr = /* @__PURE__ */ l((e, r, t, s) => { const o = { x: 0, y: 0 }; if (e.parents.length > 0) { const c = oe(e.parents); if (c) { const a = s.get(c) ?? o; return r === "TB" ? a.y + _ : r === "BT" ? (s.get(e.id) ?? o).y - _ : a.x + _; } } else return r === "TB" ? P : r === "BT" ? (s.get(e.id) ?? o).y - _ : 0; return 0; }, "calculatePosition"), sr = /* @__PURE__ */ l((e, r, t) => { const s = y === "BT" && t ? r : r + O, o = v.get(e.branch)?.pos, c = y === "TB" || y === "BT" ? v.get(e.branch)?.pos : s; if (c === void 0 || o === void 0) throw new Error(`Position were undefined for commit ${e.id}`); const a = U.has(D().theme ?? ""); return { x: c, y: y === "TB" || y === "BT" ? s : o + (a ? X / 2 + 1 : -2), posWithOffset: s }; }, "getCommitPosition"), ee = /* @__PURE__ */ l((e, r, t, s) => { const o = e.append("g").attr("class", "commit-bullets"), c = e.append("g").attr("class", "commit-labels"); let a = y === "TB" || y === "BT" ? P : 0; const n = [...r.keys()], $ = s.parallelCommits ?? !1, f = /* @__PURE__ */ l((h, i) => { const x = r.get(h)?.seq, u = r.get(i)?.seq; return x !== void 0 && u !== void 0 ? x - u : 0; }, "sortKeys"); let g = n.sort(f); y === "BT" && ($ && Ve(g, r, a), g = g.reverse()), g.forEach((h) => { const i = r.get(h); if (!i) throw new Error(`Commit not found for key ${h}`); $ && (a = nr(i, y, a, E)); const x = sr(i, a, $); if (t) { const u = ar(i), p = i.customType ?? i.type, b = v.get(i.branch)?.index ?? 0; er(o, i, x, u, b, p), rr(c, i, x, a, s), tr(c, i, x, a); } y === "TB" || y === "BT" ? E.set(i.id, { x: x.x, y: x.posWithOffset }) : E.set(i.id, { x: x.posWithOffset, y: x.y }), a = y === "BT" && $ ? a + _ : a + _ + O, a > I && (I = a); }); }, "drawCommits"), or = /* @__PURE__ */ l((e, r, t, s, o) => { const c = (y === "TB" || y === "BT" ? t.x < s.x : t.y < s.y) ? r.branch : e.branch, a = /* @__PURE__ */ l(($) => $.branch === c, "isOnBranchToGetCurve"), n = /* @__PURE__ */ l(($) => $.seq > e.seq && $.seq < r.seq, "isBetweenCommits"); return [...o.values()].some(($) => n($) && a($)); }, "shouldRerouteArrow"), N = /* @__PURE__ */ l((e, r, t = 0) => { const s = e + Math.abs(e - r) / 2; return t > 5 ? s : Y.every((o) => Math.abs(o - s) >= 10) ? (Y.push(s), s) : N(e, r - Math.abs(e - r) / 5, t + 1); }, "findLane"), cr = /* @__PURE__ */ l((e, r, t, s) => { const { theme: o } = D(), c = Z.has(o ?? ""), a = E.get(r.id), n = E.get(t.id); if (a === void 0 || n === void 0) throw new Error(`Commit positions not found for commits ${r.id} and ${t.id}`); const $ = or(r, t, a, n, s); let f = "", g = "", h = 0, i = 0, x = v.get(t.branch)?.index; t.type === m.MERGE && r.id !== t.parents[0] && (x = v.get(r.branch)?.index); let u; if ($) { f = "A 10 10, 0, 0, 0,", g = "A 10 10, 0, 0, 1,", h = 10, i = 10; const p = a.y < n.y ? N(a.y, n.y) : N(n.y, a.y), b = a.x < n.x ? N(a.x, n.x) : N(n.x, a.x); y === "TB" ? a.x < n.x ? u = `M ${a.x} ${a.y} L ${b - h} ${a.y} ${g} ${b} ${a.y + i} L ${b} ${n.y - h} ${f} ${b + i} ${n.y} L ${n.x} ${n.y}` : (x = v.get(r.branch)?.index, u = `M ${a.x} ${a.y} L ${b + h} ${a.y} ${f} ${b} ${a.y + i} L ${b} ${n.y - h} ${g} ${b - i} ${n.y} L ${n.x} ${n.y}`) : y === "BT" ? a.x < n.x ? u = `M ${a.x} ${a.y} L ${b - h} ${a.y} ${f} ${b} ${a.y - i} L ${b} ${n.y + h} ${g} ${b + i} ${n.y} L ${n.x} ${n.y}` : (x = v.get(r.branch)?.index, u = `M ${a.x} ${a.y} L ${b + h} ${a.y} ${g} ${b} ${a.y - i} L ${b} ${n.y + h} ${f} ${b - i} ${n.y} L ${n.x} ${n.y}`) : a.y < n.y ? u = `M ${a.x} ${a.y} L ${a.x} ${p - h} ${f} ${a.x + i} ${p} L ${n.x - h} ${p} ${g} ${n.x} ${p + i} L ${n.x} ${n.y}` : (x = v.get(r.branch)?.index, u = `M ${a.x} ${a.y} L ${a.x} ${p + h} ${g} ${a.x + i} ${p} L ${n.x - h} ${p} ${f} ${n.x} ${p - i} L ${n.x} ${n.y}`); } else f = "A 20 20, 0, 0, 0,", g = "A 20 20, 0, 0, 1,", h = 20, i = 20, y === "TB" ? (a.x < n.x && (t.type === m.MERGE && r.id !== t.parents[0] ? u = `M ${a.x} ${a.y} L ${a.x} ${n.y - h} ${f} ${a.x + i} ${n.y} L ${n.x} ${n.y}` : u = `M ${a.x} ${a.y} L ${n.x - h} ${a.y} ${g} ${n.x} ${a.y + i} L ${n.x} ${n.y}`), a.x > n.x && (f = "A 20 20, 0, 0, 0,", g = "A 20 20, 0, 0, 1,", h = 20, i = 20, t.type === m.MERGE && r.id !== t.parents[0] ? u = `M ${a.x} ${a.y} L ${a.x} ${n.y - h} ${g} ${a.x - i} ${n.y} L ${n.x} ${n.y}` : u = `M ${a.x} ${a.y} L ${n.x + h} ${a.y} ${f} ${n.x} ${a.y + i} L ${n.x} ${n.y}`), a.x === n.x && (u = `M ${a.x} ${a.y} L ${n.x} ${n.y}`)) : y === "BT" ? (a.x < n.x && (t.type === m.MERGE && r.id !== t.parents[0] ? u = `M ${a.x} ${a.y} L ${a.x} ${n.y + h} ${g} ${a.x + i} ${n.y} L ${n.x} ${n.y}` : u = `M ${a.x} ${a.y} L ${n.x - h} ${a.y} ${f} ${n.x} ${a.y - i} L ${n.x} ${n.y}`), a.x > n.x && (f = "A 20 20, 0, 0, 0,", g = "A 20 20, 0, 0, 1,", h = 20, i = 20, t.type === m.MERGE && r.id !== t.parents[0] ? u = `M ${a.x} ${a.y} L ${a.x} ${n.y + h} ${f} ${a.x - i} ${n.y} L ${n.x} ${n.y}` : u = `M ${a.x} ${a.y} L ${n.x + h} ${a.y} ${g} ${n.x} ${a.y - i} L ${n.x} ${n.y}`), a.x === n.x && (u = `M ${a.x} ${a.y} L ${n.x} ${n.y}`)) : (a.y < n.y && (t.type === m.MERGE && r.id !== t.parents[0] ? u = `M ${a.x} ${a.y} L ${n.x - h} ${a.y} ${g} ${n.x} ${a.y + i} L ${n.x} ${n.y}` : u = `M ${a.x} ${a.y} L ${a.x} ${n.y - h} ${f} ${a.x + i} ${n.y} L ${n.x} ${n.y}`), a.y > n.y && (t.type === m.MERGE && r.id !== t.parents[0] ? u = `M ${a.x} ${a.y} L ${n.x - h} ${a.y} ${f} ${n.x} ${a.y - i} L ${n.x} ${n.y}` : u = `M ${a.x} ${a.y} L ${a.x} ${n.y + h} ${g} ${a.x + i} ${n.y} L ${n.x} ${n.y}`), a.y === n.y && (u = `M ${a.x} ${a.y} L ${n.x} ${n.y}`)); if (u === void 0) throw new Error("Line definition not found"); e.append("path").attr("d", u).attr("class", "arrow arrow" + H(x, G, c)); }, "drawArrow"), ir = /* @__PURE__ */ l((e, r) => { const t = e.append("g").attr("class", "commit-arrows"); [...r.keys()].forEach((s) => { const o = r.get(s); o.parents && o.parents.length > 0 && o.parents.forEach((c) => { cr(t, r.get(c), o, r); }); }); }, "drawArrows"), dr = /* @__PURE__ */ l((e, r, t, s) => { const { look: o, theme: c, themeVariables: a } = D(), { dropShadow: n, THEME_COLOR_LIMIT: $ } = a, f = U.has(c ?? ""), g = Z.has(c ?? ""), h = e.append("g"); r.forEach((i, x) => { const u = H(x, f ? $ : G, g), p = v.get(i.name)?.pos; if (p === void 0) throw new Error(`Position not found for branch ${i.name}`); const b = y === "TB" || y === "BT" ? p : f ? p + X / 2 + 1 : p - 2, k = h.append("line"); k.attr("x1", 0), k.attr("y1", b), k.attr("x2", I), k.attr("y2", b), k.attr("class", "branch branch" + u), y === "TB" ? (k.attr("y1", P), k.attr("x1", p), k.attr("y2", I), k.attr("x2", p)) : y === "BT" && (k.attr("y1", I), k.attr("x1", p), k.attr("y2", P), k.attr("x2", p)), Y.push(b); const K = i.name, W = se(K), T = h.insert("rect"), M = h.insert("g").attr("class", "branchLabel").insert("g").attr("class", "label branch-label" + u); M.node().appendChild(W); const C = W.getBBox(), z = f ? 0 : 4, F = f ? 16 : 0, A = f ? X : 0; o === "neo" && T.attr("data-look", "neo"), T.attr("class", "branchLabelBkg label" + u).attr("style", o === "neo" ? `filter:${f ? `url(#${s}-drop-shadow)` : n}` : "").attr("rx", z).attr("ry", z).attr("x", -C.width - 4 - (t.rotateCommitLabel === !0 ? 30 : 0)).attr("y", -C.height / 2 + 10).attr("width", C.width + 18 + F).attr("height", C.height + 4 + A), M.attr("transform", "translate(" + (-C.width - 14 - (t.rotateCommitLabel === !0 ? 30 : 0) + F / 2) + ", " + (b - C.height / 2 - 2) + ")"), y === "TB" ? (T.attr("x", p - C.width / 2 - 10).attr("y", 0), M.attr("transform", "translate(" + (p - C.width / 2 - 5) + ", 0)"), f && (T.attr("transform", `translate(${-F / 2 - 3}, ${-A - 10})`), M.attr("transform", "translate(" + (p - C.width / 2 - 5) + ", " + (-A * 2 + 7) + ")"))) : y === "BT" ? (T.attr("x", p - C.width / 2 - 10).attr("y", I), M.attr("transform", "translate(" + (p - C.width / 2 - 5) + ", " + I + ")"), f && (T.attr("transform", `translate(${-F / 2 - 3}, ${A + 10})`), M.attr("transform", "translate(" + (p - C.width / 2 - 5) + ", " + (I + A * 2 + 4) + ")"))) : T.attr("transform", "translate(-19, " + (b - 12 - A / 2) + ")"); }); }, "drawBranches"), lr = /* @__PURE__ */ l(function(e, r, t, s, o) { return v.set(e, { pos: r, index: t }), r += 50 + (o ? 40 : 0) + (y === "TB" || y === "BT" ? s.width / 2 : 0), r; }, "setBranchPosition"), hr = { draw: /* @__PURE__ */ l(function(e, r, t, s) { Ue(), w.debug("in gitgraph renderer", e + ` `, "id:", r, t); const o = s.db; if (!o.getConfig) { w.error("getConfig method is not available on db"); return; } const c = o.getConfig(), a = c.rotateCommitLabel ?? !1; q = o.getCommits(); const n = o.getBranchesAsObjArray(); y = o.getDirection(); const $ = le(`[id="${r}"]`), { look: f, theme: g, themeVariables: h } = D(), { useGradient: i, gradientStart: x, gradientStop: u, filterColor: p } = h; if (i) { const k = $.append("defs").append("linearGradient").attr("id", r + "-gradient").attr("gradientUnits", "objectBoundingBox").attr("x1", "0%").attr("y1", "0%").attr("x2", "100%").attr("y2", "0%"); k.append("stop").attr("offset", "0%").attr("stop-color", x).attr("stop-opacity", 1), k.append("stop").attr("offset", "100%").attr("stop-color", u).attr("stop-opacity", 1); } f === "neo" && U.has(g ?? "") && $.append("defs").append("filter").attr("id", r + "-drop-shadow").attr("height", "130%").attr("width", "130%").append("feDropShadow").attr("dx", "4").attr("dy", "4").attr("stdDeviation", 0).attr("flood-opacity", "0.06").attr("flood-color", p); let b = 0; n.forEach((k, K) => { const W = se(k.name), T = $.append("g"), M = T.insert("g").attr("class", "branchLabel"), C = M.insert("g").attr("class", "label branch-label"); C.node()?.appendChild(W); const z = W.getBBox(); b = lr(k.name, b, K, z, a), C.remove(), M.remove(), T.remove(); }), ee($, q, !1, c), c.showBranches && dr($, n, c, r), ir($, q), ee($, q, !0, c), be.insertTitle($, "gitTitleText", c.titleTopMargin ?? 0, o.getDiagramTitle()), ge(void 0, $, c.diagramPadding, c.useMaxWidth); }, "draw") }, ce = 8, ie = /* @__PURE__ */ new Set([ "redux", "redux-dark", "redux-color", "redux-dark-color" ]), $r = /* @__PURE__ */ new Set(["redux-color", "redux-dark-color"]), fr = /* @__PURE__ */ new Set(["neo", "neo-dark"]), gr = /* @__PURE__ */ new Set([ "dark", "redux-dark", "redux-dark-color", "neo-dark" ]), ur = /* @__PURE__ */ new Set([ "redux", "redux-dark", "redux-color", "redux-dark-color", "neo", "neo-dark" ]), yr = /* @__PURE__ */ l((e) => { const { svgId: r } = e; let t = ""; if (e.useGradient && r) for (let s = 0; s < e.THEME_COLOR_LIMIT; s++) t += ` .label${s} { fill: ${e.mainBkg}; stroke: url(${r}-gradient); stroke-width: ${e.strokeWidth};} `; return t; }, "genGitGraphGradient"), xr = /* @__PURE__ */ l((e) => { const { theme: r, themeVariables: t } = J(), { borderColorArray: s } = t, o = ie.has(r); if (fr.has(r)) { let c = ""; for (let a = 0; a < e.THEME_COLOR_LIMIT; a++) if (a === 0) c += ` .branch-label${a} { fill: ${e.nodeBorder};} .commit${a} { stroke: ${e.nodeBorder}; } .commit-highlight${a} { stroke: ${e.nodeBorder}; fill: ${e.nodeBorder}; } .arrow${a} { stroke: ${e.nodeBorder}; } .commit-bullets { fill: ${e.nodeBorder}; } .commit-cherry-pick${a} { stroke: ${e.nodeBorder}; } ${yr(e)}`; else { const n = a % ce; c += ` .branch-label${a} { fill: ${e["gitBranchLabel" + n]}; } .commit${a} { stroke: ${e["git" + n]}; fill: ${e["git" + n]}; } .commit-highlight${a} { stroke: ${e["gitInv" + n]}; fill: ${e["gitInv" + n]}; } .arrow${a} { stroke: ${e["git" + n]}; } `; } return c; } else if ($r.has(r)) { let c = ""; for (let a = 0; a < e.THEME_COLOR_LIMIT; a++) if (a === 0) c += ` .branch-label${a} { fill: ${e.nodeBorder}; ${o ? `font-weight:${e.noteFontWeight}` : ""} } .commit${a} { stroke: ${e.nodeBorder}; } .commit-highlight${a} { stroke: ${e.nodeBorder}; fill: ${e.mainBkg}; } .label${a} { fill: ${e.mainBkg}; stroke: ${e.nodeBorder}; stroke-width: ${e.strokeWidth}; ${o ? `font-weight:${e.noteFontWeight}` : ""} } .arrow${a} { stroke: ${e.nodeBorder}; } .commit-bullets { fill: ${e.nodeBorder}; } `; else { const n = a % s.length; c += ` .branch-label${a} { fill: ${e.nodeBorder}; ${o ? `font-weight:${e.noteFontWeight}` : ""} } .commit${a} { stroke: ${s[n]}; fill: ${s[n]}; } .commit-highlight${a} { stroke: ${s[n]}; fill: ${s[n]}; } .label${a} { fill: ${gr.has(r) ? e.mainBkg : s[n]}; stroke: ${s[n]}; stroke-width: ${e.strokeWidth}; } .arrow${a} { stroke: ${s[n]}; } `; } return c; } else { let c = ""; for (let a = 0; a < e.THEME_COLOR_LIMIT; a++) c += ` .branch-label${a} { fill: ${e.nodeBorder}; ${o ? `font-weight:${e.noteFontWeight}` : ""} } .commit${a} { stroke: ${e.nodeBorder}; } .commit-highlight${a} { stroke: ${e.nodeBorder}; fill: ${e.nodeBorder}; } .label${a} { fill: ${e.mainBkg}; stroke: ${e.nodeBorder}; stroke-width: ${e.strokeWidth}; ${o ? `font-weight:${e.noteFontWeight}` : ""}} .arrow${a} { stroke: ${e.nodeBorder}; } .commit-bullets { fill: ${e.nodeBorder}; } .commit-cherry-pick${a} { stroke: ${e.nodeBorder}; } `; return c; } }, "genColor"), mr = /* @__PURE__ */ l((e) => `${Array.from({ length: e.THEME_COLOR_LIMIT }, (r, t) => t).map((r) => { const t = r % ce; return ` .branch-label${r} { fill: ${e["gitBranchLabel" + t]}; } .commit${r} { stroke: ${e["git" + t]}; fill: ${e["git" + t]}; } .commit-highlight${r} { stroke: ${e["gitInv" + t]}; fill: ${e["gitInv" + t]}; } .label${r} { fill: ${e["git" + t]}; } .arrow${r} { stroke: ${e["git" + t]}; } `; }).join(` `)}`, "normalTheme"), Br = { parser: Ye, db: ne, renderer: hr, styles: /* @__PURE__ */ l((e) => { const { theme: r } = J(), t = ur.has(r); return ` .commit-id, .commit-msg, .branch-label { fill: lightgrey; color: lightgrey; font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); } ${t ? xr(e) : mr(e)} .branch { stroke-width: ${e.strokeWidth}; stroke: ${e.commitLineColor ?? e.lineColor}; stroke-dasharray: ${t ? "4 2" : "2"}; } .commit-label { font-size: ${e.commitLabelFontSize}; fill: ${t ? e.nodeBorder : e.commitLabelColor}; ${t ? `font-weight:${e.noteFontWeight};` : ""}} .commit-label-bkg { font-size: ${e.commitLabelFontSize}; fill: ${t ? "transparent" : e.commitLabelBackground}; opacity: ${t ? "" : 0.5}; } .tag-label { font-size: ${e.tagLabelFontSize}; fill: ${e.tagLabelColor};} .tag-label-bkg { fill: ${t ? e.mainBkg : e.tagLabelBackground}; stroke: ${t ? e.nodeBorder : e.tagLabelBorder}; ${t ? `filter:${e.dropShadow}` : ""} } .tag-hole { fill: ${e.textColor}; } .commit-merge { stroke: ${t ? e.mainBkg : e.primaryColor}; fill: ${t ? e.mainBkg : e.primaryColor}; } .commit-reverse { stroke: ${t ? e.mainBkg : e.primaryColor}; fill: ${t ? e.mainBkg : e.primaryColor}; stroke-width: ${t ? e.strokeWidth : 3}; } .commit-highlight-outer { } .commit-highlight-inner { stroke: ${t ? e.mainBkg : e.primaryColor}; fill: ${t ? e.mainBkg : e.primaryColor}; } .arrow { /* Intentional: neo themes keep the bold 8px arrow (like classic themes); only redux-geometry themes use the thinner options.strokeWidth. */ stroke-width: ${ie.has(r) ? e.strokeWidth : 8}; stroke-linecap: round; fill: none } .gitTitleText { text-anchor: middle; font-size: 18px; fill: ${e.textColor}; } `; }, "getStyles") }; export { Br as diagram };