@render-harness/ui 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/dist/static/assets/{architectureDiagram-3BPJPVTR-DLNRxqTW.js → architectureDiagram-3BPJPVTR-CFD3Y1kc.js} +2 -2
  2. package/dist/static/assets/{architectureDiagram-3BPJPVTR-DLNRxqTW.js.map → architectureDiagram-3BPJPVTR-CFD3Y1kc.js.map} +1 -1
  3. package/dist/static/assets/{blockDiagram-GPEHLZMM-CCWTkWe6.js → blockDiagram-GPEHLZMM-Elf3j5Yp.js} +3 -3
  4. package/dist/static/assets/{blockDiagram-GPEHLZMM-CCWTkWe6.js.map → blockDiagram-GPEHLZMM-Elf3j5Yp.js.map} +1 -1
  5. package/dist/static/assets/{c4Diagram-AAUBKEIU-qO0tZRXO.js → c4Diagram-AAUBKEIU-COPyA4Y2.js} +2 -2
  6. package/dist/static/assets/{c4Diagram-AAUBKEIU-qO0tZRXO.js.map → c4Diagram-AAUBKEIU-COPyA4Y2.js.map} +1 -1
  7. package/dist/static/assets/{chunk-3OPIFGDE-xcRWDOrg.js → chunk-3OPIFGDE-P0oLihOV.js} +2 -2
  8. package/dist/static/assets/{chunk-3OPIFGDE-xcRWDOrg.js.map → chunk-3OPIFGDE-P0oLihOV.js.map} +1 -1
  9. package/dist/static/assets/{chunk-5ZQYHXKU-B_3UEJ_q.js → chunk-5ZQYHXKU-CCVDVWrS.js} +2 -2
  10. package/dist/static/assets/{chunk-5ZQYHXKU-B_3UEJ_q.js.map → chunk-5ZQYHXKU-CCVDVWrS.js.map} +1 -1
  11. package/dist/static/assets/{chunk-727SXJPM-c1bbIj6N.js → chunk-727SXJPM-CNNkFQDE.js} +2 -2
  12. package/dist/static/assets/{chunk-727SXJPM-c1bbIj6N.js.map → chunk-727SXJPM-CNNkFQDE.js.map} +1 -1
  13. package/dist/static/assets/{chunk-AQP2D5EJ-Wv0w6wvH.js → chunk-AQP2D5EJ-BmW_1ljM.js} +2 -2
  14. package/dist/static/assets/{chunk-AQP2D5EJ-Wv0w6wvH.js.map → chunk-AQP2D5EJ-BmW_1ljM.js.map} +1 -1
  15. package/dist/static/assets/{chunk-KSCS5N6A-BZrceHGX.js → chunk-KSCS5N6A-B2emJsw5.js} +3 -3
  16. package/dist/static/assets/{chunk-KSCS5N6A-BZrceHGX.js.map → chunk-KSCS5N6A-B2emJsw5.js.map} +1 -1
  17. package/dist/static/assets/{chunk-L5ZTLDWV-BAcjEn3C.js → chunk-L5ZTLDWV-DZfwPtSD.js} +2 -2
  18. package/dist/static/assets/{chunk-L5ZTLDWV-BAcjEn3C.js.map → chunk-L5ZTLDWV-DZfwPtSD.js.map} +1 -1
  19. package/dist/static/assets/{chunk-O5CBEL6O-KRO56hHQ.js → chunk-O5CBEL6O-CNfA3Ek9.js} +2 -2
  20. package/dist/static/assets/{chunk-O5CBEL6O-KRO56hHQ.js.map → chunk-O5CBEL6O-CNfA3Ek9.js.map} +1 -1
  21. package/dist/static/assets/classDiagram-4FO5ZUOK-BRBJdDvt.js +2 -0
  22. package/dist/static/assets/{classDiagram-4FO5ZUOK-oexPF7ww.js.map → classDiagram-4FO5ZUOK-BRBJdDvt.js.map} +1 -1
  23. package/dist/static/assets/classDiagram-v2-Q7XG4LA2-CQjk9kLc.js +2 -0
  24. package/dist/static/assets/{classDiagram-v2-Q7XG4LA2-Dc4jeSLj.js.map → classDiagram-v2-Q7XG4LA2-CQjk9kLc.js.map} +1 -1
  25. package/dist/static/assets/{dagre-BM42HDAG-au4dCVgC.js → dagre-BM42HDAG-DovnSGTF.js} +2 -2
  26. package/dist/static/assets/{dagre-BM42HDAG-au4dCVgC.js.map → dagre-BM42HDAG-DovnSGTF.js.map} +1 -1
  27. package/dist/static/assets/{diagram-2AECGRRQ-rJMnDhBW.js → diagram-2AECGRRQ-DL9VAGtd.js} +2 -2
  28. package/dist/static/assets/{diagram-2AECGRRQ-rJMnDhBW.js.map → diagram-2AECGRRQ-DL9VAGtd.js.map} +1 -1
  29. package/dist/static/assets/{diagram-5GNKFQAL-diIxjA-v.js → diagram-5GNKFQAL-Crr9YjF6.js} +2 -2
  30. package/dist/static/assets/{diagram-5GNKFQAL-diIxjA-v.js.map → diagram-5GNKFQAL-Crr9YjF6.js.map} +1 -1
  31. package/dist/static/assets/{diagram-KO2AKTUF-D9IYocVR.js → diagram-KO2AKTUF-B3yOnGTs.js} +2 -2
  32. package/dist/static/assets/{diagram-KO2AKTUF-D9IYocVR.js.map → diagram-KO2AKTUF-B3yOnGTs.js.map} +1 -1
  33. package/dist/static/assets/{diagram-LMA3HP47-BtdvpqaH.js → diagram-LMA3HP47-KALO7OjG.js} +2 -2
  34. package/dist/static/assets/{diagram-LMA3HP47-BtdvpqaH.js.map → diagram-LMA3HP47-KALO7OjG.js.map} +1 -1
  35. package/dist/static/assets/{diagram-OG6HWLK6-CaRkxDoj.js → diagram-OG6HWLK6-D0GPjAxV.js} +2 -2
  36. package/dist/static/assets/{diagram-OG6HWLK6-CaRkxDoj.js.map → diagram-OG6HWLK6-D0GPjAxV.js.map} +1 -1
  37. package/dist/static/assets/{erDiagram-TEJ5UH35-CgifrqeZ.js → erDiagram-TEJ5UH35-ksCvepnP.js} +2 -2
  38. package/dist/static/assets/{erDiagram-TEJ5UH35-CgifrqeZ.js.map → erDiagram-TEJ5UH35-ksCvepnP.js.map} +1 -1
  39. package/dist/static/assets/{flowDiagram-I6XJVG4X-DaguIeM_.js → flowDiagram-I6XJVG4X-BT1bpfq2.js} +2 -2
  40. package/dist/static/assets/{flowDiagram-I6XJVG4X-DaguIeM_.js.map → flowDiagram-I6XJVG4X-BT1bpfq2.js.map} +1 -1
  41. package/dist/static/assets/ganttDiagram-6RSMTGT7-Cg3QTIl7.js +293 -0
  42. package/dist/static/assets/ganttDiagram-6RSMTGT7-Cg3QTIl7.js.map +1 -0
  43. package/dist/static/assets/{gitGraphDiagram-PVQCEYII-Ht-SDjxh.js → gitGraphDiagram-PVQCEYII-AW-DbGHw.js} +2 -2
  44. package/dist/static/assets/{gitGraphDiagram-PVQCEYII-Ht-SDjxh.js.map → gitGraphDiagram-PVQCEYII-AW-DbGHw.js.map} +1 -1
  45. package/dist/static/assets/index-B1CSiQFH.js +260 -0
  46. package/dist/static/assets/index-B1CSiQFH.js.map +1 -0
  47. package/dist/static/assets/{index-luXiT-gK.css → index-BJZaWHUt.css} +1 -1
  48. package/dist/static/assets/{infoDiagram-5YYISTIA-CwLGA7Zu.js → infoDiagram-5YYISTIA-DZzRjoNy.js} +2 -2
  49. package/dist/static/assets/{infoDiagram-5YYISTIA-CwLGA7Zu.js.map → infoDiagram-5YYISTIA-DZzRjoNy.js.map} +1 -1
  50. package/dist/static/assets/init-D6CV0rqX.js +2 -0
  51. package/dist/static/assets/{init-Dfd1k18d.js.map → init-D6CV0rqX.js.map} +1 -1
  52. package/dist/static/assets/{ishikawaDiagram-YF4QCWOH-CaZCrUUR.js → ishikawaDiagram-YF4QCWOH-A-bX4Zu0.js} +2 -2
  53. package/dist/static/assets/{ishikawaDiagram-YF4QCWOH-CaZCrUUR.js.map → ishikawaDiagram-YF4QCWOH-A-bX4Zu0.js.map} +1 -1
  54. package/dist/static/assets/{kanban-definition-UN3LZRKU-DlYha85J.js → kanban-definition-UN3LZRKU-ibATe6sx.js} +2 -2
  55. package/dist/static/assets/{kanban-definition-UN3LZRKU-DlYha85J.js.map → kanban-definition-UN3LZRKU-ibATe6sx.js.map} +1 -1
  56. package/dist/static/assets/{line-GCwXS1Fi.js → line-DvIoplHa.js} +2 -2
  57. package/dist/static/assets/{line-GCwXS1Fi.js.map → line-DvIoplHa.js.map} +1 -1
  58. package/dist/static/assets/linear-D0P02-YR.js +2 -0
  59. package/dist/static/assets/{linear-CTnL8jvu.js.map → linear-D0P02-YR.js.map} +1 -1
  60. package/dist/static/assets/{mindmap-definition-RKZ34NQL-CPJIWJdQ.js → mindmap-definition-RKZ34NQL-BYhA5Frb.js} +2 -2
  61. package/dist/static/assets/{mindmap-definition-RKZ34NQL-CPJIWJdQ.js.map → mindmap-definition-RKZ34NQL-BYhA5Frb.js.map} +1 -1
  62. package/dist/static/assets/{ordinal-DjeI0KOh.js → ordinal-D-PEDSg4.js} +2 -2
  63. package/dist/static/assets/{ordinal-DjeI0KOh.js.map → ordinal-D-PEDSg4.js.map} +1 -1
  64. package/dist/static/assets/{pieDiagram-4H26LBE5-DTVmF_CH.js → pieDiagram-4H26LBE5-qud9ZeDs.js} +2 -2
  65. package/dist/static/assets/{pieDiagram-4H26LBE5-DTVmF_CH.js.map → pieDiagram-4H26LBE5-qud9ZeDs.js.map} +1 -1
  66. package/dist/static/assets/{quadrantDiagram-W4KKPZXB-Bho6zy_y.js → quadrantDiagram-W4KKPZXB-B5lPA7rJ.js} +2 -2
  67. package/dist/static/assets/{quadrantDiagram-W4KKPZXB-Bho6zy_y.js.map → quadrantDiagram-W4KKPZXB-B5lPA7rJ.js.map} +1 -1
  68. package/dist/static/assets/{requirementDiagram-4Y6WPE33-CLyoVwlh.js → requirementDiagram-4Y6WPE33-C0mLADne.js} +2 -2
  69. package/dist/static/assets/{requirementDiagram-4Y6WPE33-CLyoVwlh.js.map → requirementDiagram-4Y6WPE33-C0mLADne.js.map} +1 -1
  70. package/dist/static/assets/{sankeyDiagram-5OEKKPKP-V2yvk-0Z.js → sankeyDiagram-5OEKKPKP-vwfoPxTH.js} +2 -2
  71. package/dist/static/assets/{sankeyDiagram-5OEKKPKP-V2yvk-0Z.js.map → sankeyDiagram-5OEKKPKP-vwfoPxTH.js.map} +1 -1
  72. package/dist/static/assets/{sequenceDiagram-3UESZ5HK-Dp03aXVk.js → sequenceDiagram-3UESZ5HK-DtPUE6ba.js} +2 -2
  73. package/dist/static/assets/{sequenceDiagram-3UESZ5HK-Dp03aXVk.js.map → sequenceDiagram-3UESZ5HK-DtPUE6ba.js.map} +1 -1
  74. package/dist/static/assets/{stateDiagram-AJRCARHV-BEJW-_HK.js → stateDiagram-AJRCARHV-BaeNtGLJ.js} +2 -2
  75. package/dist/static/assets/{stateDiagram-AJRCARHV-BEJW-_HK.js.map → stateDiagram-AJRCARHV-BaeNtGLJ.js.map} +1 -1
  76. package/dist/static/assets/stateDiagram-v2-BHNVJYJU-DbTX_m6G.js +2 -0
  77. package/dist/static/assets/{stateDiagram-v2-BHNVJYJU-Bo19-vKE.js.map → stateDiagram-v2-BHNVJYJU-DbTX_m6G.js.map} +1 -1
  78. package/dist/static/assets/{timeline-definition-PNZ67QCA-C4KTq0mQ.js → timeline-definition-PNZ67QCA-C9H1UzNY.js} +2 -2
  79. package/dist/static/assets/{timeline-definition-PNZ67QCA-C4KTq0mQ.js.map → timeline-definition-PNZ67QCA-C9H1UzNY.js.map} +1 -1
  80. package/dist/static/assets/{vennDiagram-CIIHVFJN-1jmBZPSZ.js → vennDiagram-CIIHVFJN-BpQ2qCN5.js} +2 -2
  81. package/dist/static/assets/{vennDiagram-CIIHVFJN-1jmBZPSZ.js.map → vennDiagram-CIIHVFJN-BpQ2qCN5.js.map} +1 -1
  82. package/dist/static/assets/{wardleyDiagram-YWT4CUSO-A8XYzYTW.js → wardleyDiagram-YWT4CUSO-CQ8dLujr.js} +2 -2
  83. package/dist/static/assets/{wardleyDiagram-YWT4CUSO-A8XYzYTW.js.map → wardleyDiagram-YWT4CUSO-CQ8dLujr.js.map} +1 -1
  84. package/dist/static/assets/{xychartDiagram-2RQKCTM6-CuyUQvFt.js → xychartDiagram-2RQKCTM6-BCRK_Cs-.js} +4 -4
  85. package/dist/static/assets/xychartDiagram-2RQKCTM6-BCRK_Cs-.js.map +1 -0
  86. package/dist/static/index.html +14 -10
  87. package/package.json +14 -13
  88. package/dist/static/assets/classDiagram-4FO5ZUOK-oexPF7ww.js +0 -2
  89. package/dist/static/assets/classDiagram-v2-Q7XG4LA2-Dc4jeSLj.js +0 -2
  90. package/dist/static/assets/ganttDiagram-6RSMTGT7-DIFubQTa.js +0 -293
  91. package/dist/static/assets/ganttDiagram-6RSMTGT7-DIFubQTa.js.map +0 -1
  92. package/dist/static/assets/index-D5tmHkO_.js +0 -228
  93. package/dist/static/assets/index-D5tmHkO_.js.map +0 -1
  94. package/dist/static/assets/init-Dfd1k18d.js +0 -2
  95. package/dist/static/assets/linear-CTnL8jvu.js +0 -2
  96. package/dist/static/assets/stateDiagram-v2-BHNVJYJU-Bo19-vKE.js +0 -2
  97. package/dist/static/assets/xychartDiagram-2RQKCTM6-CuyUQvFt.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"gitGraphDiagram-PVQCEYII-Ht-SDjxh.js","names":["select"],"sources":["../../../../../node_modules/.pnpm/mermaid@11.15.0/node_modules/mermaid/dist/chunks/mermaid.core/gitGraphDiagram-PVQCEYII.mjs"],"sourcesContent":["import {\n populateCommonDb\n} from \"./chunk-4BX2VUAB.mjs\";\nimport {\n ImperativeState\n} from \"./chunk-QZHKN3VN.mjs\";\nimport {\n cleanAndMerge,\n random,\n utils_default\n} from \"./chunk-5ZQYHXKU.mjs\";\nimport {\n clear,\n common_default,\n defaultConfig_default,\n getAccDescription,\n getAccTitle,\n getConfig,\n getConfig2,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle,\n setupGraphViewbox2 as setupGraphViewbox\n} from \"./chunk-CSCIHK7Q.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/git/gitGraphParser.ts\nimport { parse } from \"@mermaid-js/parser\";\n\n// src/diagrams/git/gitGraphTypes.ts\nvar commitType = {\n NORMAL: 0,\n REVERSE: 1,\n HIGHLIGHT: 2,\n MERGE: 3,\n CHERRY_PICK: 4\n};\n\n// src/diagrams/git/gitGraphAst.ts\nvar DEFAULT_GITGRAPH_CONFIG = defaultConfig_default.gitGraph;\nvar getConfig3 = /* @__PURE__ */ __name(() => {\n const config = cleanAndMerge({\n ...DEFAULT_GITGRAPH_CONFIG,\n ...getConfig().gitGraph\n });\n return config;\n}, \"getConfig\");\nvar state = new ImperativeState(() => {\n const config = getConfig3();\n const mainBranchName = config.mainBranchName;\n const mainBranchOrder = config.mainBranchOrder;\n return {\n mainBranchName,\n commits: /* @__PURE__ */ new Map(),\n head: null,\n branchConfig: /* @__PURE__ */ new Map([[mainBranchName, { name: mainBranchName, order: mainBranchOrder }]]),\n branches: /* @__PURE__ */ new Map([[mainBranchName, null]]),\n currBranch: mainBranchName,\n direction: \"LR\",\n seq: 0,\n options: {}\n };\n});\nfunction getID() {\n return random({ length: 7 });\n}\n__name(getID, \"getID\");\nfunction uniqBy(list, fn) {\n const recordMap = /* @__PURE__ */ Object.create(null);\n return list.reduce((out, item) => {\n const key = fn(item);\n if (!recordMap[key]) {\n recordMap[key] = true;\n out.push(item);\n }\n return out;\n }, []);\n}\n__name(uniqBy, \"uniqBy\");\nvar setDirection = /* @__PURE__ */ __name(function(dir2) {\n state.records.direction = dir2;\n}, \"setDirection\");\nvar setOptions = /* @__PURE__ */ __name(function(rawOptString) {\n log.debug(\"options str\", rawOptString);\n rawOptString = rawOptString?.trim();\n rawOptString = rawOptString || \"{}\";\n try {\n state.records.options = JSON.parse(rawOptString);\n } catch (e) {\n log.error(\"error while parsing gitGraph options\", e.message);\n }\n}, \"setOptions\");\nvar getOptions = /* @__PURE__ */ __name(function() {\n return state.records.options;\n}, \"getOptions\");\nvar commit = /* @__PURE__ */ __name(function(commitDB) {\n let msg = commitDB.msg;\n let id = commitDB.id;\n const type = commitDB.type;\n let tags = commitDB.tags;\n log.info(\"commit\", msg, id, type, tags);\n log.debug(\"Entering commit:\", msg, id, type, tags);\n const config = getConfig3();\n id = common_default.sanitizeText(id, config);\n msg = common_default.sanitizeText(msg, config);\n tags = tags?.map((tag) => common_default.sanitizeText(tag, config));\n const newCommit = {\n id: id ? id : state.records.seq + \"-\" + getID(),\n message: msg,\n seq: state.records.seq++,\n type: type ?? commitType.NORMAL,\n tags: tags ?? [],\n parents: state.records.head == null ? [] : [state.records.head.id],\n branch: state.records.currBranch\n };\n state.records.head = newCommit;\n log.info(\"main branch\", config.mainBranchName);\n if (state.records.commits.has(newCommit.id)) {\n log.warn(`Commit ID ${newCommit.id} already exists`);\n }\n state.records.commits.set(newCommit.id, newCommit);\n state.records.branches.set(state.records.currBranch, newCommit.id);\n log.debug(\"in pushCommit \" + newCommit.id);\n}, \"commit\");\nvar branch = /* @__PURE__ */ __name(function(branchDB) {\n let name = branchDB.name;\n const order = branchDB.order;\n name = common_default.sanitizeText(name, getConfig3());\n if (state.records.branches.has(name)) {\n throw new Error(\n `Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using \"checkout ${name}\")`\n );\n }\n state.records.branches.set(name, state.records.head != null ? state.records.head.id : null);\n state.records.branchConfig.set(name, { name, order });\n checkout(name);\n log.debug(\"in createBranch\");\n}, \"branch\");\nvar merge = /* @__PURE__ */ __name((mergeDB) => {\n let otherBranch = mergeDB.branch;\n let customId = mergeDB.id;\n const overrideType = mergeDB.type;\n const customTags = mergeDB.tags;\n const config = getConfig3();\n otherBranch = common_default.sanitizeText(otherBranch, config);\n if (customId) {\n customId = common_default.sanitizeText(customId, config);\n }\n const currentBranchCheck = state.records.branches.get(state.records.currBranch);\n const otherBranchCheck = state.records.branches.get(otherBranch);\n const currentCommit = currentBranchCheck ? state.records.commits.get(currentBranchCheck) : void 0;\n const otherCommit = otherBranchCheck ? state.records.commits.get(otherBranchCheck) : void 0;\n if (currentCommit && otherCommit && currentCommit.branch === otherBranch) {\n throw new Error(`Cannot merge branch '${otherBranch}' into itself.`);\n }\n if (state.records.currBranch === otherBranch) {\n const error = new Error('Incorrect usage of \"merge\". Cannot merge a branch to itself');\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [\"branch abc\"]\n };\n throw error;\n }\n if (currentCommit === void 0 || !currentCommit) {\n const error = new Error(\n `Incorrect usage of \"merge\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [\"commit\"]\n };\n throw error;\n }\n if (!state.records.branches.has(otherBranch)) {\n const error = new Error(\n 'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + \") does not exist\"\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [`branch ${otherBranch}`]\n };\n throw error;\n }\n if (otherCommit === void 0 || !otherCommit) {\n const error = new Error(\n 'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + \") has no commits\"\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: ['\"commit\"']\n };\n throw error;\n }\n if (currentCommit === otherCommit) {\n const error = new Error('Incorrect usage of \"merge\". Both branches have same head');\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [\"branch abc\"]\n };\n throw error;\n }\n if (customId && state.records.commits.has(customId)) {\n const error = new Error(\n 'Incorrect usage of \"merge\". Commit with id:' + customId + \" already exists, use different custom id\"\n );\n error.hash = {\n text: `merge ${otherBranch} ${customId} ${overrideType} ${customTags?.join(\" \")}`,\n token: `merge ${otherBranch} ${customId} ${overrideType} ${customTags?.join(\" \")}`,\n expected: [\n `merge ${otherBranch} ${customId}_UNIQUE ${overrideType} ${customTags?.join(\" \")}`\n ]\n };\n throw error;\n }\n const verifiedBranch = otherBranchCheck ? otherBranchCheck : \"\";\n const commit2 = {\n id: customId || `${state.records.seq}-${getID()}`,\n message: `merged branch ${otherBranch} into ${state.records.currBranch}`,\n seq: state.records.seq++,\n parents: state.records.head == null ? [] : [state.records.head.id, verifiedBranch],\n branch: state.records.currBranch,\n type: commitType.MERGE,\n customType: overrideType,\n customId: customId ? true : false,\n tags: customTags ?? []\n };\n state.records.head = commit2;\n state.records.commits.set(commit2.id, commit2);\n state.records.branches.set(state.records.currBranch, commit2.id);\n log.debug(state.records.branches);\n log.debug(\"in mergeBranch\");\n}, \"merge\");\nvar cherryPick = /* @__PURE__ */ __name(function(cherryPickDB) {\n let sourceId = cherryPickDB.id;\n let targetId = cherryPickDB.targetId;\n let tags = cherryPickDB.tags;\n let parentCommitId = cherryPickDB.parent;\n log.debug(\"Entering cherryPick:\", sourceId, targetId, tags);\n const config = getConfig3();\n sourceId = common_default.sanitizeText(sourceId, config);\n targetId = common_default.sanitizeText(targetId, config);\n tags = tags?.map((tag) => common_default.sanitizeText(tag, config));\n parentCommitId = common_default.sanitizeText(parentCommitId, config);\n if (!sourceId || !state.records.commits.has(sourceId)) {\n const error = new Error(\n 'Incorrect usage of \"cherryPick\". Source commit id should exist and provided'\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const sourceCommit = state.records.commits.get(sourceId);\n if (sourceCommit === void 0 || !sourceCommit) {\n throw new Error('Incorrect usage of \"cherryPick\". Source commit id should exist and provided');\n }\n if (parentCommitId && !(Array.isArray(sourceCommit.parents) && sourceCommit.parents.includes(parentCommitId))) {\n const error = new Error(\n \"Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.\"\n );\n throw error;\n }\n const sourceCommitBranch = sourceCommit.branch;\n if (sourceCommit.type === commitType.MERGE && !parentCommitId) {\n const error = new Error(\n \"Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.\"\n );\n throw error;\n }\n if (!targetId || !state.records.commits.has(targetId)) {\n if (sourceCommitBranch === state.records.currBranch) {\n const error = new Error(\n 'Incorrect usage of \"cherryPick\". Source commit is already on current branch'\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const currentCommitId = state.records.branches.get(state.records.currBranch);\n if (currentCommitId === void 0 || !currentCommitId) {\n const error = new Error(\n `Incorrect usage of \"cherry-pick\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const currentCommit = state.records.commits.get(currentCommitId);\n if (currentCommit === void 0 || !currentCommit) {\n const error = new Error(\n `Incorrect usage of \"cherry-pick\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const commit2 = {\n id: state.records.seq + \"-\" + getID(),\n message: `cherry-picked ${sourceCommit?.message} into ${state.records.currBranch}`,\n seq: state.records.seq++,\n parents: state.records.head == null ? [] : [state.records.head.id, sourceCommit.id],\n branch: state.records.currBranch,\n type: commitType.CHERRY_PICK,\n tags: tags ? tags.filter(Boolean) : [\n `cherry-pick:${sourceCommit.id}${sourceCommit.type === commitType.MERGE ? `|parent:${parentCommitId}` : \"\"}`\n ]\n };\n state.records.head = commit2;\n state.records.commits.set(commit2.id, commit2);\n state.records.branches.set(state.records.currBranch, commit2.id);\n log.debug(state.records.branches);\n log.debug(\"in cherryPick\");\n }\n}, \"cherryPick\");\nvar checkout = /* @__PURE__ */ __name(function(branch2) {\n branch2 = common_default.sanitizeText(branch2, getConfig3());\n if (!state.records.branches.has(branch2)) {\n const error = new Error(\n `Trying to checkout branch which is not yet created. (Help try using \"branch ${branch2}\")`\n );\n error.hash = {\n text: `checkout ${branch2}`,\n token: `checkout ${branch2}`,\n expected: [`branch ${branch2}`]\n };\n throw error;\n } else {\n state.records.currBranch = branch2;\n const id = state.records.branches.get(state.records.currBranch);\n if (id === void 0 || !id) {\n state.records.head = null;\n } else {\n state.records.head = state.records.commits.get(id) ?? null;\n }\n }\n}, \"checkout\");\nfunction upsert(arr, key, newVal) {\n const index = arr.indexOf(key);\n if (index === -1) {\n arr.push(newVal);\n } else {\n arr.splice(index, 1, newVal);\n }\n}\n__name(upsert, \"upsert\");\nfunction prettyPrintCommitHistory(commitArr) {\n const commit2 = commitArr.reduce((out, commit3) => {\n if (out.seq > commit3.seq) {\n return out;\n }\n return commit3;\n }, commitArr[0]);\n let line = \"\";\n commitArr.forEach(function(c) {\n if (c === commit2) {\n line += \"\t*\";\n } else {\n line += \"\t|\";\n }\n });\n const label = [line, commit2.id, commit2.seq];\n for (const branch2 in state.records.branches) {\n if (state.records.branches.get(branch2) === commit2.id) {\n label.push(branch2);\n }\n }\n log.debug(label.join(\" \"));\n if (commit2.parents && commit2.parents.length == 2 && commit2.parents[0] && commit2.parents[1]) {\n const newCommit = state.records.commits.get(commit2.parents[0]);\n upsert(commitArr, commit2, newCommit);\n if (commit2.parents[1]) {\n commitArr.push(state.records.commits.get(commit2.parents[1]));\n }\n } else if (commit2.parents.length == 0) {\n return;\n } else {\n if (commit2.parents[0]) {\n const newCommit = state.records.commits.get(commit2.parents[0]);\n upsert(commitArr, commit2, newCommit);\n }\n }\n commitArr = uniqBy(commitArr, (c) => c.id);\n prettyPrintCommitHistory(commitArr);\n}\n__name(prettyPrintCommitHistory, \"prettyPrintCommitHistory\");\nvar prettyPrint = /* @__PURE__ */ __name(function() {\n log.debug(state.records.commits);\n const node = getCommitsArray()[0];\n prettyPrintCommitHistory([node]);\n}, \"prettyPrint\");\nvar clear2 = /* @__PURE__ */ __name(function() {\n state.reset();\n clear();\n}, \"clear\");\nvar getBranchesAsObjArray = /* @__PURE__ */ __name(function() {\n const branchesArray = [...state.records.branchConfig.values()].map((branchConfig, i) => {\n if (branchConfig.order !== null && branchConfig.order !== void 0) {\n return branchConfig;\n }\n return {\n ...branchConfig,\n order: parseFloat(`0.${i}`)\n };\n }).sort((a, b) => (a.order ?? 0) - (b.order ?? 0)).map(({ name }) => ({ name }));\n return branchesArray;\n}, \"getBranchesAsObjArray\");\nvar getBranches = /* @__PURE__ */ __name(function() {\n return state.records.branches;\n}, \"getBranches\");\nvar getCommits = /* @__PURE__ */ __name(function() {\n return state.records.commits;\n}, \"getCommits\");\nvar getCommitsArray = /* @__PURE__ */ __name(function() {\n const commitArr = [...state.records.commits.values()];\n commitArr.forEach(function(o) {\n log.debug(o.id);\n });\n commitArr.sort((a, b) => a.seq - b.seq);\n return commitArr;\n}, \"getCommitsArray\");\nvar getCurrentBranch = /* @__PURE__ */ __name(function() {\n return state.records.currBranch;\n}, \"getCurrentBranch\");\nvar getDirection = /* @__PURE__ */ __name(function() {\n return state.records.direction;\n}, \"getDirection\");\nvar getHead = /* @__PURE__ */ __name(function() {\n return state.records.head;\n}, \"getHead\");\nvar db = {\n commitType,\n getConfig: getConfig3,\n setDirection,\n setOptions,\n getOptions,\n commit,\n branch,\n merge,\n cherryPick,\n checkout,\n //reset,\n prettyPrint,\n clear: clear2,\n getBranchesAsObjArray,\n getBranches,\n getCommits,\n getCommitsArray,\n getCurrentBranch,\n getDirection,\n getHead,\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n setDiagramTitle,\n getDiagramTitle\n};\n\n// src/diagrams/git/gitGraphParser.ts\nvar populate = /* @__PURE__ */ __name((ast, db2) => {\n populateCommonDb(ast, db2);\n if (ast.dir) {\n db2.setDirection(ast.dir);\n }\n for (const statement of ast.statements) {\n parseStatement(statement, db2);\n }\n}, \"populate\");\nvar parseStatement = /* @__PURE__ */ __name((statement, db2) => {\n const parsers = {\n Commit: /* @__PURE__ */ __name((stmt) => db2.commit(parseCommit(stmt)), \"Commit\"),\n Branch: /* @__PURE__ */ __name((stmt) => db2.branch(parseBranch(stmt)), \"Branch\"),\n Merge: /* @__PURE__ */ __name((stmt) => db2.merge(parseMerge(stmt)), \"Merge\"),\n Checkout: /* @__PURE__ */ __name((stmt) => db2.checkout(parseCheckout(stmt)), \"Checkout\"),\n CherryPicking: /* @__PURE__ */ __name((stmt) => db2.cherryPick(parseCherryPicking(stmt)), \"CherryPicking\")\n };\n const parser2 = parsers[statement.$type];\n if (parser2) {\n parser2(statement);\n } else {\n log.error(`Unknown statement type: ${statement.$type}`);\n }\n}, \"parseStatement\");\nvar parseCommit = /* @__PURE__ */ __name((commit2) => {\n const commitDB = {\n id: commit2.id,\n msg: commit2.message ?? \"\",\n type: commit2.type !== void 0 ? commitType[commit2.type] : commitType.NORMAL,\n tags: commit2.tags ?? void 0\n };\n return commitDB;\n}, \"parseCommit\");\nvar parseBranch = /* @__PURE__ */ __name((branch2) => {\n const branchDB = {\n name: branch2.name,\n order: branch2.order ?? 0\n };\n return branchDB;\n}, \"parseBranch\");\nvar parseMerge = /* @__PURE__ */ __name((merge2) => {\n const mergeDB = {\n branch: merge2.branch,\n id: merge2.id ?? \"\",\n type: merge2.type !== void 0 ? commitType[merge2.type] : void 0,\n tags: merge2.tags ?? void 0\n };\n return mergeDB;\n}, \"parseMerge\");\nvar parseCheckout = /* @__PURE__ */ __name((checkout2) => {\n const branch2 = checkout2.branch;\n return branch2;\n}, \"parseCheckout\");\nvar parseCherryPicking = /* @__PURE__ */ __name((cherryPicking) => {\n const cherryPickDB = {\n id: cherryPicking.id,\n targetId: \"\",\n tags: cherryPicking.tags?.length === 0 ? void 0 : cherryPicking.tags,\n parent: cherryPicking.parent\n };\n return cherryPickDB;\n}, \"parseCherryPicking\");\nvar parser = {\n parse: /* @__PURE__ */ __name(async (input) => {\n const ast = await parse(\"gitGraph\", input);\n log.debug(ast);\n populate(ast, db);\n }, \"parse\")\n};\nif (void 0) {\n const { it, expect, describe } = void 0;\n const mockDB = {\n commitType,\n setDirection: vi.fn(),\n commit: vi.fn(),\n branch: vi.fn(),\n merge: vi.fn(),\n cherryPick: vi.fn(),\n checkout: vi.fn()\n };\n describe(\"GitGraph Parser\", () => {\n it(\"should parse a commit statement\", () => {\n const commit2 = {\n $type: \"Commit\",\n id: \"1\",\n message: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n };\n parseStatement(commit2, mockDB);\n expect(mockDB.commit).toHaveBeenCalledWith({\n id: \"1\",\n msg: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n });\n it(\"should parse a branch statement\", () => {\n const branch2 = {\n $type: \"Branch\",\n name: \"newBranch\",\n order: 1\n };\n parseStatement(branch2, mockDB);\n expect(mockDB.branch).toHaveBeenCalledWith({ name: \"newBranch\", order: 1 });\n });\n it(\"should parse a checkout statement\", () => {\n const checkout2 = {\n $type: \"Checkout\",\n branch: \"newBranch\"\n };\n parseStatement(checkout2, mockDB);\n expect(mockDB.checkout).toHaveBeenCalledWith(\"newBranch\");\n });\n it(\"should parse a merge statement\", () => {\n const merge2 = {\n $type: \"Merge\",\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n };\n parseStatement(merge2, mockDB);\n expect(mockDB.merge).toHaveBeenCalledWith({\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n });\n it(\"should parse a cherry picking statement\", () => {\n const cherryPick2 = {\n $type: \"CherryPicking\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n parent: \"2\"\n };\n parseStatement(cherryPick2, mockDB);\n expect(mockDB.cherryPick).toHaveBeenCalledWith({\n id: \"1\",\n targetId: \"\",\n parent: \"2\",\n tags: [\"tag1\", \"tag2\"]\n });\n });\n it(\"should parse a langium generated gitGraph ast\", () => {\n const dummy = {\n $type: \"GitGraph\",\n statements: [],\n accDescr: \"\",\n accTitle: \"\",\n title: \"\"\n };\n const gitGraphAst = {\n $type: \"GitGraph\",\n statements: [\n {\n $container: dummy,\n $type: \"Commit\",\n id: \"1\",\n message: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n },\n {\n $container: dummy,\n $type: \"Branch\",\n name: \"newBranch\",\n order: 1\n },\n {\n $container: dummy,\n $type: \"Merge\",\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n },\n {\n $container: dummy,\n $type: \"Checkout\",\n branch: \"newBranch\"\n },\n {\n $container: dummy,\n $type: \"CherryPicking\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n parent: \"2\"\n }\n ],\n accDescr: \"\",\n accTitle: \"\",\n title: \"\"\n };\n populate(gitGraphAst, mockDB);\n expect(mockDB.commit).toHaveBeenCalledWith({\n id: \"1\",\n msg: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n expect(mockDB.branch).toHaveBeenCalledWith({ name: \"newBranch\", order: 1 });\n expect(mockDB.merge).toHaveBeenCalledWith({\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n expect(mockDB.checkout).toHaveBeenCalledWith(\"newBranch\");\n });\n });\n}\n\n// src/diagrams/git/gitGraphRenderer.ts\nimport { select } from \"d3\";\nvar LAYOUT_OFFSET = 10;\nvar COMMIT_STEP = 40;\nvar PX = 4;\nvar PY = 2;\nvar THEME_COLOR_LIMIT = 8;\nvar REDUX_GEOMETRY_THEMES = /* @__PURE__ */ new Set([\"redux\", \"redux-dark\", \"redux-color\", \"redux-dark-color\"]);\nvar REDUX_BRANCH_LABEL_PADDING_Y = 12;\nvar COLOR_THEMES = /* @__PURE__ */ new Set([\"redux-color\", \"redux-dark-color\"]);\nvar DARK_THEMES = /* @__PURE__ */ new Set([\"dark\", \"redux-dark\", \"redux-dark-color\", \"neo-dark\"]);\nvar calcColorIndex = /* @__PURE__ */ __name((rawIndex, limit, avoidDefaultColor = false) => {\n if (avoidDefaultColor && rawIndex > 0) {\n return (rawIndex - 1) % (limit - 1) + 1;\n }\n return rawIndex % limit;\n}, \"calcColorIndex\");\nvar branchPos = /* @__PURE__ */ new Map();\nvar commitPos = /* @__PURE__ */ new Map();\nvar defaultPos = 30;\nvar allCommitsDict = /* @__PURE__ */ new Map();\nvar lanes = [];\nvar maxPos = 0;\nvar dir = \"LR\";\nvar clear3 = /* @__PURE__ */ __name(() => {\n branchPos.clear();\n commitPos.clear();\n allCommitsDict.clear();\n maxPos = 0;\n lanes = [];\n dir = \"LR\";\n}, \"clear\");\nvar drawText = /* @__PURE__ */ __name((txt) => {\n const svgLabel = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n const rows = typeof txt === \"string\" ? txt.split(/\\\\n|\\n|<br\\s*\\/?>/gi) : txt;\n rows.forEach((row) => {\n const tspan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n tspan.setAttribute(\"dy\", \"1em\");\n tspan.setAttribute(\"x\", \"0\");\n tspan.setAttribute(\"class\", \"row\");\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n });\n return svgLabel;\n}, \"drawText\");\nvar findClosestParent = /* @__PURE__ */ __name((parents) => {\n let closestParent;\n let comparisonFunc;\n let targetPosition;\n if (dir === \"BT\") {\n comparisonFunc = /* @__PURE__ */ __name((a, b) => a <= b, \"comparisonFunc\");\n targetPosition = Infinity;\n } else {\n comparisonFunc = /* @__PURE__ */ __name((a, b) => a >= b, \"comparisonFunc\");\n targetPosition = 0;\n }\n parents.forEach((parent) => {\n const parentPosition = dir === \"TB\" || dir == \"BT\" ? commitPos.get(parent)?.y : commitPos.get(parent)?.x;\n if (parentPosition !== void 0 && comparisonFunc(parentPosition, targetPosition)) {\n closestParent = parent;\n targetPosition = parentPosition;\n }\n });\n return closestParent;\n}, \"findClosestParent\");\nvar findClosestParentBT = /* @__PURE__ */ __name((parents) => {\n let closestParent = \"\";\n let maxPosition = Infinity;\n parents.forEach((parent) => {\n const parentPosition = commitPos.get(parent).y;\n if (parentPosition <= maxPosition) {\n closestParent = parent;\n maxPosition = parentPosition;\n }\n });\n return closestParent || void 0;\n}, \"findClosestParentBT\");\nvar setParallelBTPos = /* @__PURE__ */ __name((sortedKeys, commits, defaultPos2) => {\n let curPos = defaultPos2;\n let maxPosition = defaultPos2;\n const roots = [];\n sortedKeys.forEach((key) => {\n const commit2 = commits.get(key);\n if (!commit2) {\n throw new Error(`Commit not found for key ${key}`);\n }\n if (commit2.parents.length) {\n curPos = calculateCommitPosition(commit2);\n maxPosition = Math.max(curPos, maxPosition);\n } else {\n roots.push(commit2);\n }\n setCommitPosition(commit2, curPos);\n });\n curPos = maxPosition;\n roots.forEach((commit2) => {\n setRootPosition(commit2, curPos, defaultPos2);\n });\n sortedKeys.forEach((key) => {\n const commit2 = commits.get(key);\n if (commit2?.parents.length) {\n const closestParent = findClosestParentBT(commit2.parents);\n curPos = commitPos.get(closestParent).y - COMMIT_STEP;\n if (curPos <= maxPosition) {\n maxPosition = curPos;\n }\n const x = branchPos.get(commit2.branch).pos;\n const y = curPos - LAYOUT_OFFSET;\n commitPos.set(commit2.id, { x, y });\n }\n });\n}, \"setParallelBTPos\");\nvar findClosestParentPos = /* @__PURE__ */ __name((commit2) => {\n const closestParent = findClosestParent(commit2.parents.filter((p) => p !== null));\n if (!closestParent) {\n throw new Error(`Closest parent not found for commit ${commit2.id}`);\n }\n const closestParentPos = commitPos.get(closestParent)?.y;\n if (closestParentPos === void 0) {\n throw new Error(`Closest parent position not found for commit ${commit2.id}`);\n }\n return closestParentPos;\n}, \"findClosestParentPos\");\nvar calculateCommitPosition = /* @__PURE__ */ __name((commit2) => {\n const closestParentPos = findClosestParentPos(commit2);\n return closestParentPos + COMMIT_STEP;\n}, \"calculateCommitPosition\");\nvar setCommitPosition = /* @__PURE__ */ __name((commit2, curPos) => {\n const branch2 = branchPos.get(commit2.branch);\n if (!branch2) {\n throw new Error(`Branch not found for commit ${commit2.id}`);\n }\n const x = branch2.pos;\n const y = curPos + LAYOUT_OFFSET;\n commitPos.set(commit2.id, { x, y });\n return { x, y };\n}, \"setCommitPosition\");\nvar setRootPosition = /* @__PURE__ */ __name((commit2, curPos, defaultPos2) => {\n const branch2 = branchPos.get(commit2.branch);\n if (!branch2) {\n throw new Error(`Branch not found for commit ${commit2.id}`);\n }\n const y = curPos + defaultPos2;\n const x = branch2.pos;\n commitPos.set(commit2.id, { x, y });\n}, \"setRootPosition\");\nvar drawCommitBullet = /* @__PURE__ */ __name((gBullets, commit2, commitPosition, typeClass, branchIndex, commitSymbolType) => {\n const { theme } = getConfig2();\n const useReduxGeometry = REDUX_GEOMETRY_THEMES.has(theme ?? \"\");\n const useColorTheme = COLOR_THEMES.has(theme ?? \"\");\n const isDark = DARK_THEMES.has(theme ?? \"\");\n if (commitSymbolType === commitType.HIGHLIGHT) {\n gBullets.append(\"rect\").attr(\"x\", commitPosition.x - 10 + (useReduxGeometry ? 3 : 0)).attr(\"y\", commitPosition.y - 10 + (useReduxGeometry ? 3 : 0)).attr(\"width\", useReduxGeometry ? 14 : 20).attr(\"height\", useReduxGeometry ? 14 : 20).attr(\n \"class\",\n `commit ${commit2.id} commit-highlight${calcColorIndex(branchIndex, THEME_COLOR_LIMIT, useColorTheme)} ${typeClass}-outer`\n );\n gBullets.append(\"rect\").attr(\"x\", commitPosition.x - 6 + (useReduxGeometry ? 2 : 0)).attr(\"y\", commitPosition.y - 6 + (useReduxGeometry ? 2 : 0)).attr(\"width\", useReduxGeometry ? 8 : 12).attr(\"height\", useReduxGeometry ? 8 : 12).attr(\n \"class\",\n `commit ${commit2.id} commit${calcColorIndex(branchIndex, THEME_COLOR_LIMIT, useColorTheme)} ${typeClass}-inner`\n );\n } else if (commitSymbolType === commitType.CHERRY_PICK) {\n gBullets.append(\"circle\").attr(\"cx\", commitPosition.x).attr(\"cy\", commitPosition.y).attr(\"r\", useReduxGeometry ? 7 : 10).attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"circle\").attr(\"cx\", commitPosition.x - 3).attr(\"cy\", commitPosition.y + 2).attr(\"r\", useReduxGeometry ? 2.5 : 2.75).attr(\"fill\", isDark ? \"#000000\" : \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"circle\").attr(\"cx\", commitPosition.x + 3).attr(\"cy\", commitPosition.y + 2).attr(\"r\", useReduxGeometry ? 2.5 : 2.75).attr(\"fill\", isDark ? \"#000000\" : \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"line\").attr(\"x1\", commitPosition.x + 3).attr(\"y1\", commitPosition.y + 1).attr(\"x2\", commitPosition.x).attr(\"y2\", commitPosition.y - 5).attr(\"stroke\", isDark ? \"#000000\" : \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"line\").attr(\"x1\", commitPosition.x - 3).attr(\"y1\", commitPosition.y + 1).attr(\"x2\", commitPosition.x).attr(\"y2\", commitPosition.y - 5).attr(\"stroke\", isDark ? \"#000000\" : \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n } else {\n const circle = gBullets.append(\"circle\");\n circle.attr(\"cx\", commitPosition.x);\n circle.attr(\"cy\", commitPosition.y);\n circle.attr(\"r\", useReduxGeometry ? 7 : 10);\n circle.attr(\n \"class\",\n `commit ${commit2.id} commit${calcColorIndex(branchIndex, THEME_COLOR_LIMIT, useColorTheme)}`\n );\n if (commitSymbolType === commitType.MERGE) {\n const circle2 = gBullets.append(\"circle\");\n circle2.attr(\"cx\", commitPosition.x);\n circle2.attr(\"cy\", commitPosition.y);\n circle2.attr(\"r\", useReduxGeometry ? 5 : 6);\n circle2.attr(\n \"class\",\n `commit ${typeClass} ${commit2.id} commit${calcColorIndex(branchIndex, THEME_COLOR_LIMIT, useColorTheme)}`\n );\n }\n if (commitSymbolType === commitType.REVERSE) {\n const cross = gBullets.append(\"path\");\n const constValue = useReduxGeometry ? 4 : 5;\n cross.attr(\n \"d\",\n `M ${commitPosition.x - constValue},${commitPosition.y - constValue}L${commitPosition.x + constValue},${commitPosition.y + constValue}M${commitPosition.x - constValue},${commitPosition.y + constValue}L${commitPosition.x + constValue},${commitPosition.y - constValue}`\n ).attr(\n \"class\",\n `commit ${typeClass} ${commit2.id} commit${calcColorIndex(branchIndex, THEME_COLOR_LIMIT, useColorTheme)}`\n );\n }\n }\n}, \"drawCommitBullet\");\nvar drawCommitLabel = /* @__PURE__ */ __name((gLabels, commit2, commitPosition, pos, gitGraphConfig) => {\n if (commit2.type !== commitType.CHERRY_PICK && (commit2.customId && commit2.type === commitType.MERGE || commit2.type !== commitType.MERGE) && gitGraphConfig.showCommitLabel) {\n const wrapper = gLabels.append(\"g\");\n const labelBkg = wrapper.insert(\"rect\").attr(\"class\", \"commit-label-bkg\");\n const text = wrapper.append(\"text\").attr(\"x\", pos).attr(\"y\", commitPosition.y + 25).attr(\"class\", \"commit-label\").text(commit2.id);\n const bbox = text.node()?.getBBox();\n if (bbox) {\n labelBkg.attr(\"x\", commitPosition.posWithOffset - bbox.width / 2 - PY).attr(\"y\", commitPosition.y + 13.5).attr(\"width\", bbox.width + 2 * PY).attr(\"height\", bbox.height + 2 * PY);\n if (dir === \"TB\" || dir === \"BT\") {\n labelBkg.attr(\"x\", commitPosition.x - (bbox.width + 4 * PX + 5)).attr(\"y\", commitPosition.y - 12);\n text.attr(\"x\", commitPosition.x - (bbox.width + 4 * PX)).attr(\"y\", commitPosition.y + bbox.height - 12);\n } else {\n text.attr(\"x\", commitPosition.posWithOffset - bbox.width / 2);\n }\n if (gitGraphConfig.rotateCommitLabel) {\n if (dir === \"TB\" || dir === \"BT\") {\n text.attr(\n \"transform\",\n \"rotate(-45, \" + commitPosition.x + \", \" + commitPosition.y + \")\"\n );\n labelBkg.attr(\n \"transform\",\n \"rotate(-45, \" + commitPosition.x + \", \" + commitPosition.y + \")\"\n );\n } else {\n const r_x = -7.5 - (bbox.width + 10) / 25 * 9.5;\n const r_y = 10 + bbox.width / 25 * 8.5;\n wrapper.attr(\n \"transform\",\n \"translate(\" + r_x + \", \" + r_y + \") rotate(-45, \" + pos + \", \" + commitPosition.y + \")\"\n );\n }\n }\n }\n }\n}, \"drawCommitLabel\");\nvar drawCommitTags = /* @__PURE__ */ __name((gLabels, commit2, commitPosition, pos) => {\n if (commit2.tags.length > 0) {\n let yOffset = 0;\n let maxTagBboxWidth = 0;\n let maxTagBboxHeight = 0;\n const tagElements = [];\n for (const tagValue of commit2.tags.reverse()) {\n const rect = gLabels.insert(\"polygon\");\n const hole = gLabels.append(\"circle\");\n const tag = gLabels.append(\"text\").attr(\"y\", commitPosition.y - 16 - yOffset).attr(\"class\", \"tag-label\").text(tagValue);\n const tagBbox = tag.node()?.getBBox();\n if (!tagBbox) {\n throw new Error(\"Tag bbox not found\");\n }\n maxTagBboxWidth = Math.max(maxTagBboxWidth, tagBbox.width);\n maxTagBboxHeight = Math.max(maxTagBboxHeight, tagBbox.height);\n tag.attr(\"x\", commitPosition.posWithOffset - tagBbox.width / 2);\n tagElements.push({\n tag,\n hole,\n rect,\n yOffset\n });\n yOffset += 20;\n }\n for (const { tag, hole, rect, yOffset: yOffset2 } of tagElements) {\n const h2 = maxTagBboxHeight / 2;\n const ly = commitPosition.y - 19.2 - yOffset2;\n rect.attr(\"class\", \"tag-label-bkg\").attr(\n \"points\",\n `\n ${pos - maxTagBboxWidth / 2 - PX / 2},${ly + PY} \n ${pos - maxTagBboxWidth / 2 - PX / 2},${ly - PY}\n ${commitPosition.posWithOffset - maxTagBboxWidth / 2 - PX},${ly - h2 - PY}\n ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly - h2 - PY}\n ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly + h2 + PY}\n ${commitPosition.posWithOffset - maxTagBboxWidth / 2 - PX},${ly + h2 + PY}`\n );\n hole.attr(\"cy\", ly).attr(\"cx\", pos - maxTagBboxWidth / 2 + PX / 2).attr(\"r\", 1.5).attr(\"class\", \"tag-hole\");\n if (dir === \"TB\" || dir === \"BT\") {\n const yOrigin = pos + yOffset2;\n rect.attr(\"class\", \"tag-label-bkg\").attr(\n \"points\",\n `\n ${commitPosition.x},${yOrigin + 2}\n ${commitPosition.x},${yOrigin - 2}\n ${commitPosition.x + LAYOUT_OFFSET},${yOrigin - h2 - 2}\n ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin - h2 - 2}\n ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin + h2 + 2}\n ${commitPosition.x + LAYOUT_OFFSET},${yOrigin + h2 + 2}`\n ).attr(\"transform\", \"translate(12,12) rotate(45, \" + commitPosition.x + \",\" + pos + \")\");\n hole.attr(\"cx\", commitPosition.x + PX / 2).attr(\"cy\", yOrigin).attr(\"transform\", \"translate(12,12) rotate(45, \" + commitPosition.x + \",\" + pos + \")\");\n tag.attr(\"x\", commitPosition.x + 5).attr(\"y\", yOrigin + 3).attr(\"transform\", \"translate(14,14) rotate(45, \" + commitPosition.x + \",\" + pos + \")\");\n }\n }\n }\n}, \"drawCommitTags\");\nvar getCommitClassType = /* @__PURE__ */ __name((commit2) => {\n const commitSymbolType = commit2.customType ?? commit2.type;\n switch (commitSymbolType) {\n case commitType.NORMAL:\n return \"commit-normal\";\n case commitType.REVERSE:\n return \"commit-reverse\";\n case commitType.HIGHLIGHT:\n return \"commit-highlight\";\n case commitType.MERGE:\n return \"commit-merge\";\n case commitType.CHERRY_PICK:\n return \"commit-cherry-pick\";\n default:\n return \"commit-normal\";\n }\n}, \"getCommitClassType\");\nvar calculatePosition = /* @__PURE__ */ __name((commit2, dir2, pos, commitPos2) => {\n const defaultCommitPosition = { x: 0, y: 0 };\n if (commit2.parents.length > 0) {\n const closestParent = findClosestParent(commit2.parents);\n if (closestParent) {\n const parentPosition = commitPos2.get(closestParent) ?? defaultCommitPosition;\n if (dir2 === \"TB\") {\n return parentPosition.y + COMMIT_STEP;\n } else if (dir2 === \"BT\") {\n const currentPosition = commitPos2.get(commit2.id) ?? defaultCommitPosition;\n return currentPosition.y - COMMIT_STEP;\n } else {\n return parentPosition.x + COMMIT_STEP;\n }\n }\n } else {\n if (dir2 === \"TB\") {\n return defaultPos;\n } else if (dir2 === \"BT\") {\n const currentPosition = commitPos2.get(commit2.id) ?? defaultCommitPosition;\n return currentPosition.y - COMMIT_STEP;\n } else {\n return 0;\n }\n }\n return 0;\n}, \"calculatePosition\");\nvar getCommitPosition = /* @__PURE__ */ __name((commit2, pos, isParallelCommits) => {\n const posWithOffset = dir === \"BT\" && isParallelCommits ? pos : pos + LAYOUT_OFFSET;\n const branchY = branchPos.get(commit2.branch)?.pos;\n const x = dir === \"TB\" || dir === \"BT\" ? branchPos.get(commit2.branch)?.pos : posWithOffset;\n if (x === void 0 || branchY === void 0) {\n throw new Error(`Position were undefined for commit ${commit2.id}`);\n }\n const useReduxGeometry = REDUX_GEOMETRY_THEMES.has(getConfig2().theme ?? \"\");\n const y = dir === \"TB\" || dir === \"BT\" ? posWithOffset : branchY + (useReduxGeometry ? REDUX_BRANCH_LABEL_PADDING_Y / 2 + 1 : -2);\n return { x, y, posWithOffset };\n}, \"getCommitPosition\");\nvar drawCommits = /* @__PURE__ */ __name((svg, commits, modifyGraph, gitGraphConfig) => {\n const gBullets = svg.append(\"g\").attr(\"class\", \"commit-bullets\");\n const gLabels = svg.append(\"g\").attr(\"class\", \"commit-labels\");\n let pos = dir === \"TB\" || dir === \"BT\" ? defaultPos : 0;\n const keys = [...commits.keys()];\n const isParallelCommits = gitGraphConfig.parallelCommits ?? false;\n const sortKeys = /* @__PURE__ */ __name((a, b) => {\n const seqA = commits.get(a)?.seq;\n const seqB = commits.get(b)?.seq;\n return seqA !== void 0 && seqB !== void 0 ? seqA - seqB : 0;\n }, \"sortKeys\");\n let sortedKeys = keys.sort(sortKeys);\n if (dir === \"BT\") {\n if (isParallelCommits) {\n setParallelBTPos(sortedKeys, commits, pos);\n }\n sortedKeys = sortedKeys.reverse();\n }\n sortedKeys.forEach((key) => {\n const commit2 = commits.get(key);\n if (!commit2) {\n throw new Error(`Commit not found for key ${key}`);\n }\n if (isParallelCommits) {\n pos = calculatePosition(commit2, dir, pos, commitPos);\n }\n const commitPosition = getCommitPosition(commit2, pos, isParallelCommits);\n if (modifyGraph) {\n const typeClass = getCommitClassType(commit2);\n const commitSymbolType = commit2.customType ?? commit2.type;\n const branchIndex = branchPos.get(commit2.branch)?.index ?? 0;\n drawCommitBullet(gBullets, commit2, commitPosition, typeClass, branchIndex, commitSymbolType);\n drawCommitLabel(gLabels, commit2, commitPosition, pos, gitGraphConfig);\n drawCommitTags(gLabels, commit2, commitPosition, pos);\n }\n if (dir === \"TB\" || dir === \"BT\") {\n commitPos.set(commit2.id, { x: commitPosition.x, y: commitPosition.posWithOffset });\n } else {\n commitPos.set(commit2.id, { x: commitPosition.posWithOffset, y: commitPosition.y });\n }\n pos = dir === \"BT\" && isParallelCommits ? pos + COMMIT_STEP : pos + COMMIT_STEP + LAYOUT_OFFSET;\n if (pos > maxPos) {\n maxPos = pos;\n }\n });\n}, \"drawCommits\");\nvar shouldRerouteArrow = /* @__PURE__ */ __name((commitA, commitB, p1, p2, allCommits) => {\n const commitBIsFurthest = dir === \"TB\" || dir === \"BT\" ? p1.x < p2.x : p1.y < p2.y;\n const branchToGetCurve = commitBIsFurthest ? commitB.branch : commitA.branch;\n const isOnBranchToGetCurve = /* @__PURE__ */ __name((x) => x.branch === branchToGetCurve, \"isOnBranchToGetCurve\");\n const isBetweenCommits = /* @__PURE__ */ __name((x) => x.seq > commitA.seq && x.seq < commitB.seq, \"isBetweenCommits\");\n return [...allCommits.values()].some((commitX) => {\n return isBetweenCommits(commitX) && isOnBranchToGetCurve(commitX);\n });\n}, \"shouldRerouteArrow\");\nvar findLane = /* @__PURE__ */ __name((y1, y2, depth = 0) => {\n const candidate = y1 + Math.abs(y1 - y2) / 2;\n if (depth > 5) {\n return candidate;\n }\n const ok = lanes.every((lane) => Math.abs(lane - candidate) >= 10);\n if (ok) {\n lanes.push(candidate);\n return candidate;\n }\n const diff = Math.abs(y1 - y2);\n return findLane(y1, y2 - diff / 5, depth + 1);\n}, \"findLane\");\nvar drawArrow = /* @__PURE__ */ __name((svg, commitA, commitB, allCommits) => {\n const { theme: arrowTheme } = getConfig2();\n const useColorTheme = COLOR_THEMES.has(arrowTheme ?? \"\");\n const p1 = commitPos.get(commitA.id);\n const p2 = commitPos.get(commitB.id);\n if (p1 === void 0 || p2 === void 0) {\n throw new Error(`Commit positions not found for commits ${commitA.id} and ${commitB.id}`);\n }\n const arrowNeedsRerouting = shouldRerouteArrow(commitA, commitB, p1, p2, allCommits);\n let arc = \"\";\n let arc2 = \"\";\n let radius = 0;\n let offset = 0;\n let colorClassNum = branchPos.get(commitB.branch)?.index;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n }\n let lineDef;\n if (arrowNeedsRerouting) {\n arc = \"A 10 10, 0, 0, 0,\";\n arc2 = \"A 10 10, 0, 0, 1,\";\n radius = 10;\n offset = 10;\n const lineY = p1.y < p2.y ? findLane(p1.y, p2.y) : findLane(p2.y, p1.y);\n const lineX = p1.x < p2.x ? findLane(p1.x, p2.x) : findLane(p2.x, p1.x);\n if (dir === \"TB\") {\n if (p1.x < p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc2} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc2} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n } else if (dir === \"BT\") {\n if (p1.x < p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc} ${lineX} ${p1.y - offset} L ${lineX} ${p2.y + radius} ${arc2} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc2} ${lineX} ${p1.y - offset} L ${lineX} ${p2.y + radius} ${arc} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n } else {\n if (p1.y < p2.y) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius} ${arc} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc2} ${p2.x} ${lineY + offset} L ${p2.x} ${p2.y}`;\n } else {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius} ${arc2} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc} ${p2.x} ${lineY - offset} L ${p2.x} ${p2.y}`;\n }\n }\n } else {\n arc = \"A 20 20, 0, 0, 0,\";\n arc2 = \"A 20 20, 0, 0, 1,\";\n radius = 20;\n offset = 20;\n if (dir === \"TB\") {\n if (p1.x < p2.x) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x > p2.x) {\n arc = \"A 20 20, 0, 0, 0,\";\n arc2 = \"A 20 20, 0, 0, 1,\";\n radius = 20;\n offset = 20;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc2} ${p1.x - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x + radius} ${p1.y} ${arc} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x === p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n } else if (dir === \"BT\") {\n if (p1.x < p2.x) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc2} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x > p2.x) {\n arc = \"A 20 20, 0, 0, 0,\";\n arc2 = \"A 20 20, 0, 0, 1,\";\n radius = 20;\n offset = 20;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc} ${p1.x - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x + radius} ${p1.y} ${arc2} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x === p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n } else {\n if (p1.y < p2.y) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.y > p2.y) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc2} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.y === p2.y) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n }\n }\n if (lineDef === void 0) {\n throw new Error(\"Line definition not found\");\n }\n svg.append(\"path\").attr(\"d\", lineDef).attr(\n \"class\",\n \"arrow arrow\" + calcColorIndex(colorClassNum, THEME_COLOR_LIMIT, useColorTheme)\n );\n}, \"drawArrow\");\nvar drawArrows = /* @__PURE__ */ __name((svg, commits) => {\n const gArrows = svg.append(\"g\").attr(\"class\", \"commit-arrows\");\n [...commits.keys()].forEach((key) => {\n const commit2 = commits.get(key);\n if (commit2.parents && commit2.parents.length > 0) {\n commit2.parents.forEach((parent) => {\n drawArrow(gArrows, commits.get(parent), commit2, commits);\n });\n }\n });\n}, \"drawArrows\");\nvar drawBranches = /* @__PURE__ */ __name((svg, branches, gitGraphConfig, id) => {\n const { look, theme, themeVariables } = getConfig2();\n const { dropShadow, THEME_COLOR_LIMIT: themeColorLimit } = themeVariables;\n const useReduxGeometry = REDUX_GEOMETRY_THEMES.has(theme ?? \"\");\n const useColorTheme = COLOR_THEMES.has(theme ?? \"\");\n const g = svg.append(\"g\");\n branches.forEach((branch2, index) => {\n const adjustIndexForTheme = calcColorIndex(\n index,\n useReduxGeometry ? themeColorLimit : THEME_COLOR_LIMIT,\n useColorTheme\n );\n const pos = branchPos.get(branch2.name)?.pos;\n if (pos === void 0) {\n throw new Error(`Position not found for branch ${branch2.name}`);\n }\n const spineY = dir === \"TB\" || dir === \"BT\" ? pos : useReduxGeometry ? pos + REDUX_BRANCH_LABEL_PADDING_Y / 2 + 1 : pos - 2;\n const line = g.append(\"line\");\n line.attr(\"x1\", 0);\n line.attr(\"y1\", spineY);\n line.attr(\"x2\", maxPos);\n line.attr(\"y2\", spineY);\n line.attr(\"class\", \"branch branch\" + adjustIndexForTheme);\n if (dir === \"TB\") {\n line.attr(\"y1\", defaultPos);\n line.attr(\"x1\", pos);\n line.attr(\"y2\", maxPos);\n line.attr(\"x2\", pos);\n } else if (dir === \"BT\") {\n line.attr(\"y1\", maxPos);\n line.attr(\"x1\", pos);\n line.attr(\"y2\", defaultPos);\n line.attr(\"x2\", pos);\n }\n lanes.push(spineY);\n const name = branch2.name;\n const labelElement = drawText(name);\n const bkg = g.insert(\"rect\");\n const branchLabel = g.insert(\"g\").attr(\"class\", \"branchLabel\");\n const label = branchLabel.insert(\"g\").attr(\"class\", \"label branch-label\" + adjustIndexForTheme);\n label.node().appendChild(labelElement);\n const bbox = labelElement.getBBox();\n const borderRadius = useReduxGeometry ? 0 : 4;\n const labelPaddingX = useReduxGeometry ? 16 : 0;\n const labelPaddingY = useReduxGeometry ? REDUX_BRANCH_LABEL_PADDING_Y : 0;\n if (look === \"neo\") {\n bkg.attr(\"data-look\", `neo`);\n }\n bkg.attr(\"class\", \"branchLabelBkg label\" + adjustIndexForTheme).attr(\n \"style\",\n look === \"neo\" ? `filter:${useReduxGeometry ? `url(#${id}-drop-shadow)` : dropShadow}` : \"\"\n ).attr(\"rx\", borderRadius).attr(\"ry\", borderRadius).attr(\"x\", -bbox.width - 4 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)).attr(\"y\", -bbox.height / 2 + 10).attr(\"width\", bbox.width + 18 + labelPaddingX).attr(\"height\", bbox.height + 4 + labelPaddingY);\n label.attr(\n \"transform\",\n \"translate(\" + (-bbox.width - 14 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0) + labelPaddingX / 2) + \", \" + (spineY - bbox.height / 2 - 2) + \")\"\n );\n if (dir === \"TB\") {\n bkg.attr(\"x\", pos - bbox.width / 2 - 10).attr(\"y\", 0);\n label.attr(\"transform\", \"translate(\" + (pos - bbox.width / 2 - 5) + \", 0)\");\n if (useReduxGeometry) {\n bkg.attr(\"transform\", `translate(${-labelPaddingX / 2 - 3}, ${-labelPaddingY - 10})`);\n label.attr(\n \"transform\",\n \"translate(\" + (pos - bbox.width / 2 - 5) + \", \" + (-labelPaddingY * 2 + 7) + \")\"\n );\n }\n } else if (dir === \"BT\") {\n bkg.attr(\"x\", pos - bbox.width / 2 - 10).attr(\"y\", maxPos);\n label.attr(\"transform\", \"translate(\" + (pos - bbox.width / 2 - 5) + \", \" + maxPos + \")\");\n if (useReduxGeometry) {\n bkg.attr(\"transform\", `translate(${-labelPaddingX / 2 - 3}, ${labelPaddingY + 10})`);\n label.attr(\n \"transform\",\n \"translate(\" + (pos - bbox.width / 2 - 5) + \", \" + (maxPos + labelPaddingY * 2 + 4) + \")\"\n );\n }\n } else {\n bkg.attr(\"transform\", \"translate(-19, \" + (spineY - 12 - labelPaddingY / 2) + \")\");\n }\n });\n}, \"drawBranches\");\nvar setBranchPosition = /* @__PURE__ */ __name(function(name, pos, index, bbox, rotateCommitLabel) {\n branchPos.set(name, { pos, index });\n pos += 50 + (rotateCommitLabel ? 40 : 0) + (dir === \"TB\" || dir === \"BT\" ? bbox.width / 2 : 0);\n return pos;\n}, \"setBranchPosition\");\nvar draw = /* @__PURE__ */ __name(function(txt, id, ver, diagObj) {\n clear3();\n log.debug(\"in gitgraph renderer\", txt + \"\\n\", \"id:\", id, ver);\n const db2 = diagObj.db;\n if (!db2.getConfig) {\n log.error(\"getConfig method is not available on db\");\n return;\n }\n const gitGraphConfig = db2.getConfig();\n const rotateCommitLabel = gitGraphConfig.rotateCommitLabel ?? false;\n allCommitsDict = db2.getCommits();\n const branches = db2.getBranchesAsObjArray();\n dir = db2.getDirection();\n const diagram2 = select(`[id=\"${id}\"]`);\n const { look, theme, themeVariables } = getConfig2();\n const { useGradient, gradientStart, gradientStop, filterColor } = themeVariables;\n if (useGradient) {\n const gradient = diagram2.append(\"defs\").append(\"linearGradient\").attr(\"id\", id + \"-gradient\").attr(\"gradientUnits\", \"objectBoundingBox\").attr(\"x1\", \"0%\").attr(\"y1\", \"0%\").attr(\"x2\", \"100%\").attr(\"y2\", \"0%\");\n gradient.append(\"stop\").attr(\"offset\", \"0%\").attr(\"stop-color\", gradientStart).attr(\"stop-opacity\", 1);\n gradient.append(\"stop\").attr(\"offset\", \"100%\").attr(\"stop-color\", gradientStop).attr(\"stop-opacity\", 1);\n }\n if (look === \"neo\" && REDUX_GEOMETRY_THEMES.has(theme ?? \"\")) {\n diagram2.append(\"defs\").append(\"filter\").attr(\"id\", id + \"-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\", filterColor);\n }\n let pos = 0;\n branches.forEach((branch2, index) => {\n const labelElement = drawText(branch2.name);\n const g = diagram2.append(\"g\");\n const branchLabel = g.insert(\"g\").attr(\"class\", \"branchLabel\");\n const label = branchLabel.insert(\"g\").attr(\"class\", \"label branch-label\");\n label.node()?.appendChild(labelElement);\n const bbox = labelElement.getBBox();\n pos = setBranchPosition(branch2.name, pos, index, bbox, rotateCommitLabel);\n label.remove();\n branchLabel.remove();\n g.remove();\n });\n drawCommits(diagram2, allCommitsDict, false, gitGraphConfig);\n if (gitGraphConfig.showBranches) {\n drawBranches(diagram2, branches, gitGraphConfig, id);\n }\n drawArrows(diagram2, allCommitsDict);\n drawCommits(diagram2, allCommitsDict, true, gitGraphConfig);\n utils_default.insertTitle(\n diagram2,\n \"gitTitleText\",\n gitGraphConfig.titleTopMargin ?? 0,\n db2.getDiagramTitle()\n );\n setupGraphViewbox(void 0, diagram2, gitGraphConfig.diagramPadding, gitGraphConfig.useMaxWidth);\n}, \"draw\");\nvar gitGraphRenderer_default = {\n draw\n};\nif (void 0) {\n const { it, expect, describe } = void 0;\n describe(\"drawText\", () => {\n it(\"should drawText\", () => {\n const svgLabel = drawText(\"main\");\n expect(svgLabel).toBeDefined();\n expect(svgLabel.children[0].innerHTML).toBe(\"main\");\n });\n });\n describe(\"branchPosition\", () => {\n const bbox = {\n x: 0,\n y: 0,\n width: 10,\n height: 10,\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n toJSON: /* @__PURE__ */ __name(() => \"\", \"toJSON\")\n };\n it(\"should setBranchPositions LR with two branches\", () => {\n dir = \"LR\";\n const pos = setBranchPosition(\"main\", 0, 0, bbox, true);\n expect(pos).toBe(90);\n expect(branchPos.get(\"main\")).toEqual({ pos: 0, index: 0 });\n const posNext = setBranchPosition(\"develop\", pos, 1, bbox, true);\n expect(posNext).toBe(180);\n expect(branchPos.get(\"develop\")).toEqual({ pos, index: 1 });\n });\n it(\"should setBranchPositions TB with two branches\", () => {\n dir = \"TB\";\n bbox.width = 34.9921875;\n const pos = setBranchPosition(\"main\", 0, 0, bbox, true);\n expect(pos).toBe(107.49609375);\n expect(branchPos.get(\"main\")).toEqual({ pos: 0, index: 0 });\n bbox.width = 56.421875;\n const posNext = setBranchPosition(\"develop\", pos, 1, bbox, true);\n expect(posNext).toBe(225.70703125);\n expect(branchPos.get(\"develop\")).toEqual({ pos, index: 1 });\n });\n });\n describe(\"commitPosition\", () => {\n const commits = /* @__PURE__ */ new Map([\n [\n \"commitZero\",\n {\n id: \"ZERO\",\n message: \"\",\n seq: 0,\n type: commitType.NORMAL,\n tags: [],\n parents: [],\n branch: \"main\"\n }\n ],\n [\n \"commitA\",\n {\n id: \"A\",\n message: \"\",\n seq: 1,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"ZERO\"],\n branch: \"feature\"\n }\n ],\n [\n \"commitB\",\n {\n id: \"B\",\n message: \"\",\n seq: 2,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"A\"],\n branch: \"feature\"\n }\n ],\n [\n \"commitM\",\n {\n id: \"M\",\n message: \"merged branch feature into main\",\n seq: 3,\n type: commitType.MERGE,\n tags: [],\n parents: [\"ZERO\", \"B\"],\n branch: \"main\",\n customId: true\n }\n ],\n [\n \"commitC\",\n {\n id: \"C\",\n message: \"\",\n seq: 4,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"ZERO\"],\n branch: \"release\"\n }\n ],\n [\n \"commit5_8928ea0\",\n {\n id: \"5-8928ea0\",\n message: \"cherry-picked [object Object] into release\",\n seq: 5,\n type: commitType.CHERRY_PICK,\n tags: [],\n parents: [\"C\", \"M\"],\n branch: \"release\"\n }\n ],\n [\n \"commitD\",\n {\n id: \"D\",\n message: \"\",\n seq: 6,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"5-8928ea0\"],\n branch: \"release\"\n }\n ],\n [\n \"commit7_ed848ba\",\n {\n id: \"7-ed848ba\",\n message: \"cherry-picked [object Object] into release\",\n seq: 7,\n type: commitType.CHERRY_PICK,\n tags: [],\n parents: [\"D\", \"M\"],\n branch: \"release\"\n }\n ]\n ]);\n let pos = 0;\n branchPos.set(\"main\", { pos: 0, index: 0 });\n branchPos.set(\"feature\", { pos: 107.49609375, index: 1 });\n branchPos.set(\"release\", { pos: 224.03515625, index: 2 });\n describe(\"TB\", () => {\n pos = 30;\n dir = \"TB\";\n const expectedCommitPositionTB = /* @__PURE__ */ new Map([\n [\"commitZero\", { x: 0, y: 40, posWithOffset: 40 }],\n [\"commitA\", { x: 107.49609375, y: 90, posWithOffset: 90 }],\n [\"commitB\", { x: 107.49609375, y: 140, posWithOffset: 140 }],\n [\"commitM\", { x: 0, y: 190, posWithOffset: 190 }],\n [\"commitC\", { x: 224.03515625, y: 240, posWithOffset: 240 }],\n [\"commit5_8928ea0\", { x: 224.03515625, y: 290, posWithOffset: 290 }],\n [\"commitD\", { x: 224.03515625, y: 340, posWithOffset: 340 }],\n [\"commit7_ed848ba\", { x: 224.03515625, y: 390, posWithOffset: 390 }]\n ]);\n commits.forEach((commit2, key) => {\n it(`should give the correct position for commit ${key}`, () => {\n const position = getCommitPosition(commit2, pos, false);\n expect(position).toEqual(expectedCommitPositionTB.get(key));\n pos += 50;\n });\n });\n });\n describe(\"LR\", () => {\n let pos2 = 30;\n dir = \"LR\";\n const expectedCommitPositionLR = /* @__PURE__ */ new Map([\n [\"commitZero\", { x: 0, y: 40, posWithOffset: 40 }],\n [\"commitA\", { x: 107.49609375, y: 90, posWithOffset: 90 }],\n [\"commitB\", { x: 107.49609375, y: 140, posWithOffset: 140 }],\n [\"commitM\", { x: 0, y: 190, posWithOffset: 190 }],\n [\"commitC\", { x: 224.03515625, y: 240, posWithOffset: 240 }],\n [\"commit5_8928ea0\", { x: 224.03515625, y: 290, posWithOffset: 290 }],\n [\"commitD\", { x: 224.03515625, y: 340, posWithOffset: 340 }],\n [\"commit7_ed848ba\", { x: 224.03515625, y: 390, posWithOffset: 390 }]\n ]);\n commits.forEach((commit2, key) => {\n it(`should give the correct position for commit ${key}`, () => {\n const position = getCommitPosition(commit2, pos2, false);\n expect(position).toEqual(expectedCommitPositionLR.get(key));\n pos2 += 50;\n });\n });\n });\n describe(\"getCommitClassType\", () => {\n const expectedCommitClassType = /* @__PURE__ */ new Map([\n [\"commitZero\", \"commit-normal\"],\n [\"commitA\", \"commit-normal\"],\n [\"commitB\", \"commit-normal\"],\n [\"commitM\", \"commit-merge\"],\n [\"commitC\", \"commit-normal\"],\n [\"commit5_8928ea0\", \"commit-cherry-pick\"],\n [\"commitD\", \"commit-normal\"],\n [\"commit7_ed848ba\", \"commit-cherry-pick\"]\n ]);\n commits.forEach((commit2, key) => {\n it(`should give the correct class type for commit ${key}`, () => {\n const classType = getCommitClassType(commit2);\n expect(classType).toBe(expectedCommitClassType.get(key));\n });\n });\n });\n });\n describe(\"building BT parallel commit diagram\", () => {\n const commits = /* @__PURE__ */ new Map([\n [\n \"1-abcdefg\",\n {\n id: \"1-abcdefg\",\n message: \"\",\n seq: 0,\n type: 0,\n tags: [],\n parents: [],\n branch: \"main\"\n }\n ],\n [\n \"2-abcdefg\",\n {\n id: \"2-abcdefg\",\n message: \"\",\n seq: 1,\n type: 0,\n tags: [],\n parents: [\"1-abcdefg\"],\n branch: \"main\"\n }\n ],\n [\n \"3-abcdefg\",\n {\n id: \"3-abcdefg\",\n message: \"\",\n seq: 2,\n type: 0,\n tags: [],\n parents: [\"2-abcdefg\"],\n branch: \"develop\"\n }\n ],\n [\n \"4-abcdefg\",\n {\n id: \"4-abcdefg\",\n message: \"\",\n seq: 3,\n type: 0,\n tags: [],\n parents: [\"3-abcdefg\"],\n branch: \"develop\"\n }\n ],\n [\n \"5-abcdefg\",\n {\n id: \"5-abcdefg\",\n message: \"\",\n seq: 4,\n type: 0,\n tags: [],\n parents: [\"2-abcdefg\"],\n branch: \"feature\"\n }\n ],\n [\n \"6-abcdefg\",\n {\n id: \"6-abcdefg\",\n message: \"\",\n seq: 5,\n type: 0,\n tags: [],\n parents: [\"5-abcdefg\"],\n branch: \"feature\"\n }\n ],\n [\n \"7-abcdefg\",\n {\n id: \"7-abcdefg\",\n message: \"\",\n seq: 6,\n type: 0,\n tags: [],\n parents: [\"2-abcdefg\"],\n branch: \"main\"\n }\n ],\n [\n \"8-abcdefg\",\n {\n id: \"8-abcdefg\",\n message: \"\",\n seq: 7,\n type: 0,\n tags: [],\n parents: [\"7-abcdefg\"],\n branch: \"main\"\n }\n ]\n ]);\n const expectedCommitPosition = /* @__PURE__ */ new Map([\n [\"1-abcdefg\", { x: 0, y: 40 }],\n [\"2-abcdefg\", { x: 0, y: 90 }],\n [\"3-abcdefg\", { x: 107.49609375, y: 140 }],\n [\"4-abcdefg\", { x: 107.49609375, y: 190 }],\n [\"5-abcdefg\", { x: 225.70703125, y: 140 }],\n [\"6-abcdefg\", { x: 225.70703125, y: 190 }],\n [\"7-abcdefg\", { x: 0, y: 140 }],\n [\"8-abcdefg\", { x: 0, y: 190 }]\n ]);\n const expectedCommitPositionAfterParallel = /* @__PURE__ */ new Map([\n [\"1-abcdefg\", { x: 0, y: 210 }],\n [\"2-abcdefg\", { x: 0, y: 160 }],\n [\"3-abcdefg\", { x: 107.49609375, y: 110 }],\n [\"4-abcdefg\", { x: 107.49609375, y: 60 }],\n [\"5-abcdefg\", { x: 225.70703125, y: 110 }],\n [\"6-abcdefg\", { x: 225.70703125, y: 60 }],\n [\"7-abcdefg\", { x: 0, y: 110 }],\n [\"8-abcdefg\", { x: 0, y: 60 }]\n ]);\n const expectedCommitCurrentPosition = /* @__PURE__ */ new Map([\n [\"1-abcdefg\", 30],\n [\"2-abcdefg\", 80],\n [\"3-abcdefg\", 130],\n [\"4-abcdefg\", 180],\n [\"5-abcdefg\", 130],\n [\"6-abcdefg\", 180],\n [\"7-abcdefg\", 130],\n [\"8-abcdefg\", 180]\n ]);\n const sortedKeys = [...expectedCommitPosition.keys()];\n it(\"should get the correct commit position and current position\", () => {\n dir = \"BT\";\n let curPos = 30;\n commitPos.clear();\n branchPos.clear();\n branchPos.set(\"main\", { pos: 0, index: 0 });\n branchPos.set(\"develop\", { pos: 107.49609375, index: 1 });\n branchPos.set(\"feature\", { pos: 225.70703125, index: 2 });\n commits.forEach((commit2, key) => {\n if (commit2.parents.length > 0) {\n curPos = calculateCommitPosition(commit2);\n }\n const position = setCommitPosition(commit2, curPos);\n expect(position).toEqual(expectedCommitPosition.get(key));\n expect(curPos).toEqual(expectedCommitCurrentPosition.get(key));\n });\n });\n it(\"should get the correct commit position after parallel commits\", () => {\n commitPos.clear();\n branchPos.clear();\n dir = \"BT\";\n const curPos = 30;\n commitPos.clear();\n branchPos.clear();\n branchPos.set(\"main\", { pos: 0, index: 0 });\n branchPos.set(\"develop\", { pos: 107.49609375, index: 1 });\n branchPos.set(\"feature\", { pos: 225.70703125, index: 2 });\n setParallelBTPos(sortedKeys, commits, curPos);\n sortedKeys.forEach((commit2) => {\n const position = commitPos.get(commit2);\n expect(position).toEqual(expectedCommitPositionAfterParallel.get(commit2));\n });\n });\n });\n it(\"add\", () => {\n commitPos.set(\"parent1\", { x: 1, y: 1 });\n commitPos.set(\"parent2\", { x: 2, y: 2 });\n commitPos.set(\"parent3\", { x: 3, y: 3 });\n dir = \"LR\";\n const parents = [\"parent1\", \"parent2\", \"parent3\"];\n const closestParent = findClosestParent(parents);\n expect(closestParent).toBe(\"parent3\");\n commitPos.clear();\n });\n}\n\n// src/diagrams/git/styles.js\nvar GIT_NAMED_COLOR_COUNT = 8;\nvar REDUX_GEOMETRY_THEMES2 = /* @__PURE__ */ new Set([\"redux\", \"redux-dark\", \"redux-color\", \"redux-dark-color\"]);\nvar COLOR_THEMES2 = /* @__PURE__ */ new Set([\"redux-color\", \"redux-dark-color\"]);\nvar NEO_THEMES = /* @__PURE__ */ new Set([\"neo\", \"neo-dark\"]);\nvar DARK_THEMES2 = /* @__PURE__ */ new Set([\"dark\", \"redux-dark\", \"redux-dark-color\", \"neo-dark\"]);\nvar NEO_COLOR_GEN_THEMES = /* @__PURE__ */ new Set([\n \"redux\",\n \"redux-dark\",\n \"redux-color\",\n \"redux-dark-color\",\n \"neo\",\n \"neo-dark\"\n]);\nvar genGitGraphGradient = /* @__PURE__ */ __name((options) => {\n const { svgId } = options;\n let sections = \"\";\n if (options.useGradient && svgId) {\n for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n sections += `\n .label${i} { fill: ${options.mainBkg}; stroke: url(${svgId}-gradient); stroke-width: ${options.strokeWidth};}\n `;\n }\n }\n return sections;\n}, \"genGitGraphGradient\");\nvar genColor = /* @__PURE__ */ __name((options) => {\n const config = getConfig();\n const { theme, themeVariables } = config;\n const { borderColorArray } = themeVariables;\n const useReduxGeometry = REDUX_GEOMETRY_THEMES2.has(theme);\n if (NEO_THEMES.has(theme)) {\n let sections = \"\";\n for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n if (i === 0) {\n sections += `\n .branch-label${i} { fill: ${options.nodeBorder};}\n .commit${i} { stroke: ${options.nodeBorder}; }\n .commit-highlight${i} { stroke: ${options.nodeBorder}; fill: ${options.nodeBorder}; }\n .arrow${i} { stroke: ${options.nodeBorder}; }\n .commit-bullets { fill: ${options.nodeBorder}; }\n .commit-cherry-pick${i} { stroke: ${options.nodeBorder}; }\n ${genGitGraphGradient(options)}`;\n } else {\n const ci = i % GIT_NAMED_COLOR_COUNT;\n sections += `\n .branch-label${i} { fill: ${options[\"gitBranchLabel\" + ci]}; }\n .commit${i} { stroke: ${options[\"git\" + ci]}; fill: ${options[\"git\" + ci]}; }\n .commit-highlight${i} { stroke: ${options[\"gitInv\" + ci]}; fill: ${options[\"gitInv\" + ci]}; }\n .arrow${i} { stroke: ${options[\"git\" + ci]}; }\n `;\n }\n }\n return sections;\n } else if (!COLOR_THEMES2.has(theme)) {\n let sections = \"\";\n for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n sections += `\n .branch-label${i} { fill: ${options.nodeBorder}; ${useReduxGeometry ? `font-weight:${options.noteFontWeight}` : \"\"} }\n .commit${i} { stroke: ${options.nodeBorder}; }\n .commit-highlight${i} { stroke: ${options.nodeBorder}; fill: ${options.nodeBorder}; }\n .label${i} { fill: ${options.mainBkg}; stroke: ${options.nodeBorder}; stroke-width: ${options.strokeWidth}; ${useReduxGeometry ? `font-weight:${options.noteFontWeight}` : \"\"}}\n .arrow${i} { stroke: ${options.nodeBorder}; }\n .commit-bullets { fill: ${options.nodeBorder}; }\n .commit-cherry-pick${i} { stroke: ${options.nodeBorder}; }\n `;\n }\n return sections;\n } else {\n let sections = \"\";\n for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n if (i === 0) {\n sections += `\n .branch-label${i} { fill: ${options.nodeBorder}; ${useReduxGeometry ? `font-weight:${options.noteFontWeight}` : \"\"} }\n .commit${i} { stroke: ${options.nodeBorder}; }\n .commit-highlight${i} { stroke: ${options.nodeBorder}; fill: ${options.mainBkg}; }\n .label${i} { fill: ${options.mainBkg}; stroke: ${options.nodeBorder}; stroke-width: ${options.strokeWidth}; ${useReduxGeometry ? `font-weight:${options.noteFontWeight}` : \"\"} }\n .arrow${i} { stroke: ${options.nodeBorder}; }\n .commit-bullets { fill: ${options.nodeBorder}; }\n `;\n } else {\n const colorIndex = i % borderColorArray.length;\n sections += `\n .branch-label${i} { fill: ${options.nodeBorder}; ${useReduxGeometry ? `font-weight:${options.noteFontWeight}` : \"\"} }\n .commit${i} { stroke: ${borderColorArray[colorIndex]}; fill: ${borderColorArray[colorIndex]}; }\n .commit-highlight${i} { stroke: ${borderColorArray[colorIndex]}; fill: ${borderColorArray[colorIndex]}; }\n .label${i} { fill: ${DARK_THEMES2.has(theme) ? options.mainBkg : borderColorArray[colorIndex]}; stroke: ${borderColorArray[colorIndex]}; stroke-width: ${options.strokeWidth}; }\n .arrow${i} { stroke: ${borderColorArray[colorIndex]}; }\n `;\n }\n }\n return sections;\n }\n}, \"genColor\");\nvar normalTheme = /* @__PURE__ */ __name((options) => {\n return `${Array.from({ length: options.THEME_COLOR_LIMIT }, (_, i) => i).map((i) => {\n const ci = i % GIT_NAMED_COLOR_COUNT;\n return `\n .branch-label${i} { fill: ${options[\"gitBranchLabel\" + ci]}; }\n .commit${i} { stroke: ${options[\"git\" + ci]}; fill: ${options[\"git\" + ci]}; }\n .commit-highlight${i} { stroke: ${options[\"gitInv\" + ci]}; fill: ${options[\"gitInv\" + ci]}; }\n .label${i} { fill: ${options[\"git\" + ci]}; }\n .arrow${i} { stroke: ${options[\"git\" + ci]}; }\n `;\n }).join(\"\\n\")}`;\n}, \"normalTheme\");\nvar getStyles = /* @__PURE__ */ __name((options) => {\n const config = getConfig();\n const { theme } = config;\n const useNeoColorGen = NEO_COLOR_GEN_THEMES.has(theme);\n return `\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n \n ${useNeoColorGen ? genColor(options) : normalTheme(options)}\n\n .branch {\n stroke-width: ${options.strokeWidth};\n stroke: ${options.commitLineColor ?? options.lineColor};\n stroke-dasharray: ${useNeoColorGen ? \"4 2\" : \"2\"};\n }\n .commit-label { font-size: ${options.commitLabelFontSize}; fill: ${useNeoColorGen ? options.nodeBorder : options.commitLabelColor}; ${useNeoColorGen ? `font-weight:${options.noteFontWeight};` : \"\"}}\n .commit-label-bkg { font-size: ${options.commitLabelFontSize}; fill: ${useNeoColorGen ? \"transparent\" : options.commitLabelBackground}; opacity: ${useNeoColorGen ? \"\" : 0.5}; }\n .tag-label { font-size: ${options.tagLabelFontSize}; fill: ${options.tagLabelColor};}\n .tag-label-bkg { fill: ${useNeoColorGen ? options.mainBkg : options.tagLabelBackground}; stroke: ${useNeoColorGen ? options.nodeBorder : options.tagLabelBorder}; ${useNeoColorGen ? `filter:${options.dropShadow}` : \"\"} }\n .tag-hole { fill: ${options.textColor}; }\n\n .commit-merge {\n stroke: ${useNeoColorGen ? options.mainBkg : options.primaryColor};\n fill: ${useNeoColorGen ? options.mainBkg : options.primaryColor};\n }\n .commit-reverse {\n stroke: ${useNeoColorGen ? options.mainBkg : options.primaryColor};\n fill: ${useNeoColorGen ? options.mainBkg : options.primaryColor};\n stroke-width: ${useNeoColorGen ? options.strokeWidth : 3};\n }\n .commit-highlight-outer {\n }\n .commit-highlight-inner {\n stroke: ${useNeoColorGen ? options.mainBkg : options.primaryColor};\n fill: ${useNeoColorGen ? options.mainBkg : options.primaryColor};\n }\n\n .arrow {\n /* Intentional: neo themes keep the bold 8px arrow (like classic themes); only redux-geometry themes use the thinner options.strokeWidth. */\n stroke-width: ${REDUX_GEOMETRY_THEMES2.has(theme) ? options.strokeWidth : 8};\n stroke-linecap: round;\n fill: none\n }\n .gitTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n }\n`;\n}, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/git/gitGraphDiagram.ts\nvar diagram = {\n parser,\n db,\n renderer: gitGraphRenderer_default,\n styles: styles_default\n};\nexport {\n diagram\n};\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"gitGraphDiagram-PVQCEYII-AW-DbGHw.js","names":["select"],"sources":["../../../../../node_modules/.pnpm/mermaid@11.15.0/node_modules/mermaid/dist/chunks/mermaid.core/gitGraphDiagram-PVQCEYII.mjs"],"sourcesContent":["import {\n populateCommonDb\n} from \"./chunk-4BX2VUAB.mjs\";\nimport {\n ImperativeState\n} from \"./chunk-QZHKN3VN.mjs\";\nimport {\n cleanAndMerge,\n random,\n utils_default\n} from \"./chunk-5ZQYHXKU.mjs\";\nimport {\n clear,\n common_default,\n defaultConfig_default,\n getAccDescription,\n getAccTitle,\n getConfig,\n getConfig2,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle,\n setupGraphViewbox2 as setupGraphViewbox\n} from \"./chunk-CSCIHK7Q.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/git/gitGraphParser.ts\nimport { parse } from \"@mermaid-js/parser\";\n\n// src/diagrams/git/gitGraphTypes.ts\nvar commitType = {\n NORMAL: 0,\n REVERSE: 1,\n HIGHLIGHT: 2,\n MERGE: 3,\n CHERRY_PICK: 4\n};\n\n// src/diagrams/git/gitGraphAst.ts\nvar DEFAULT_GITGRAPH_CONFIG = defaultConfig_default.gitGraph;\nvar getConfig3 = /* @__PURE__ */ __name(() => {\n const config = cleanAndMerge({\n ...DEFAULT_GITGRAPH_CONFIG,\n ...getConfig().gitGraph\n });\n return config;\n}, \"getConfig\");\nvar state = new ImperativeState(() => {\n const config = getConfig3();\n const mainBranchName = config.mainBranchName;\n const mainBranchOrder = config.mainBranchOrder;\n return {\n mainBranchName,\n commits: /* @__PURE__ */ new Map(),\n head: null,\n branchConfig: /* @__PURE__ */ new Map([[mainBranchName, { name: mainBranchName, order: mainBranchOrder }]]),\n branches: /* @__PURE__ */ new Map([[mainBranchName, null]]),\n currBranch: mainBranchName,\n direction: \"LR\",\n seq: 0,\n options: {}\n };\n});\nfunction getID() {\n return random({ length: 7 });\n}\n__name(getID, \"getID\");\nfunction uniqBy(list, fn) {\n const recordMap = /* @__PURE__ */ Object.create(null);\n return list.reduce((out, item) => {\n const key = fn(item);\n if (!recordMap[key]) {\n recordMap[key] = true;\n out.push(item);\n }\n return out;\n }, []);\n}\n__name(uniqBy, \"uniqBy\");\nvar setDirection = /* @__PURE__ */ __name(function(dir2) {\n state.records.direction = dir2;\n}, \"setDirection\");\nvar setOptions = /* @__PURE__ */ __name(function(rawOptString) {\n log.debug(\"options str\", rawOptString);\n rawOptString = rawOptString?.trim();\n rawOptString = rawOptString || \"{}\";\n try {\n state.records.options = JSON.parse(rawOptString);\n } catch (e) {\n log.error(\"error while parsing gitGraph options\", e.message);\n }\n}, \"setOptions\");\nvar getOptions = /* @__PURE__ */ __name(function() {\n return state.records.options;\n}, \"getOptions\");\nvar commit = /* @__PURE__ */ __name(function(commitDB) {\n let msg = commitDB.msg;\n let id = commitDB.id;\n const type = commitDB.type;\n let tags = commitDB.tags;\n log.info(\"commit\", msg, id, type, tags);\n log.debug(\"Entering commit:\", msg, id, type, tags);\n const config = getConfig3();\n id = common_default.sanitizeText(id, config);\n msg = common_default.sanitizeText(msg, config);\n tags = tags?.map((tag) => common_default.sanitizeText(tag, config));\n const newCommit = {\n id: id ? id : state.records.seq + \"-\" + getID(),\n message: msg,\n seq: state.records.seq++,\n type: type ?? commitType.NORMAL,\n tags: tags ?? [],\n parents: state.records.head == null ? [] : [state.records.head.id],\n branch: state.records.currBranch\n };\n state.records.head = newCommit;\n log.info(\"main branch\", config.mainBranchName);\n if (state.records.commits.has(newCommit.id)) {\n log.warn(`Commit ID ${newCommit.id} already exists`);\n }\n state.records.commits.set(newCommit.id, newCommit);\n state.records.branches.set(state.records.currBranch, newCommit.id);\n log.debug(\"in pushCommit \" + newCommit.id);\n}, \"commit\");\nvar branch = /* @__PURE__ */ __name(function(branchDB) {\n let name = branchDB.name;\n const order = branchDB.order;\n name = common_default.sanitizeText(name, getConfig3());\n if (state.records.branches.has(name)) {\n throw new Error(\n `Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using \"checkout ${name}\")`\n );\n }\n state.records.branches.set(name, state.records.head != null ? state.records.head.id : null);\n state.records.branchConfig.set(name, { name, order });\n checkout(name);\n log.debug(\"in createBranch\");\n}, \"branch\");\nvar merge = /* @__PURE__ */ __name((mergeDB) => {\n let otherBranch = mergeDB.branch;\n let customId = mergeDB.id;\n const overrideType = mergeDB.type;\n const customTags = mergeDB.tags;\n const config = getConfig3();\n otherBranch = common_default.sanitizeText(otherBranch, config);\n if (customId) {\n customId = common_default.sanitizeText(customId, config);\n }\n const currentBranchCheck = state.records.branches.get(state.records.currBranch);\n const otherBranchCheck = state.records.branches.get(otherBranch);\n const currentCommit = currentBranchCheck ? state.records.commits.get(currentBranchCheck) : void 0;\n const otherCommit = otherBranchCheck ? state.records.commits.get(otherBranchCheck) : void 0;\n if (currentCommit && otherCommit && currentCommit.branch === otherBranch) {\n throw new Error(`Cannot merge branch '${otherBranch}' into itself.`);\n }\n if (state.records.currBranch === otherBranch) {\n const error = new Error('Incorrect usage of \"merge\". Cannot merge a branch to itself');\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [\"branch abc\"]\n };\n throw error;\n }\n if (currentCommit === void 0 || !currentCommit) {\n const error = new Error(\n `Incorrect usage of \"merge\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [\"commit\"]\n };\n throw error;\n }\n if (!state.records.branches.has(otherBranch)) {\n const error = new Error(\n 'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + \") does not exist\"\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [`branch ${otherBranch}`]\n };\n throw error;\n }\n if (otherCommit === void 0 || !otherCommit) {\n const error = new Error(\n 'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + \") has no commits\"\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: ['\"commit\"']\n };\n throw error;\n }\n if (currentCommit === otherCommit) {\n const error = new Error('Incorrect usage of \"merge\". Both branches have same head');\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [\"branch abc\"]\n };\n throw error;\n }\n if (customId && state.records.commits.has(customId)) {\n const error = new Error(\n 'Incorrect usage of \"merge\". Commit with id:' + customId + \" already exists, use different custom id\"\n );\n error.hash = {\n text: `merge ${otherBranch} ${customId} ${overrideType} ${customTags?.join(\" \")}`,\n token: `merge ${otherBranch} ${customId} ${overrideType} ${customTags?.join(\" \")}`,\n expected: [\n `merge ${otherBranch} ${customId}_UNIQUE ${overrideType} ${customTags?.join(\" \")}`\n ]\n };\n throw error;\n }\n const verifiedBranch = otherBranchCheck ? otherBranchCheck : \"\";\n const commit2 = {\n id: customId || `${state.records.seq}-${getID()}`,\n message: `merged branch ${otherBranch} into ${state.records.currBranch}`,\n seq: state.records.seq++,\n parents: state.records.head == null ? [] : [state.records.head.id, verifiedBranch],\n branch: state.records.currBranch,\n type: commitType.MERGE,\n customType: overrideType,\n customId: customId ? true : false,\n tags: customTags ?? []\n };\n state.records.head = commit2;\n state.records.commits.set(commit2.id, commit2);\n state.records.branches.set(state.records.currBranch, commit2.id);\n log.debug(state.records.branches);\n log.debug(\"in mergeBranch\");\n}, \"merge\");\nvar cherryPick = /* @__PURE__ */ __name(function(cherryPickDB) {\n let sourceId = cherryPickDB.id;\n let targetId = cherryPickDB.targetId;\n let tags = cherryPickDB.tags;\n let parentCommitId = cherryPickDB.parent;\n log.debug(\"Entering cherryPick:\", sourceId, targetId, tags);\n const config = getConfig3();\n sourceId = common_default.sanitizeText(sourceId, config);\n targetId = common_default.sanitizeText(targetId, config);\n tags = tags?.map((tag) => common_default.sanitizeText(tag, config));\n parentCommitId = common_default.sanitizeText(parentCommitId, config);\n if (!sourceId || !state.records.commits.has(sourceId)) {\n const error = new Error(\n 'Incorrect usage of \"cherryPick\". Source commit id should exist and provided'\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const sourceCommit = state.records.commits.get(sourceId);\n if (sourceCommit === void 0 || !sourceCommit) {\n throw new Error('Incorrect usage of \"cherryPick\". Source commit id should exist and provided');\n }\n if (parentCommitId && !(Array.isArray(sourceCommit.parents) && sourceCommit.parents.includes(parentCommitId))) {\n const error = new Error(\n \"Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.\"\n );\n throw error;\n }\n const sourceCommitBranch = sourceCommit.branch;\n if (sourceCommit.type === commitType.MERGE && !parentCommitId) {\n const error = new Error(\n \"Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.\"\n );\n throw error;\n }\n if (!targetId || !state.records.commits.has(targetId)) {\n if (sourceCommitBranch === state.records.currBranch) {\n const error = new Error(\n 'Incorrect usage of \"cherryPick\". Source commit is already on current branch'\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const currentCommitId = state.records.branches.get(state.records.currBranch);\n if (currentCommitId === void 0 || !currentCommitId) {\n const error = new Error(\n `Incorrect usage of \"cherry-pick\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const currentCommit = state.records.commits.get(currentCommitId);\n if (currentCommit === void 0 || !currentCommit) {\n const error = new Error(\n `Incorrect usage of \"cherry-pick\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: [\"cherry-pick abc\"]\n };\n throw error;\n }\n const commit2 = {\n id: state.records.seq + \"-\" + getID(),\n message: `cherry-picked ${sourceCommit?.message} into ${state.records.currBranch}`,\n seq: state.records.seq++,\n parents: state.records.head == null ? [] : [state.records.head.id, sourceCommit.id],\n branch: state.records.currBranch,\n type: commitType.CHERRY_PICK,\n tags: tags ? tags.filter(Boolean) : [\n `cherry-pick:${sourceCommit.id}${sourceCommit.type === commitType.MERGE ? `|parent:${parentCommitId}` : \"\"}`\n ]\n };\n state.records.head = commit2;\n state.records.commits.set(commit2.id, commit2);\n state.records.branches.set(state.records.currBranch, commit2.id);\n log.debug(state.records.branches);\n log.debug(\"in cherryPick\");\n }\n}, \"cherryPick\");\nvar checkout = /* @__PURE__ */ __name(function(branch2) {\n branch2 = common_default.sanitizeText(branch2, getConfig3());\n if (!state.records.branches.has(branch2)) {\n const error = new Error(\n `Trying to checkout branch which is not yet created. (Help try using \"branch ${branch2}\")`\n );\n error.hash = {\n text: `checkout ${branch2}`,\n token: `checkout ${branch2}`,\n expected: [`branch ${branch2}`]\n };\n throw error;\n } else {\n state.records.currBranch = branch2;\n const id = state.records.branches.get(state.records.currBranch);\n if (id === void 0 || !id) {\n state.records.head = null;\n } else {\n state.records.head = state.records.commits.get(id) ?? null;\n }\n }\n}, \"checkout\");\nfunction upsert(arr, key, newVal) {\n const index = arr.indexOf(key);\n if (index === -1) {\n arr.push(newVal);\n } else {\n arr.splice(index, 1, newVal);\n }\n}\n__name(upsert, \"upsert\");\nfunction prettyPrintCommitHistory(commitArr) {\n const commit2 = commitArr.reduce((out, commit3) => {\n if (out.seq > commit3.seq) {\n return out;\n }\n return commit3;\n }, commitArr[0]);\n let line = \"\";\n commitArr.forEach(function(c) {\n if (c === commit2) {\n line += \"\t*\";\n } else {\n line += \"\t|\";\n }\n });\n const label = [line, commit2.id, commit2.seq];\n for (const branch2 in state.records.branches) {\n if (state.records.branches.get(branch2) === commit2.id) {\n label.push(branch2);\n }\n }\n log.debug(label.join(\" \"));\n if (commit2.parents && commit2.parents.length == 2 && commit2.parents[0] && commit2.parents[1]) {\n const newCommit = state.records.commits.get(commit2.parents[0]);\n upsert(commitArr, commit2, newCommit);\n if (commit2.parents[1]) {\n commitArr.push(state.records.commits.get(commit2.parents[1]));\n }\n } else if (commit2.parents.length == 0) {\n return;\n } else {\n if (commit2.parents[0]) {\n const newCommit = state.records.commits.get(commit2.parents[0]);\n upsert(commitArr, commit2, newCommit);\n }\n }\n commitArr = uniqBy(commitArr, (c) => c.id);\n prettyPrintCommitHistory(commitArr);\n}\n__name(prettyPrintCommitHistory, \"prettyPrintCommitHistory\");\nvar prettyPrint = /* @__PURE__ */ __name(function() {\n log.debug(state.records.commits);\n const node = getCommitsArray()[0];\n prettyPrintCommitHistory([node]);\n}, \"prettyPrint\");\nvar clear2 = /* @__PURE__ */ __name(function() {\n state.reset();\n clear();\n}, \"clear\");\nvar getBranchesAsObjArray = /* @__PURE__ */ __name(function() {\n const branchesArray = [...state.records.branchConfig.values()].map((branchConfig, i) => {\n if (branchConfig.order !== null && branchConfig.order !== void 0) {\n return branchConfig;\n }\n return {\n ...branchConfig,\n order: parseFloat(`0.${i}`)\n };\n }).sort((a, b) => (a.order ?? 0) - (b.order ?? 0)).map(({ name }) => ({ name }));\n return branchesArray;\n}, \"getBranchesAsObjArray\");\nvar getBranches = /* @__PURE__ */ __name(function() {\n return state.records.branches;\n}, \"getBranches\");\nvar getCommits = /* @__PURE__ */ __name(function() {\n return state.records.commits;\n}, \"getCommits\");\nvar getCommitsArray = /* @__PURE__ */ __name(function() {\n const commitArr = [...state.records.commits.values()];\n commitArr.forEach(function(o) {\n log.debug(o.id);\n });\n commitArr.sort((a, b) => a.seq - b.seq);\n return commitArr;\n}, \"getCommitsArray\");\nvar getCurrentBranch = /* @__PURE__ */ __name(function() {\n return state.records.currBranch;\n}, \"getCurrentBranch\");\nvar getDirection = /* @__PURE__ */ __name(function() {\n return state.records.direction;\n}, \"getDirection\");\nvar getHead = /* @__PURE__ */ __name(function() {\n return state.records.head;\n}, \"getHead\");\nvar db = {\n commitType,\n getConfig: getConfig3,\n setDirection,\n setOptions,\n getOptions,\n commit,\n branch,\n merge,\n cherryPick,\n checkout,\n //reset,\n prettyPrint,\n clear: clear2,\n getBranchesAsObjArray,\n getBranches,\n getCommits,\n getCommitsArray,\n getCurrentBranch,\n getDirection,\n getHead,\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n setDiagramTitle,\n getDiagramTitle\n};\n\n// src/diagrams/git/gitGraphParser.ts\nvar populate = /* @__PURE__ */ __name((ast, db2) => {\n populateCommonDb(ast, db2);\n if (ast.dir) {\n db2.setDirection(ast.dir);\n }\n for (const statement of ast.statements) {\n parseStatement(statement, db2);\n }\n}, \"populate\");\nvar parseStatement = /* @__PURE__ */ __name((statement, db2) => {\n const parsers = {\n Commit: /* @__PURE__ */ __name((stmt) => db2.commit(parseCommit(stmt)), \"Commit\"),\n Branch: /* @__PURE__ */ __name((stmt) => db2.branch(parseBranch(stmt)), \"Branch\"),\n Merge: /* @__PURE__ */ __name((stmt) => db2.merge(parseMerge(stmt)), \"Merge\"),\n Checkout: /* @__PURE__ */ __name((stmt) => db2.checkout(parseCheckout(stmt)), \"Checkout\"),\n CherryPicking: /* @__PURE__ */ __name((stmt) => db2.cherryPick(parseCherryPicking(stmt)), \"CherryPicking\")\n };\n const parser2 = parsers[statement.$type];\n if (parser2) {\n parser2(statement);\n } else {\n log.error(`Unknown statement type: ${statement.$type}`);\n }\n}, \"parseStatement\");\nvar parseCommit = /* @__PURE__ */ __name((commit2) => {\n const commitDB = {\n id: commit2.id,\n msg: commit2.message ?? \"\",\n type: commit2.type !== void 0 ? commitType[commit2.type] : commitType.NORMAL,\n tags: commit2.tags ?? void 0\n };\n return commitDB;\n}, \"parseCommit\");\nvar parseBranch = /* @__PURE__ */ __name((branch2) => {\n const branchDB = {\n name: branch2.name,\n order: branch2.order ?? 0\n };\n return branchDB;\n}, \"parseBranch\");\nvar parseMerge = /* @__PURE__ */ __name((merge2) => {\n const mergeDB = {\n branch: merge2.branch,\n id: merge2.id ?? \"\",\n type: merge2.type !== void 0 ? commitType[merge2.type] : void 0,\n tags: merge2.tags ?? void 0\n };\n return mergeDB;\n}, \"parseMerge\");\nvar parseCheckout = /* @__PURE__ */ __name((checkout2) => {\n const branch2 = checkout2.branch;\n return branch2;\n}, \"parseCheckout\");\nvar parseCherryPicking = /* @__PURE__ */ __name((cherryPicking) => {\n const cherryPickDB = {\n id: cherryPicking.id,\n targetId: \"\",\n tags: cherryPicking.tags?.length === 0 ? void 0 : cherryPicking.tags,\n parent: cherryPicking.parent\n };\n return cherryPickDB;\n}, \"parseCherryPicking\");\nvar parser = {\n parse: /* @__PURE__ */ __name(async (input) => {\n const ast = await parse(\"gitGraph\", input);\n log.debug(ast);\n populate(ast, db);\n }, \"parse\")\n};\nif (void 0) {\n const { it, expect, describe } = void 0;\n const mockDB = {\n commitType,\n setDirection: vi.fn(),\n commit: vi.fn(),\n branch: vi.fn(),\n merge: vi.fn(),\n cherryPick: vi.fn(),\n checkout: vi.fn()\n };\n describe(\"GitGraph Parser\", () => {\n it(\"should parse a commit statement\", () => {\n const commit2 = {\n $type: \"Commit\",\n id: \"1\",\n message: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n };\n parseStatement(commit2, mockDB);\n expect(mockDB.commit).toHaveBeenCalledWith({\n id: \"1\",\n msg: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n });\n it(\"should parse a branch statement\", () => {\n const branch2 = {\n $type: \"Branch\",\n name: \"newBranch\",\n order: 1\n };\n parseStatement(branch2, mockDB);\n expect(mockDB.branch).toHaveBeenCalledWith({ name: \"newBranch\", order: 1 });\n });\n it(\"should parse a checkout statement\", () => {\n const checkout2 = {\n $type: \"Checkout\",\n branch: \"newBranch\"\n };\n parseStatement(checkout2, mockDB);\n expect(mockDB.checkout).toHaveBeenCalledWith(\"newBranch\");\n });\n it(\"should parse a merge statement\", () => {\n const merge2 = {\n $type: \"Merge\",\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n };\n parseStatement(merge2, mockDB);\n expect(mockDB.merge).toHaveBeenCalledWith({\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n });\n it(\"should parse a cherry picking statement\", () => {\n const cherryPick2 = {\n $type: \"CherryPicking\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n parent: \"2\"\n };\n parseStatement(cherryPick2, mockDB);\n expect(mockDB.cherryPick).toHaveBeenCalledWith({\n id: \"1\",\n targetId: \"\",\n parent: \"2\",\n tags: [\"tag1\", \"tag2\"]\n });\n });\n it(\"should parse a langium generated gitGraph ast\", () => {\n const dummy = {\n $type: \"GitGraph\",\n statements: [],\n accDescr: \"\",\n accTitle: \"\",\n title: \"\"\n };\n const gitGraphAst = {\n $type: \"GitGraph\",\n statements: [\n {\n $container: dummy,\n $type: \"Commit\",\n id: \"1\",\n message: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n },\n {\n $container: dummy,\n $type: \"Branch\",\n name: \"newBranch\",\n order: 1\n },\n {\n $container: dummy,\n $type: \"Merge\",\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: \"NORMAL\"\n },\n {\n $container: dummy,\n $type: \"Checkout\",\n branch: \"newBranch\"\n },\n {\n $container: dummy,\n $type: \"CherryPicking\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n parent: \"2\"\n }\n ],\n accDescr: \"\",\n accTitle: \"\",\n title: \"\"\n };\n populate(gitGraphAst, mockDB);\n expect(mockDB.commit).toHaveBeenCalledWith({\n id: \"1\",\n msg: \"test\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n expect(mockDB.branch).toHaveBeenCalledWith({ name: \"newBranch\", order: 1 });\n expect(mockDB.merge).toHaveBeenCalledWith({\n branch: \"newBranch\",\n id: \"1\",\n tags: [\"tag1\", \"tag2\"],\n type: 0\n });\n expect(mockDB.checkout).toHaveBeenCalledWith(\"newBranch\");\n });\n });\n}\n\n// src/diagrams/git/gitGraphRenderer.ts\nimport { select } from \"d3\";\nvar LAYOUT_OFFSET = 10;\nvar COMMIT_STEP = 40;\nvar PX = 4;\nvar PY = 2;\nvar THEME_COLOR_LIMIT = 8;\nvar REDUX_GEOMETRY_THEMES = /* @__PURE__ */ new Set([\"redux\", \"redux-dark\", \"redux-color\", \"redux-dark-color\"]);\nvar REDUX_BRANCH_LABEL_PADDING_Y = 12;\nvar COLOR_THEMES = /* @__PURE__ */ new Set([\"redux-color\", \"redux-dark-color\"]);\nvar DARK_THEMES = /* @__PURE__ */ new Set([\"dark\", \"redux-dark\", \"redux-dark-color\", \"neo-dark\"]);\nvar calcColorIndex = /* @__PURE__ */ __name((rawIndex, limit, avoidDefaultColor = false) => {\n if (avoidDefaultColor && rawIndex > 0) {\n return (rawIndex - 1) % (limit - 1) + 1;\n }\n return rawIndex % limit;\n}, \"calcColorIndex\");\nvar branchPos = /* @__PURE__ */ new Map();\nvar commitPos = /* @__PURE__ */ new Map();\nvar defaultPos = 30;\nvar allCommitsDict = /* @__PURE__ */ new Map();\nvar lanes = [];\nvar maxPos = 0;\nvar dir = \"LR\";\nvar clear3 = /* @__PURE__ */ __name(() => {\n branchPos.clear();\n commitPos.clear();\n allCommitsDict.clear();\n maxPos = 0;\n lanes = [];\n dir = \"LR\";\n}, \"clear\");\nvar drawText = /* @__PURE__ */ __name((txt) => {\n const svgLabel = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n const rows = typeof txt === \"string\" ? txt.split(/\\\\n|\\n|<br\\s*\\/?>/gi) : txt;\n rows.forEach((row) => {\n const tspan = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n tspan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n tspan.setAttribute(\"dy\", \"1em\");\n tspan.setAttribute(\"x\", \"0\");\n tspan.setAttribute(\"class\", \"row\");\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n });\n return svgLabel;\n}, \"drawText\");\nvar findClosestParent = /* @__PURE__ */ __name((parents) => {\n let closestParent;\n let comparisonFunc;\n let targetPosition;\n if (dir === \"BT\") {\n comparisonFunc = /* @__PURE__ */ __name((a, b) => a <= b, \"comparisonFunc\");\n targetPosition = Infinity;\n } else {\n comparisonFunc = /* @__PURE__ */ __name((a, b) => a >= b, \"comparisonFunc\");\n targetPosition = 0;\n }\n parents.forEach((parent) => {\n const parentPosition = dir === \"TB\" || dir == \"BT\" ? commitPos.get(parent)?.y : commitPos.get(parent)?.x;\n if (parentPosition !== void 0 && comparisonFunc(parentPosition, targetPosition)) {\n closestParent = parent;\n targetPosition = parentPosition;\n }\n });\n return closestParent;\n}, \"findClosestParent\");\nvar findClosestParentBT = /* @__PURE__ */ __name((parents) => {\n let closestParent = \"\";\n let maxPosition = Infinity;\n parents.forEach((parent) => {\n const parentPosition = commitPos.get(parent).y;\n if (parentPosition <= maxPosition) {\n closestParent = parent;\n maxPosition = parentPosition;\n }\n });\n return closestParent || void 0;\n}, \"findClosestParentBT\");\nvar setParallelBTPos = /* @__PURE__ */ __name((sortedKeys, commits, defaultPos2) => {\n let curPos = defaultPos2;\n let maxPosition = defaultPos2;\n const roots = [];\n sortedKeys.forEach((key) => {\n const commit2 = commits.get(key);\n if (!commit2) {\n throw new Error(`Commit not found for key ${key}`);\n }\n if (commit2.parents.length) {\n curPos = calculateCommitPosition(commit2);\n maxPosition = Math.max(curPos, maxPosition);\n } else {\n roots.push(commit2);\n }\n setCommitPosition(commit2, curPos);\n });\n curPos = maxPosition;\n roots.forEach((commit2) => {\n setRootPosition(commit2, curPos, defaultPos2);\n });\n sortedKeys.forEach((key) => {\n const commit2 = commits.get(key);\n if (commit2?.parents.length) {\n const closestParent = findClosestParentBT(commit2.parents);\n curPos = commitPos.get(closestParent).y - COMMIT_STEP;\n if (curPos <= maxPosition) {\n maxPosition = curPos;\n }\n const x = branchPos.get(commit2.branch).pos;\n const y = curPos - LAYOUT_OFFSET;\n commitPos.set(commit2.id, { x, y });\n }\n });\n}, \"setParallelBTPos\");\nvar findClosestParentPos = /* @__PURE__ */ __name((commit2) => {\n const closestParent = findClosestParent(commit2.parents.filter((p) => p !== null));\n if (!closestParent) {\n throw new Error(`Closest parent not found for commit ${commit2.id}`);\n }\n const closestParentPos = commitPos.get(closestParent)?.y;\n if (closestParentPos === void 0) {\n throw new Error(`Closest parent position not found for commit ${commit2.id}`);\n }\n return closestParentPos;\n}, \"findClosestParentPos\");\nvar calculateCommitPosition = /* @__PURE__ */ __name((commit2) => {\n const closestParentPos = findClosestParentPos(commit2);\n return closestParentPos + COMMIT_STEP;\n}, \"calculateCommitPosition\");\nvar setCommitPosition = /* @__PURE__ */ __name((commit2, curPos) => {\n const branch2 = branchPos.get(commit2.branch);\n if (!branch2) {\n throw new Error(`Branch not found for commit ${commit2.id}`);\n }\n const x = branch2.pos;\n const y = curPos + LAYOUT_OFFSET;\n commitPos.set(commit2.id, { x, y });\n return { x, y };\n}, \"setCommitPosition\");\nvar setRootPosition = /* @__PURE__ */ __name((commit2, curPos, defaultPos2) => {\n const branch2 = branchPos.get(commit2.branch);\n if (!branch2) {\n throw new Error(`Branch not found for commit ${commit2.id}`);\n }\n const y = curPos + defaultPos2;\n const x = branch2.pos;\n commitPos.set(commit2.id, { x, y });\n}, \"setRootPosition\");\nvar drawCommitBullet = /* @__PURE__ */ __name((gBullets, commit2, commitPosition, typeClass, branchIndex, commitSymbolType) => {\n const { theme } = getConfig2();\n const useReduxGeometry = REDUX_GEOMETRY_THEMES.has(theme ?? \"\");\n const useColorTheme = COLOR_THEMES.has(theme ?? \"\");\n const isDark = DARK_THEMES.has(theme ?? \"\");\n if (commitSymbolType === commitType.HIGHLIGHT) {\n gBullets.append(\"rect\").attr(\"x\", commitPosition.x - 10 + (useReduxGeometry ? 3 : 0)).attr(\"y\", commitPosition.y - 10 + (useReduxGeometry ? 3 : 0)).attr(\"width\", useReduxGeometry ? 14 : 20).attr(\"height\", useReduxGeometry ? 14 : 20).attr(\n \"class\",\n `commit ${commit2.id} commit-highlight${calcColorIndex(branchIndex, THEME_COLOR_LIMIT, useColorTheme)} ${typeClass}-outer`\n );\n gBullets.append(\"rect\").attr(\"x\", commitPosition.x - 6 + (useReduxGeometry ? 2 : 0)).attr(\"y\", commitPosition.y - 6 + (useReduxGeometry ? 2 : 0)).attr(\"width\", useReduxGeometry ? 8 : 12).attr(\"height\", useReduxGeometry ? 8 : 12).attr(\n \"class\",\n `commit ${commit2.id} commit${calcColorIndex(branchIndex, THEME_COLOR_LIMIT, useColorTheme)} ${typeClass}-inner`\n );\n } else if (commitSymbolType === commitType.CHERRY_PICK) {\n gBullets.append(\"circle\").attr(\"cx\", commitPosition.x).attr(\"cy\", commitPosition.y).attr(\"r\", useReduxGeometry ? 7 : 10).attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"circle\").attr(\"cx\", commitPosition.x - 3).attr(\"cy\", commitPosition.y + 2).attr(\"r\", useReduxGeometry ? 2.5 : 2.75).attr(\"fill\", isDark ? \"#000000\" : \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"circle\").attr(\"cx\", commitPosition.x + 3).attr(\"cy\", commitPosition.y + 2).attr(\"r\", useReduxGeometry ? 2.5 : 2.75).attr(\"fill\", isDark ? \"#000000\" : \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"line\").attr(\"x1\", commitPosition.x + 3).attr(\"y1\", commitPosition.y + 1).attr(\"x2\", commitPosition.x).attr(\"y2\", commitPosition.y - 5).attr(\"stroke\", isDark ? \"#000000\" : \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n gBullets.append(\"line\").attr(\"x1\", commitPosition.x - 3).attr(\"y1\", commitPosition.y + 1).attr(\"x2\", commitPosition.x).attr(\"y2\", commitPosition.y - 5).attr(\"stroke\", isDark ? \"#000000\" : \"#fff\").attr(\"class\", `commit ${commit2.id} ${typeClass}`);\n } else {\n const circle = gBullets.append(\"circle\");\n circle.attr(\"cx\", commitPosition.x);\n circle.attr(\"cy\", commitPosition.y);\n circle.attr(\"r\", useReduxGeometry ? 7 : 10);\n circle.attr(\n \"class\",\n `commit ${commit2.id} commit${calcColorIndex(branchIndex, THEME_COLOR_LIMIT, useColorTheme)}`\n );\n if (commitSymbolType === commitType.MERGE) {\n const circle2 = gBullets.append(\"circle\");\n circle2.attr(\"cx\", commitPosition.x);\n circle2.attr(\"cy\", commitPosition.y);\n circle2.attr(\"r\", useReduxGeometry ? 5 : 6);\n circle2.attr(\n \"class\",\n `commit ${typeClass} ${commit2.id} commit${calcColorIndex(branchIndex, THEME_COLOR_LIMIT, useColorTheme)}`\n );\n }\n if (commitSymbolType === commitType.REVERSE) {\n const cross = gBullets.append(\"path\");\n const constValue = useReduxGeometry ? 4 : 5;\n cross.attr(\n \"d\",\n `M ${commitPosition.x - constValue},${commitPosition.y - constValue}L${commitPosition.x + constValue},${commitPosition.y + constValue}M${commitPosition.x - constValue},${commitPosition.y + constValue}L${commitPosition.x + constValue},${commitPosition.y - constValue}`\n ).attr(\n \"class\",\n `commit ${typeClass} ${commit2.id} commit${calcColorIndex(branchIndex, THEME_COLOR_LIMIT, useColorTheme)}`\n );\n }\n }\n}, \"drawCommitBullet\");\nvar drawCommitLabel = /* @__PURE__ */ __name((gLabels, commit2, commitPosition, pos, gitGraphConfig) => {\n if (commit2.type !== commitType.CHERRY_PICK && (commit2.customId && commit2.type === commitType.MERGE || commit2.type !== commitType.MERGE) && gitGraphConfig.showCommitLabel) {\n const wrapper = gLabels.append(\"g\");\n const labelBkg = wrapper.insert(\"rect\").attr(\"class\", \"commit-label-bkg\");\n const text = wrapper.append(\"text\").attr(\"x\", pos).attr(\"y\", commitPosition.y + 25).attr(\"class\", \"commit-label\").text(commit2.id);\n const bbox = text.node()?.getBBox();\n if (bbox) {\n labelBkg.attr(\"x\", commitPosition.posWithOffset - bbox.width / 2 - PY).attr(\"y\", commitPosition.y + 13.5).attr(\"width\", bbox.width + 2 * PY).attr(\"height\", bbox.height + 2 * PY);\n if (dir === \"TB\" || dir === \"BT\") {\n labelBkg.attr(\"x\", commitPosition.x - (bbox.width + 4 * PX + 5)).attr(\"y\", commitPosition.y - 12);\n text.attr(\"x\", commitPosition.x - (bbox.width + 4 * PX)).attr(\"y\", commitPosition.y + bbox.height - 12);\n } else {\n text.attr(\"x\", commitPosition.posWithOffset - bbox.width / 2);\n }\n if (gitGraphConfig.rotateCommitLabel) {\n if (dir === \"TB\" || dir === \"BT\") {\n text.attr(\n \"transform\",\n \"rotate(-45, \" + commitPosition.x + \", \" + commitPosition.y + \")\"\n );\n labelBkg.attr(\n \"transform\",\n \"rotate(-45, \" + commitPosition.x + \", \" + commitPosition.y + \")\"\n );\n } else {\n const r_x = -7.5 - (bbox.width + 10) / 25 * 9.5;\n const r_y = 10 + bbox.width / 25 * 8.5;\n wrapper.attr(\n \"transform\",\n \"translate(\" + r_x + \", \" + r_y + \") rotate(-45, \" + pos + \", \" + commitPosition.y + \")\"\n );\n }\n }\n }\n }\n}, \"drawCommitLabel\");\nvar drawCommitTags = /* @__PURE__ */ __name((gLabels, commit2, commitPosition, pos) => {\n if (commit2.tags.length > 0) {\n let yOffset = 0;\n let maxTagBboxWidth = 0;\n let maxTagBboxHeight = 0;\n const tagElements = [];\n for (const tagValue of commit2.tags.reverse()) {\n const rect = gLabels.insert(\"polygon\");\n const hole = gLabels.append(\"circle\");\n const tag = gLabels.append(\"text\").attr(\"y\", commitPosition.y - 16 - yOffset).attr(\"class\", \"tag-label\").text(tagValue);\n const tagBbox = tag.node()?.getBBox();\n if (!tagBbox) {\n throw new Error(\"Tag bbox not found\");\n }\n maxTagBboxWidth = Math.max(maxTagBboxWidth, tagBbox.width);\n maxTagBboxHeight = Math.max(maxTagBboxHeight, tagBbox.height);\n tag.attr(\"x\", commitPosition.posWithOffset - tagBbox.width / 2);\n tagElements.push({\n tag,\n hole,\n rect,\n yOffset\n });\n yOffset += 20;\n }\n for (const { tag, hole, rect, yOffset: yOffset2 } of tagElements) {\n const h2 = maxTagBboxHeight / 2;\n const ly = commitPosition.y - 19.2 - yOffset2;\n rect.attr(\"class\", \"tag-label-bkg\").attr(\n \"points\",\n `\n ${pos - maxTagBboxWidth / 2 - PX / 2},${ly + PY} \n ${pos - maxTagBboxWidth / 2 - PX / 2},${ly - PY}\n ${commitPosition.posWithOffset - maxTagBboxWidth / 2 - PX},${ly - h2 - PY}\n ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly - h2 - PY}\n ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly + h2 + PY}\n ${commitPosition.posWithOffset - maxTagBboxWidth / 2 - PX},${ly + h2 + PY}`\n );\n hole.attr(\"cy\", ly).attr(\"cx\", pos - maxTagBboxWidth / 2 + PX / 2).attr(\"r\", 1.5).attr(\"class\", \"tag-hole\");\n if (dir === \"TB\" || dir === \"BT\") {\n const yOrigin = pos + yOffset2;\n rect.attr(\"class\", \"tag-label-bkg\").attr(\n \"points\",\n `\n ${commitPosition.x},${yOrigin + 2}\n ${commitPosition.x},${yOrigin - 2}\n ${commitPosition.x + LAYOUT_OFFSET},${yOrigin - h2 - 2}\n ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin - h2 - 2}\n ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin + h2 + 2}\n ${commitPosition.x + LAYOUT_OFFSET},${yOrigin + h2 + 2}`\n ).attr(\"transform\", \"translate(12,12) rotate(45, \" + commitPosition.x + \",\" + pos + \")\");\n hole.attr(\"cx\", commitPosition.x + PX / 2).attr(\"cy\", yOrigin).attr(\"transform\", \"translate(12,12) rotate(45, \" + commitPosition.x + \",\" + pos + \")\");\n tag.attr(\"x\", commitPosition.x + 5).attr(\"y\", yOrigin + 3).attr(\"transform\", \"translate(14,14) rotate(45, \" + commitPosition.x + \",\" + pos + \")\");\n }\n }\n }\n}, \"drawCommitTags\");\nvar getCommitClassType = /* @__PURE__ */ __name((commit2) => {\n const commitSymbolType = commit2.customType ?? commit2.type;\n switch (commitSymbolType) {\n case commitType.NORMAL:\n return \"commit-normal\";\n case commitType.REVERSE:\n return \"commit-reverse\";\n case commitType.HIGHLIGHT:\n return \"commit-highlight\";\n case commitType.MERGE:\n return \"commit-merge\";\n case commitType.CHERRY_PICK:\n return \"commit-cherry-pick\";\n default:\n return \"commit-normal\";\n }\n}, \"getCommitClassType\");\nvar calculatePosition = /* @__PURE__ */ __name((commit2, dir2, pos, commitPos2) => {\n const defaultCommitPosition = { x: 0, y: 0 };\n if (commit2.parents.length > 0) {\n const closestParent = findClosestParent(commit2.parents);\n if (closestParent) {\n const parentPosition = commitPos2.get(closestParent) ?? defaultCommitPosition;\n if (dir2 === \"TB\") {\n return parentPosition.y + COMMIT_STEP;\n } else if (dir2 === \"BT\") {\n const currentPosition = commitPos2.get(commit2.id) ?? defaultCommitPosition;\n return currentPosition.y - COMMIT_STEP;\n } else {\n return parentPosition.x + COMMIT_STEP;\n }\n }\n } else {\n if (dir2 === \"TB\") {\n return defaultPos;\n } else if (dir2 === \"BT\") {\n const currentPosition = commitPos2.get(commit2.id) ?? defaultCommitPosition;\n return currentPosition.y - COMMIT_STEP;\n } else {\n return 0;\n }\n }\n return 0;\n}, \"calculatePosition\");\nvar getCommitPosition = /* @__PURE__ */ __name((commit2, pos, isParallelCommits) => {\n const posWithOffset = dir === \"BT\" && isParallelCommits ? pos : pos + LAYOUT_OFFSET;\n const branchY = branchPos.get(commit2.branch)?.pos;\n const x = dir === \"TB\" || dir === \"BT\" ? branchPos.get(commit2.branch)?.pos : posWithOffset;\n if (x === void 0 || branchY === void 0) {\n throw new Error(`Position were undefined for commit ${commit2.id}`);\n }\n const useReduxGeometry = REDUX_GEOMETRY_THEMES.has(getConfig2().theme ?? \"\");\n const y = dir === \"TB\" || dir === \"BT\" ? posWithOffset : branchY + (useReduxGeometry ? REDUX_BRANCH_LABEL_PADDING_Y / 2 + 1 : -2);\n return { x, y, posWithOffset };\n}, \"getCommitPosition\");\nvar drawCommits = /* @__PURE__ */ __name((svg, commits, modifyGraph, gitGraphConfig) => {\n const gBullets = svg.append(\"g\").attr(\"class\", \"commit-bullets\");\n const gLabels = svg.append(\"g\").attr(\"class\", \"commit-labels\");\n let pos = dir === \"TB\" || dir === \"BT\" ? defaultPos : 0;\n const keys = [...commits.keys()];\n const isParallelCommits = gitGraphConfig.parallelCommits ?? false;\n const sortKeys = /* @__PURE__ */ __name((a, b) => {\n const seqA = commits.get(a)?.seq;\n const seqB = commits.get(b)?.seq;\n return seqA !== void 0 && seqB !== void 0 ? seqA - seqB : 0;\n }, \"sortKeys\");\n let sortedKeys = keys.sort(sortKeys);\n if (dir === \"BT\") {\n if (isParallelCommits) {\n setParallelBTPos(sortedKeys, commits, pos);\n }\n sortedKeys = sortedKeys.reverse();\n }\n sortedKeys.forEach((key) => {\n const commit2 = commits.get(key);\n if (!commit2) {\n throw new Error(`Commit not found for key ${key}`);\n }\n if (isParallelCommits) {\n pos = calculatePosition(commit2, dir, pos, commitPos);\n }\n const commitPosition = getCommitPosition(commit2, pos, isParallelCommits);\n if (modifyGraph) {\n const typeClass = getCommitClassType(commit2);\n const commitSymbolType = commit2.customType ?? commit2.type;\n const branchIndex = branchPos.get(commit2.branch)?.index ?? 0;\n drawCommitBullet(gBullets, commit2, commitPosition, typeClass, branchIndex, commitSymbolType);\n drawCommitLabel(gLabels, commit2, commitPosition, pos, gitGraphConfig);\n drawCommitTags(gLabels, commit2, commitPosition, pos);\n }\n if (dir === \"TB\" || dir === \"BT\") {\n commitPos.set(commit2.id, { x: commitPosition.x, y: commitPosition.posWithOffset });\n } else {\n commitPos.set(commit2.id, { x: commitPosition.posWithOffset, y: commitPosition.y });\n }\n pos = dir === \"BT\" && isParallelCommits ? pos + COMMIT_STEP : pos + COMMIT_STEP + LAYOUT_OFFSET;\n if (pos > maxPos) {\n maxPos = pos;\n }\n });\n}, \"drawCommits\");\nvar shouldRerouteArrow = /* @__PURE__ */ __name((commitA, commitB, p1, p2, allCommits) => {\n const commitBIsFurthest = dir === \"TB\" || dir === \"BT\" ? p1.x < p2.x : p1.y < p2.y;\n const branchToGetCurve = commitBIsFurthest ? commitB.branch : commitA.branch;\n const isOnBranchToGetCurve = /* @__PURE__ */ __name((x) => x.branch === branchToGetCurve, \"isOnBranchToGetCurve\");\n const isBetweenCommits = /* @__PURE__ */ __name((x) => x.seq > commitA.seq && x.seq < commitB.seq, \"isBetweenCommits\");\n return [...allCommits.values()].some((commitX) => {\n return isBetweenCommits(commitX) && isOnBranchToGetCurve(commitX);\n });\n}, \"shouldRerouteArrow\");\nvar findLane = /* @__PURE__ */ __name((y1, y2, depth = 0) => {\n const candidate = y1 + Math.abs(y1 - y2) / 2;\n if (depth > 5) {\n return candidate;\n }\n const ok = lanes.every((lane) => Math.abs(lane - candidate) >= 10);\n if (ok) {\n lanes.push(candidate);\n return candidate;\n }\n const diff = Math.abs(y1 - y2);\n return findLane(y1, y2 - diff / 5, depth + 1);\n}, \"findLane\");\nvar drawArrow = /* @__PURE__ */ __name((svg, commitA, commitB, allCommits) => {\n const { theme: arrowTheme } = getConfig2();\n const useColorTheme = COLOR_THEMES.has(arrowTheme ?? \"\");\n const p1 = commitPos.get(commitA.id);\n const p2 = commitPos.get(commitB.id);\n if (p1 === void 0 || p2 === void 0) {\n throw new Error(`Commit positions not found for commits ${commitA.id} and ${commitB.id}`);\n }\n const arrowNeedsRerouting = shouldRerouteArrow(commitA, commitB, p1, p2, allCommits);\n let arc = \"\";\n let arc2 = \"\";\n let radius = 0;\n let offset = 0;\n let colorClassNum = branchPos.get(commitB.branch)?.index;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n }\n let lineDef;\n if (arrowNeedsRerouting) {\n arc = \"A 10 10, 0, 0, 0,\";\n arc2 = \"A 10 10, 0, 0, 1,\";\n radius = 10;\n offset = 10;\n const lineY = p1.y < p2.y ? findLane(p1.y, p2.y) : findLane(p2.y, p1.y);\n const lineX = p1.x < p2.x ? findLane(p1.x, p2.x) : findLane(p2.x, p1.x);\n if (dir === \"TB\") {\n if (p1.x < p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc2} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc2} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n } else if (dir === \"BT\") {\n if (p1.x < p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc} ${lineX} ${p1.y - offset} L ${lineX} ${p2.y + radius} ${arc2} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc2} ${lineX} ${p1.y - offset} L ${lineX} ${p2.y + radius} ${arc} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n } else {\n if (p1.y < p2.y) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius} ${arc} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc2} ${p2.x} ${lineY + offset} L ${p2.x} ${p2.y}`;\n } else {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius} ${arc2} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc} ${p2.x} ${lineY - offset} L ${p2.x} ${p2.y}`;\n }\n }\n } else {\n arc = \"A 20 20, 0, 0, 0,\";\n arc2 = \"A 20 20, 0, 0, 1,\";\n radius = 20;\n offset = 20;\n if (dir === \"TB\") {\n if (p1.x < p2.x) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x > p2.x) {\n arc = \"A 20 20, 0, 0, 0,\";\n arc2 = \"A 20 20, 0, 0, 1,\";\n radius = 20;\n offset = 20;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc2} ${p1.x - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x + radius} ${p1.y} ${arc} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x === p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n } else if (dir === \"BT\") {\n if (p1.x < p2.x) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc2} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x > p2.x) {\n arc = \"A 20 20, 0, 0, 0,\";\n arc2 = \"A 20 20, 0, 0, 1,\";\n radius = 20;\n offset = 20;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc} ${p1.x - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x + radius} ${p1.y} ${arc2} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x === p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n } else {\n if (p1.y < p2.y) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${p1.y + offset} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.y > p2.y) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc2} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.y === p2.y) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n }\n }\n if (lineDef === void 0) {\n throw new Error(\"Line definition not found\");\n }\n svg.append(\"path\").attr(\"d\", lineDef).attr(\n \"class\",\n \"arrow arrow\" + calcColorIndex(colorClassNum, THEME_COLOR_LIMIT, useColorTheme)\n );\n}, \"drawArrow\");\nvar drawArrows = /* @__PURE__ */ __name((svg, commits) => {\n const gArrows = svg.append(\"g\").attr(\"class\", \"commit-arrows\");\n [...commits.keys()].forEach((key) => {\n const commit2 = commits.get(key);\n if (commit2.parents && commit2.parents.length > 0) {\n commit2.parents.forEach((parent) => {\n drawArrow(gArrows, commits.get(parent), commit2, commits);\n });\n }\n });\n}, \"drawArrows\");\nvar drawBranches = /* @__PURE__ */ __name((svg, branches, gitGraphConfig, id) => {\n const { look, theme, themeVariables } = getConfig2();\n const { dropShadow, THEME_COLOR_LIMIT: themeColorLimit } = themeVariables;\n const useReduxGeometry = REDUX_GEOMETRY_THEMES.has(theme ?? \"\");\n const useColorTheme = COLOR_THEMES.has(theme ?? \"\");\n const g = svg.append(\"g\");\n branches.forEach((branch2, index) => {\n const adjustIndexForTheme = calcColorIndex(\n index,\n useReduxGeometry ? themeColorLimit : THEME_COLOR_LIMIT,\n useColorTheme\n );\n const pos = branchPos.get(branch2.name)?.pos;\n if (pos === void 0) {\n throw new Error(`Position not found for branch ${branch2.name}`);\n }\n const spineY = dir === \"TB\" || dir === \"BT\" ? pos : useReduxGeometry ? pos + REDUX_BRANCH_LABEL_PADDING_Y / 2 + 1 : pos - 2;\n const line = g.append(\"line\");\n line.attr(\"x1\", 0);\n line.attr(\"y1\", spineY);\n line.attr(\"x2\", maxPos);\n line.attr(\"y2\", spineY);\n line.attr(\"class\", \"branch branch\" + adjustIndexForTheme);\n if (dir === \"TB\") {\n line.attr(\"y1\", defaultPos);\n line.attr(\"x1\", pos);\n line.attr(\"y2\", maxPos);\n line.attr(\"x2\", pos);\n } else if (dir === \"BT\") {\n line.attr(\"y1\", maxPos);\n line.attr(\"x1\", pos);\n line.attr(\"y2\", defaultPos);\n line.attr(\"x2\", pos);\n }\n lanes.push(spineY);\n const name = branch2.name;\n const labelElement = drawText(name);\n const bkg = g.insert(\"rect\");\n const branchLabel = g.insert(\"g\").attr(\"class\", \"branchLabel\");\n const label = branchLabel.insert(\"g\").attr(\"class\", \"label branch-label\" + adjustIndexForTheme);\n label.node().appendChild(labelElement);\n const bbox = labelElement.getBBox();\n const borderRadius = useReduxGeometry ? 0 : 4;\n const labelPaddingX = useReduxGeometry ? 16 : 0;\n const labelPaddingY = useReduxGeometry ? REDUX_BRANCH_LABEL_PADDING_Y : 0;\n if (look === \"neo\") {\n bkg.attr(\"data-look\", `neo`);\n }\n bkg.attr(\"class\", \"branchLabelBkg label\" + adjustIndexForTheme).attr(\n \"style\",\n look === \"neo\" ? `filter:${useReduxGeometry ? `url(#${id}-drop-shadow)` : dropShadow}` : \"\"\n ).attr(\"rx\", borderRadius).attr(\"ry\", borderRadius).attr(\"x\", -bbox.width - 4 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)).attr(\"y\", -bbox.height / 2 + 10).attr(\"width\", bbox.width + 18 + labelPaddingX).attr(\"height\", bbox.height + 4 + labelPaddingY);\n label.attr(\n \"transform\",\n \"translate(\" + (-bbox.width - 14 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0) + labelPaddingX / 2) + \", \" + (spineY - bbox.height / 2 - 2) + \")\"\n );\n if (dir === \"TB\") {\n bkg.attr(\"x\", pos - bbox.width / 2 - 10).attr(\"y\", 0);\n label.attr(\"transform\", \"translate(\" + (pos - bbox.width / 2 - 5) + \", 0)\");\n if (useReduxGeometry) {\n bkg.attr(\"transform\", `translate(${-labelPaddingX / 2 - 3}, ${-labelPaddingY - 10})`);\n label.attr(\n \"transform\",\n \"translate(\" + (pos - bbox.width / 2 - 5) + \", \" + (-labelPaddingY * 2 + 7) + \")\"\n );\n }\n } else if (dir === \"BT\") {\n bkg.attr(\"x\", pos - bbox.width / 2 - 10).attr(\"y\", maxPos);\n label.attr(\"transform\", \"translate(\" + (pos - bbox.width / 2 - 5) + \", \" + maxPos + \")\");\n if (useReduxGeometry) {\n bkg.attr(\"transform\", `translate(${-labelPaddingX / 2 - 3}, ${labelPaddingY + 10})`);\n label.attr(\n \"transform\",\n \"translate(\" + (pos - bbox.width / 2 - 5) + \", \" + (maxPos + labelPaddingY * 2 + 4) + \")\"\n );\n }\n } else {\n bkg.attr(\"transform\", \"translate(-19, \" + (spineY - 12 - labelPaddingY / 2) + \")\");\n }\n });\n}, \"drawBranches\");\nvar setBranchPosition = /* @__PURE__ */ __name(function(name, pos, index, bbox, rotateCommitLabel) {\n branchPos.set(name, { pos, index });\n pos += 50 + (rotateCommitLabel ? 40 : 0) + (dir === \"TB\" || dir === \"BT\" ? bbox.width / 2 : 0);\n return pos;\n}, \"setBranchPosition\");\nvar draw = /* @__PURE__ */ __name(function(txt, id, ver, diagObj) {\n clear3();\n log.debug(\"in gitgraph renderer\", txt + \"\\n\", \"id:\", id, ver);\n const db2 = diagObj.db;\n if (!db2.getConfig) {\n log.error(\"getConfig method is not available on db\");\n return;\n }\n const gitGraphConfig = db2.getConfig();\n const rotateCommitLabel = gitGraphConfig.rotateCommitLabel ?? false;\n allCommitsDict = db2.getCommits();\n const branches = db2.getBranchesAsObjArray();\n dir = db2.getDirection();\n const diagram2 = select(`[id=\"${id}\"]`);\n const { look, theme, themeVariables } = getConfig2();\n const { useGradient, gradientStart, gradientStop, filterColor } = themeVariables;\n if (useGradient) {\n const gradient = diagram2.append(\"defs\").append(\"linearGradient\").attr(\"id\", id + \"-gradient\").attr(\"gradientUnits\", \"objectBoundingBox\").attr(\"x1\", \"0%\").attr(\"y1\", \"0%\").attr(\"x2\", \"100%\").attr(\"y2\", \"0%\");\n gradient.append(\"stop\").attr(\"offset\", \"0%\").attr(\"stop-color\", gradientStart).attr(\"stop-opacity\", 1);\n gradient.append(\"stop\").attr(\"offset\", \"100%\").attr(\"stop-color\", gradientStop).attr(\"stop-opacity\", 1);\n }\n if (look === \"neo\" && REDUX_GEOMETRY_THEMES.has(theme ?? \"\")) {\n diagram2.append(\"defs\").append(\"filter\").attr(\"id\", id + \"-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\", filterColor);\n }\n let pos = 0;\n branches.forEach((branch2, index) => {\n const labelElement = drawText(branch2.name);\n const g = diagram2.append(\"g\");\n const branchLabel = g.insert(\"g\").attr(\"class\", \"branchLabel\");\n const label = branchLabel.insert(\"g\").attr(\"class\", \"label branch-label\");\n label.node()?.appendChild(labelElement);\n const bbox = labelElement.getBBox();\n pos = setBranchPosition(branch2.name, pos, index, bbox, rotateCommitLabel);\n label.remove();\n branchLabel.remove();\n g.remove();\n });\n drawCommits(diagram2, allCommitsDict, false, gitGraphConfig);\n if (gitGraphConfig.showBranches) {\n drawBranches(diagram2, branches, gitGraphConfig, id);\n }\n drawArrows(diagram2, allCommitsDict);\n drawCommits(diagram2, allCommitsDict, true, gitGraphConfig);\n utils_default.insertTitle(\n diagram2,\n \"gitTitleText\",\n gitGraphConfig.titleTopMargin ?? 0,\n db2.getDiagramTitle()\n );\n setupGraphViewbox(void 0, diagram2, gitGraphConfig.diagramPadding, gitGraphConfig.useMaxWidth);\n}, \"draw\");\nvar gitGraphRenderer_default = {\n draw\n};\nif (void 0) {\n const { it, expect, describe } = void 0;\n describe(\"drawText\", () => {\n it(\"should drawText\", () => {\n const svgLabel = drawText(\"main\");\n expect(svgLabel).toBeDefined();\n expect(svgLabel.children[0].innerHTML).toBe(\"main\");\n });\n });\n describe(\"branchPosition\", () => {\n const bbox = {\n x: 0,\n y: 0,\n width: 10,\n height: 10,\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n toJSON: /* @__PURE__ */ __name(() => \"\", \"toJSON\")\n };\n it(\"should setBranchPositions LR with two branches\", () => {\n dir = \"LR\";\n const pos = setBranchPosition(\"main\", 0, 0, bbox, true);\n expect(pos).toBe(90);\n expect(branchPos.get(\"main\")).toEqual({ pos: 0, index: 0 });\n const posNext = setBranchPosition(\"develop\", pos, 1, bbox, true);\n expect(posNext).toBe(180);\n expect(branchPos.get(\"develop\")).toEqual({ pos, index: 1 });\n });\n it(\"should setBranchPositions TB with two branches\", () => {\n dir = \"TB\";\n bbox.width = 34.9921875;\n const pos = setBranchPosition(\"main\", 0, 0, bbox, true);\n expect(pos).toBe(107.49609375);\n expect(branchPos.get(\"main\")).toEqual({ pos: 0, index: 0 });\n bbox.width = 56.421875;\n const posNext = setBranchPosition(\"develop\", pos, 1, bbox, true);\n expect(posNext).toBe(225.70703125);\n expect(branchPos.get(\"develop\")).toEqual({ pos, index: 1 });\n });\n });\n describe(\"commitPosition\", () => {\n const commits = /* @__PURE__ */ new Map([\n [\n \"commitZero\",\n {\n id: \"ZERO\",\n message: \"\",\n seq: 0,\n type: commitType.NORMAL,\n tags: [],\n parents: [],\n branch: \"main\"\n }\n ],\n [\n \"commitA\",\n {\n id: \"A\",\n message: \"\",\n seq: 1,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"ZERO\"],\n branch: \"feature\"\n }\n ],\n [\n \"commitB\",\n {\n id: \"B\",\n message: \"\",\n seq: 2,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"A\"],\n branch: \"feature\"\n }\n ],\n [\n \"commitM\",\n {\n id: \"M\",\n message: \"merged branch feature into main\",\n seq: 3,\n type: commitType.MERGE,\n tags: [],\n parents: [\"ZERO\", \"B\"],\n branch: \"main\",\n customId: true\n }\n ],\n [\n \"commitC\",\n {\n id: \"C\",\n message: \"\",\n seq: 4,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"ZERO\"],\n branch: \"release\"\n }\n ],\n [\n \"commit5_8928ea0\",\n {\n id: \"5-8928ea0\",\n message: \"cherry-picked [object Object] into release\",\n seq: 5,\n type: commitType.CHERRY_PICK,\n tags: [],\n parents: [\"C\", \"M\"],\n branch: \"release\"\n }\n ],\n [\n \"commitD\",\n {\n id: \"D\",\n message: \"\",\n seq: 6,\n type: commitType.NORMAL,\n tags: [],\n parents: [\"5-8928ea0\"],\n branch: \"release\"\n }\n ],\n [\n \"commit7_ed848ba\",\n {\n id: \"7-ed848ba\",\n message: \"cherry-picked [object Object] into release\",\n seq: 7,\n type: commitType.CHERRY_PICK,\n tags: [],\n parents: [\"D\", \"M\"],\n branch: \"release\"\n }\n ]\n ]);\n let pos = 0;\n branchPos.set(\"main\", { pos: 0, index: 0 });\n branchPos.set(\"feature\", { pos: 107.49609375, index: 1 });\n branchPos.set(\"release\", { pos: 224.03515625, index: 2 });\n describe(\"TB\", () => {\n pos = 30;\n dir = \"TB\";\n const expectedCommitPositionTB = /* @__PURE__ */ new Map([\n [\"commitZero\", { x: 0, y: 40, posWithOffset: 40 }],\n [\"commitA\", { x: 107.49609375, y: 90, posWithOffset: 90 }],\n [\"commitB\", { x: 107.49609375, y: 140, posWithOffset: 140 }],\n [\"commitM\", { x: 0, y: 190, posWithOffset: 190 }],\n [\"commitC\", { x: 224.03515625, y: 240, posWithOffset: 240 }],\n [\"commit5_8928ea0\", { x: 224.03515625, y: 290, posWithOffset: 290 }],\n [\"commitD\", { x: 224.03515625, y: 340, posWithOffset: 340 }],\n [\"commit7_ed848ba\", { x: 224.03515625, y: 390, posWithOffset: 390 }]\n ]);\n commits.forEach((commit2, key) => {\n it(`should give the correct position for commit ${key}`, () => {\n const position = getCommitPosition(commit2, pos, false);\n expect(position).toEqual(expectedCommitPositionTB.get(key));\n pos += 50;\n });\n });\n });\n describe(\"LR\", () => {\n let pos2 = 30;\n dir = \"LR\";\n const expectedCommitPositionLR = /* @__PURE__ */ new Map([\n [\"commitZero\", { x: 0, y: 40, posWithOffset: 40 }],\n [\"commitA\", { x: 107.49609375, y: 90, posWithOffset: 90 }],\n [\"commitB\", { x: 107.49609375, y: 140, posWithOffset: 140 }],\n [\"commitM\", { x: 0, y: 190, posWithOffset: 190 }],\n [\"commitC\", { x: 224.03515625, y: 240, posWithOffset: 240 }],\n [\"commit5_8928ea0\", { x: 224.03515625, y: 290, posWithOffset: 290 }],\n [\"commitD\", { x: 224.03515625, y: 340, posWithOffset: 340 }],\n [\"commit7_ed848ba\", { x: 224.03515625, y: 390, posWithOffset: 390 }]\n ]);\n commits.forEach((commit2, key) => {\n it(`should give the correct position for commit ${key}`, () => {\n const position = getCommitPosition(commit2, pos2, false);\n expect(position).toEqual(expectedCommitPositionLR.get(key));\n pos2 += 50;\n });\n });\n });\n describe(\"getCommitClassType\", () => {\n const expectedCommitClassType = /* @__PURE__ */ new Map([\n [\"commitZero\", \"commit-normal\"],\n [\"commitA\", \"commit-normal\"],\n [\"commitB\", \"commit-normal\"],\n [\"commitM\", \"commit-merge\"],\n [\"commitC\", \"commit-normal\"],\n [\"commit5_8928ea0\", \"commit-cherry-pick\"],\n [\"commitD\", \"commit-normal\"],\n [\"commit7_ed848ba\", \"commit-cherry-pick\"]\n ]);\n commits.forEach((commit2, key) => {\n it(`should give the correct class type for commit ${key}`, () => {\n const classType = getCommitClassType(commit2);\n expect(classType).toBe(expectedCommitClassType.get(key));\n });\n });\n });\n });\n describe(\"building BT parallel commit diagram\", () => {\n const commits = /* @__PURE__ */ new Map([\n [\n \"1-abcdefg\",\n {\n id: \"1-abcdefg\",\n message: \"\",\n seq: 0,\n type: 0,\n tags: [],\n parents: [],\n branch: \"main\"\n }\n ],\n [\n \"2-abcdefg\",\n {\n id: \"2-abcdefg\",\n message: \"\",\n seq: 1,\n type: 0,\n tags: [],\n parents: [\"1-abcdefg\"],\n branch: \"main\"\n }\n ],\n [\n \"3-abcdefg\",\n {\n id: \"3-abcdefg\",\n message: \"\",\n seq: 2,\n type: 0,\n tags: [],\n parents: [\"2-abcdefg\"],\n branch: \"develop\"\n }\n ],\n [\n \"4-abcdefg\",\n {\n id: \"4-abcdefg\",\n message: \"\",\n seq: 3,\n type: 0,\n tags: [],\n parents: [\"3-abcdefg\"],\n branch: \"develop\"\n }\n ],\n [\n \"5-abcdefg\",\n {\n id: \"5-abcdefg\",\n message: \"\",\n seq: 4,\n type: 0,\n tags: [],\n parents: [\"2-abcdefg\"],\n branch: \"feature\"\n }\n ],\n [\n \"6-abcdefg\",\n {\n id: \"6-abcdefg\",\n message: \"\",\n seq: 5,\n type: 0,\n tags: [],\n parents: [\"5-abcdefg\"],\n branch: \"feature\"\n }\n ],\n [\n \"7-abcdefg\",\n {\n id: \"7-abcdefg\",\n message: \"\",\n seq: 6,\n type: 0,\n tags: [],\n parents: [\"2-abcdefg\"],\n branch: \"main\"\n }\n ],\n [\n \"8-abcdefg\",\n {\n id: \"8-abcdefg\",\n message: \"\",\n seq: 7,\n type: 0,\n tags: [],\n parents: [\"7-abcdefg\"],\n branch: \"main\"\n }\n ]\n ]);\n const expectedCommitPosition = /* @__PURE__ */ new Map([\n [\"1-abcdefg\", { x: 0, y: 40 }],\n [\"2-abcdefg\", { x: 0, y: 90 }],\n [\"3-abcdefg\", { x: 107.49609375, y: 140 }],\n [\"4-abcdefg\", { x: 107.49609375, y: 190 }],\n [\"5-abcdefg\", { x: 225.70703125, y: 140 }],\n [\"6-abcdefg\", { x: 225.70703125, y: 190 }],\n [\"7-abcdefg\", { x: 0, y: 140 }],\n [\"8-abcdefg\", { x: 0, y: 190 }]\n ]);\n const expectedCommitPositionAfterParallel = /* @__PURE__ */ new Map([\n [\"1-abcdefg\", { x: 0, y: 210 }],\n [\"2-abcdefg\", { x: 0, y: 160 }],\n [\"3-abcdefg\", { x: 107.49609375, y: 110 }],\n [\"4-abcdefg\", { x: 107.49609375, y: 60 }],\n [\"5-abcdefg\", { x: 225.70703125, y: 110 }],\n [\"6-abcdefg\", { x: 225.70703125, y: 60 }],\n [\"7-abcdefg\", { x: 0, y: 110 }],\n [\"8-abcdefg\", { x: 0, y: 60 }]\n ]);\n const expectedCommitCurrentPosition = /* @__PURE__ */ new Map([\n [\"1-abcdefg\", 30],\n [\"2-abcdefg\", 80],\n [\"3-abcdefg\", 130],\n [\"4-abcdefg\", 180],\n [\"5-abcdefg\", 130],\n [\"6-abcdefg\", 180],\n [\"7-abcdefg\", 130],\n [\"8-abcdefg\", 180]\n ]);\n const sortedKeys = [...expectedCommitPosition.keys()];\n it(\"should get the correct commit position and current position\", () => {\n dir = \"BT\";\n let curPos = 30;\n commitPos.clear();\n branchPos.clear();\n branchPos.set(\"main\", { pos: 0, index: 0 });\n branchPos.set(\"develop\", { pos: 107.49609375, index: 1 });\n branchPos.set(\"feature\", { pos: 225.70703125, index: 2 });\n commits.forEach((commit2, key) => {\n if (commit2.parents.length > 0) {\n curPos = calculateCommitPosition(commit2);\n }\n const position = setCommitPosition(commit2, curPos);\n expect(position).toEqual(expectedCommitPosition.get(key));\n expect(curPos).toEqual(expectedCommitCurrentPosition.get(key));\n });\n });\n it(\"should get the correct commit position after parallel commits\", () => {\n commitPos.clear();\n branchPos.clear();\n dir = \"BT\";\n const curPos = 30;\n commitPos.clear();\n branchPos.clear();\n branchPos.set(\"main\", { pos: 0, index: 0 });\n branchPos.set(\"develop\", { pos: 107.49609375, index: 1 });\n branchPos.set(\"feature\", { pos: 225.70703125, index: 2 });\n setParallelBTPos(sortedKeys, commits, curPos);\n sortedKeys.forEach((commit2) => {\n const position = commitPos.get(commit2);\n expect(position).toEqual(expectedCommitPositionAfterParallel.get(commit2));\n });\n });\n });\n it(\"add\", () => {\n commitPos.set(\"parent1\", { x: 1, y: 1 });\n commitPos.set(\"parent2\", { x: 2, y: 2 });\n commitPos.set(\"parent3\", { x: 3, y: 3 });\n dir = \"LR\";\n const parents = [\"parent1\", \"parent2\", \"parent3\"];\n const closestParent = findClosestParent(parents);\n expect(closestParent).toBe(\"parent3\");\n commitPos.clear();\n });\n}\n\n// src/diagrams/git/styles.js\nvar GIT_NAMED_COLOR_COUNT = 8;\nvar REDUX_GEOMETRY_THEMES2 = /* @__PURE__ */ new Set([\"redux\", \"redux-dark\", \"redux-color\", \"redux-dark-color\"]);\nvar COLOR_THEMES2 = /* @__PURE__ */ new Set([\"redux-color\", \"redux-dark-color\"]);\nvar NEO_THEMES = /* @__PURE__ */ new Set([\"neo\", \"neo-dark\"]);\nvar DARK_THEMES2 = /* @__PURE__ */ new Set([\"dark\", \"redux-dark\", \"redux-dark-color\", \"neo-dark\"]);\nvar NEO_COLOR_GEN_THEMES = /* @__PURE__ */ new Set([\n \"redux\",\n \"redux-dark\",\n \"redux-color\",\n \"redux-dark-color\",\n \"neo\",\n \"neo-dark\"\n]);\nvar genGitGraphGradient = /* @__PURE__ */ __name((options) => {\n const { svgId } = options;\n let sections = \"\";\n if (options.useGradient && svgId) {\n for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n sections += `\n .label${i} { fill: ${options.mainBkg}; stroke: url(${svgId}-gradient); stroke-width: ${options.strokeWidth};}\n `;\n }\n }\n return sections;\n}, \"genGitGraphGradient\");\nvar genColor = /* @__PURE__ */ __name((options) => {\n const config = getConfig();\n const { theme, themeVariables } = config;\n const { borderColorArray } = themeVariables;\n const useReduxGeometry = REDUX_GEOMETRY_THEMES2.has(theme);\n if (NEO_THEMES.has(theme)) {\n let sections = \"\";\n for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n if (i === 0) {\n sections += `\n .branch-label${i} { fill: ${options.nodeBorder};}\n .commit${i} { stroke: ${options.nodeBorder}; }\n .commit-highlight${i} { stroke: ${options.nodeBorder}; fill: ${options.nodeBorder}; }\n .arrow${i} { stroke: ${options.nodeBorder}; }\n .commit-bullets { fill: ${options.nodeBorder}; }\n .commit-cherry-pick${i} { stroke: ${options.nodeBorder}; }\n ${genGitGraphGradient(options)}`;\n } else {\n const ci = i % GIT_NAMED_COLOR_COUNT;\n sections += `\n .branch-label${i} { fill: ${options[\"gitBranchLabel\" + ci]}; }\n .commit${i} { stroke: ${options[\"git\" + ci]}; fill: ${options[\"git\" + ci]}; }\n .commit-highlight${i} { stroke: ${options[\"gitInv\" + ci]}; fill: ${options[\"gitInv\" + ci]}; }\n .arrow${i} { stroke: ${options[\"git\" + ci]}; }\n `;\n }\n }\n return sections;\n } else if (!COLOR_THEMES2.has(theme)) {\n let sections = \"\";\n for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n sections += `\n .branch-label${i} { fill: ${options.nodeBorder}; ${useReduxGeometry ? `font-weight:${options.noteFontWeight}` : \"\"} }\n .commit${i} { stroke: ${options.nodeBorder}; }\n .commit-highlight${i} { stroke: ${options.nodeBorder}; fill: ${options.nodeBorder}; }\n .label${i} { fill: ${options.mainBkg}; stroke: ${options.nodeBorder}; stroke-width: ${options.strokeWidth}; ${useReduxGeometry ? `font-weight:${options.noteFontWeight}` : \"\"}}\n .arrow${i} { stroke: ${options.nodeBorder}; }\n .commit-bullets { fill: ${options.nodeBorder}; }\n .commit-cherry-pick${i} { stroke: ${options.nodeBorder}; }\n `;\n }\n return sections;\n } else {\n let sections = \"\";\n for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n if (i === 0) {\n sections += `\n .branch-label${i} { fill: ${options.nodeBorder}; ${useReduxGeometry ? `font-weight:${options.noteFontWeight}` : \"\"} }\n .commit${i} { stroke: ${options.nodeBorder}; }\n .commit-highlight${i} { stroke: ${options.nodeBorder}; fill: ${options.mainBkg}; }\n .label${i} { fill: ${options.mainBkg}; stroke: ${options.nodeBorder}; stroke-width: ${options.strokeWidth}; ${useReduxGeometry ? `font-weight:${options.noteFontWeight}` : \"\"} }\n .arrow${i} { stroke: ${options.nodeBorder}; }\n .commit-bullets { fill: ${options.nodeBorder}; }\n `;\n } else {\n const colorIndex = i % borderColorArray.length;\n sections += `\n .branch-label${i} { fill: ${options.nodeBorder}; ${useReduxGeometry ? `font-weight:${options.noteFontWeight}` : \"\"} }\n .commit${i} { stroke: ${borderColorArray[colorIndex]}; fill: ${borderColorArray[colorIndex]}; }\n .commit-highlight${i} { stroke: ${borderColorArray[colorIndex]}; fill: ${borderColorArray[colorIndex]}; }\n .label${i} { fill: ${DARK_THEMES2.has(theme) ? options.mainBkg : borderColorArray[colorIndex]}; stroke: ${borderColorArray[colorIndex]}; stroke-width: ${options.strokeWidth}; }\n .arrow${i} { stroke: ${borderColorArray[colorIndex]}; }\n `;\n }\n }\n return sections;\n }\n}, \"genColor\");\nvar normalTheme = /* @__PURE__ */ __name((options) => {\n return `${Array.from({ length: options.THEME_COLOR_LIMIT }, (_, i) => i).map((i) => {\n const ci = i % GIT_NAMED_COLOR_COUNT;\n return `\n .branch-label${i} { fill: ${options[\"gitBranchLabel\" + ci]}; }\n .commit${i} { stroke: ${options[\"git\" + ci]}; fill: ${options[\"git\" + ci]}; }\n .commit-highlight${i} { stroke: ${options[\"gitInv\" + ci]}; fill: ${options[\"gitInv\" + ci]}; }\n .label${i} { fill: ${options[\"git\" + ci]}; }\n .arrow${i} { stroke: ${options[\"git\" + ci]}; }\n `;\n }).join(\"\\n\")}`;\n}, \"normalTheme\");\nvar getStyles = /* @__PURE__ */ __name((options) => {\n const config = getConfig();\n const { theme } = config;\n const useNeoColorGen = NEO_COLOR_GEN_THEMES.has(theme);\n return `\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n \n ${useNeoColorGen ? genColor(options) : normalTheme(options)}\n\n .branch {\n stroke-width: ${options.strokeWidth};\n stroke: ${options.commitLineColor ?? options.lineColor};\n stroke-dasharray: ${useNeoColorGen ? \"4 2\" : \"2\"};\n }\n .commit-label { font-size: ${options.commitLabelFontSize}; fill: ${useNeoColorGen ? options.nodeBorder : options.commitLabelColor}; ${useNeoColorGen ? `font-weight:${options.noteFontWeight};` : \"\"}}\n .commit-label-bkg { font-size: ${options.commitLabelFontSize}; fill: ${useNeoColorGen ? \"transparent\" : options.commitLabelBackground}; opacity: ${useNeoColorGen ? \"\" : 0.5}; }\n .tag-label { font-size: ${options.tagLabelFontSize}; fill: ${options.tagLabelColor};}\n .tag-label-bkg { fill: ${useNeoColorGen ? options.mainBkg : options.tagLabelBackground}; stroke: ${useNeoColorGen ? options.nodeBorder : options.tagLabelBorder}; ${useNeoColorGen ? `filter:${options.dropShadow}` : \"\"} }\n .tag-hole { fill: ${options.textColor}; }\n\n .commit-merge {\n stroke: ${useNeoColorGen ? options.mainBkg : options.primaryColor};\n fill: ${useNeoColorGen ? options.mainBkg : options.primaryColor};\n }\n .commit-reverse {\n stroke: ${useNeoColorGen ? options.mainBkg : options.primaryColor};\n fill: ${useNeoColorGen ? options.mainBkg : options.primaryColor};\n stroke-width: ${useNeoColorGen ? options.strokeWidth : 3};\n }\n .commit-highlight-outer {\n }\n .commit-highlight-inner {\n stroke: ${useNeoColorGen ? options.mainBkg : options.primaryColor};\n fill: ${useNeoColorGen ? options.mainBkg : options.primaryColor};\n }\n\n .arrow {\n /* Intentional: neo themes keep the bold 8px arrow (like classic themes); only redux-geometry themes use the thinner options.strokeWidth. */\n stroke-width: ${REDUX_GEOMETRY_THEMES2.has(theme) ? options.strokeWidth : 8};\n stroke-linecap: round;\n fill: none\n }\n .gitTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n }\n`;\n}, \"getStyles\");\nvar styles_default = getStyles;\n\n// src/diagrams/git/gitGraphDiagram.ts\nvar diagram = {\n parser,\n db,\n renderer: gitGraphRenderer_default,\n styles: styles_default\n};\nexport {\n diagram\n};\n"],"x_google_ignoreList":[0],"mappings":"yYAkCA,IAAI,EAAa,CACf,OAAQ,EACR,QAAS,EACT,UAAW,EACX,MAAO,EACP,YAAa,EACd,CAGG,GAA0B,EAAsB,SAChD,EAA6B,MAChB,EAAc,CAC3B,GAAG,GACH,GAAG,GAAW,CAAC,SAChB,CACY,CACZ,YAAY,CACX,EAAQ,IAAI,MAAsB,CACpC,IAAM,EAAS,GAAY,CACrB,EAAiB,EAAO,eACxB,EAAkB,EAAO,gBAC/B,MAAO,CACL,iBACA,QAAyB,IAAI,IAC7B,KAAM,KACN,aAA8B,IAAI,IAAI,CAAC,CAAC,EAAgB,CAAE,KAAM,EAAgB,MAAO,EAAiB,CAAC,CAAC,CAAC,CAC3G,SAA0B,IAAI,IAAI,CAAC,CAAC,EAAgB,KAAK,CAAC,CAAC,CAC3D,WAAY,EACZ,UAAW,KACX,IAAK,EACL,QAAS,EAAE,CACZ,EACD,CACF,SAAS,GAAQ,CACf,OAAO,EAAO,CAAE,OAAQ,EAAG,CAAC,CAE9B,EAAO,EAAO,QAAQ,CACtB,SAAS,EAAO,EAAM,EAAI,CACxB,IAAM,EAA4B,OAAO,OAAO,KAAK,CACrD,OAAO,EAAK,QAAQ,EAAK,IAAS,CAChC,IAAM,EAAM,EAAG,EAAK,CAKpB,OAJK,EAAU,KACb,EAAU,GAAO,GACjB,EAAI,KAAK,EAAK,EAET,GACN,EAAE,CAAC,CAER,EAAO,EAAQ,SAAS,CACxB,IAAI,GAA+B,EAAO,SAAS,EAAM,CACvD,EAAM,QAAQ,UAAY,GACzB,eAAe,CACd,GAA6B,EAAO,SAAS,EAAc,CAC7D,EAAI,MAAM,cAAe,EAAa,CACtC,EAAe,GAAc,MAAM,CACnC,IAA+B,KAC/B,GAAI,CACF,EAAM,QAAQ,QAAU,KAAK,MAAM,EAAa,OACzC,EAAG,CACV,EAAI,MAAM,uCAAwC,EAAE,QAAQ,GAE7D,aAAa,CACZ,GAA6B,EAAO,UAAW,CACjD,OAAO,EAAM,QAAQ,SACpB,aAAa,CACZ,GAAyB,EAAO,SAAS,EAAU,CACrD,IAAI,EAAM,EAAS,IACf,EAAK,EAAS,GACZ,EAAO,EAAS,KAClB,EAAO,EAAS,KACpB,EAAI,KAAK,SAAU,EAAK,EAAI,EAAM,EAAK,CACvC,EAAI,MAAM,mBAAoB,EAAK,EAAI,EAAM,EAAK,CAClD,IAAM,EAAS,GAAY,CAC3B,EAAK,EAAe,aAAa,EAAI,EAAO,CAC5C,EAAM,EAAe,aAAa,EAAK,EAAO,CAC9C,EAAO,GAAM,IAAK,GAAQ,EAAe,aAAa,EAAK,EAAO,CAAC,CACnE,IAAM,EAAY,CAChB,GAAI,GAAU,EAAM,QAAQ,IAAM,IAAM,GAAO,CAC/C,QAAS,EACT,IAAK,EAAM,QAAQ,MACnB,KAAM,GAAQ,EAAW,OACzB,KAAM,GAAQ,EAAE,CAChB,QAAS,EAAM,QAAQ,MAAQ,KAAO,EAAE,CAAG,CAAC,EAAM,QAAQ,KAAK,GAAG,CAClE,OAAQ,EAAM,QAAQ,WACvB,CACD,EAAM,QAAQ,KAAO,EACrB,EAAI,KAAK,cAAe,EAAO,eAAe,CAC1C,EAAM,QAAQ,QAAQ,IAAI,EAAU,GAAG,EACzC,EAAI,KAAK,aAAa,EAAU,GAAG,iBAAiB,CAEtD,EAAM,QAAQ,QAAQ,IAAI,EAAU,GAAI,EAAU,CAClD,EAAM,QAAQ,SAAS,IAAI,EAAM,QAAQ,WAAY,EAAU,GAAG,CAClE,EAAI,MAAM,iBAAmB,EAAU,GAAG,EACzC,SAAS,CACR,GAAyB,EAAO,SAAS,EAAU,CACrD,IAAI,EAAO,EAAS,KACd,EAAQ,EAAS,MAEvB,GADA,EAAO,EAAe,aAAa,EAAM,GAAY,CAAC,CAClD,EAAM,QAAQ,SAAS,IAAI,EAAK,CAClC,MAAU,MACR,4HAA4H,EAAK,IAClI,CAEH,EAAM,QAAQ,SAAS,IAAI,EAAM,EAAM,QAAQ,MAAQ,KAA+B,KAAxB,EAAM,QAAQ,KAAK,GAAU,CAC3F,EAAM,QAAQ,aAAa,IAAI,EAAM,CAAE,OAAM,QAAO,CAAC,CACrD,EAAS,EAAK,CACd,EAAI,MAAM,kBAAkB,EAC3B,SAAS,CACR,GAAwB,EAAQ,GAAY,CAC9C,IAAI,EAAc,EAAQ,OACtB,EAAW,EAAQ,GACjB,EAAe,EAAQ,KACvB,EAAa,EAAQ,KACrB,EAAS,GAAY,CAC3B,EAAc,EAAe,aAAa,EAAa,EAAO,CAC9D,AACE,IAAW,EAAe,aAAa,EAAU,EAAO,CAE1D,IAAM,EAAqB,EAAM,QAAQ,SAAS,IAAI,EAAM,QAAQ,WAAW,CACzE,EAAmB,EAAM,QAAQ,SAAS,IAAI,EAAY,CAC1D,EAAgB,EAAqB,EAAM,QAAQ,QAAQ,IAAI,EAAmB,CAAG,IAAK,GAC1F,EAAc,EAAmB,EAAM,QAAQ,QAAQ,IAAI,EAAiB,CAAG,IAAK,GAC1F,GAAI,GAAiB,GAAe,EAAc,SAAW,EAC3D,MAAU,MAAM,wBAAwB,EAAY,gBAAgB,CAEtE,GAAI,EAAM,QAAQ,aAAe,EAAa,CAC5C,IAAM,EAAY,MAAM,8DAA8D,CAMtF,KALA,GAAM,KAAO,CACX,KAAM,SAAS,IACf,MAAO,SAAS,IAChB,SAAU,CAAC,aAAa,CACzB,CACK,EAER,GAAI,IAAkB,IAAK,IAAK,CAAC,EAAe,CAC9C,IAAM,EAAY,MAChB,+CAA+C,EAAM,QAAQ,WAAW,iBACzE,CAMD,KALA,GAAM,KAAO,CACX,KAAM,SAAS,IACf,MAAO,SAAS,IAChB,SAAU,CAAC,SAAS,CACrB,CACK,EAER,GAAI,CAAC,EAAM,QAAQ,SAAS,IAAI,EAAY,CAAE,CAC5C,IAAM,EAAY,MAChB,oDAAsD,EAAc,mBACrE,CAMD,KALA,GAAM,KAAO,CACX,KAAM,SAAS,IACf,MAAO,SAAS,IAChB,SAAU,CAAC,UAAU,IAAc,CACpC,CACK,EAER,GAAI,IAAgB,IAAK,IAAK,CAAC,EAAa,CAC1C,IAAM,EAAY,MAChB,oDAAsD,EAAc,mBACrE,CAMD,KALA,GAAM,KAAO,CACX,KAAM,SAAS,IACf,MAAO,SAAS,IAChB,SAAU,CAAC,WAAW,CACvB,CACK,EAER,GAAI,IAAkB,EAAa,CACjC,IAAM,EAAY,MAAM,2DAA2D,CAMnF,KALA,GAAM,KAAO,CACX,KAAM,SAAS,IACf,MAAO,SAAS,IAChB,SAAU,CAAC,aAAa,CACzB,CACK,EAER,GAAI,GAAY,EAAM,QAAQ,QAAQ,IAAI,EAAS,CAAE,CACnD,IAAM,EAAY,MAChB,8CAAgD,EAAW,2CAC5D,CAQD,KAPA,GAAM,KAAO,CACX,KAAM,SAAS,EAAY,GAAG,EAAS,GAAG,EAAa,GAAG,GAAY,KAAK,IAAI,GAC/E,MAAO,SAAS,EAAY,GAAG,EAAS,GAAG,EAAa,GAAG,GAAY,KAAK,IAAI,GAChF,SAAU,CACR,SAAS,EAAY,GAAG,EAAS,UAAU,EAAa,GAAG,GAAY,KAAK,IAAI,GACjF,CACF,CACK,EAER,IAAM,EAAiB,GAAsC,GACvD,EAAU,CACd,GAAI,GAAY,GAAG,EAAM,QAAQ,IAAI,GAAG,GAAO,GAC/C,QAAS,iBAAiB,EAAY,QAAQ,EAAM,QAAQ,aAC5D,IAAK,EAAM,QAAQ,MACnB,QAAS,EAAM,QAAQ,MAAQ,KAAO,EAAE,CAAG,CAAC,EAAM,QAAQ,KAAK,GAAI,EAAe,CAClF,OAAQ,EAAM,QAAQ,WACtB,KAAM,EAAW,MACjB,WAAY,EACZ,SAAU,IACV,KAAM,GAAc,EAAE,CACvB,CACD,EAAM,QAAQ,KAAO,EACrB,EAAM,QAAQ,QAAQ,IAAI,EAAQ,GAAI,EAAQ,CAC9C,EAAM,QAAQ,SAAS,IAAI,EAAM,QAAQ,WAAY,EAAQ,GAAG,CAChE,EAAI,MAAM,EAAM,QAAQ,SAAS,CACjC,EAAI,MAAM,iBAAiB,EAC1B,QAAQ,CACP,GAA6B,EAAO,SAAS,EAAc,CAC7D,IAAI,EAAW,EAAa,GACxB,EAAW,EAAa,SACxB,EAAO,EAAa,KACpB,EAAiB,EAAa,OAClC,EAAI,MAAM,uBAAwB,EAAU,EAAU,EAAK,CAC3D,IAAM,EAAS,GAAY,CAK3B,GAJA,EAAW,EAAe,aAAa,EAAU,EAAO,CACxD,EAAW,EAAe,aAAa,EAAU,EAAO,CACxD,EAAO,GAAM,IAAK,GAAQ,EAAe,aAAa,EAAK,EAAO,CAAC,CACnE,EAAiB,EAAe,aAAa,EAAgB,EAAO,CAChE,CAAC,GAAY,CAAC,EAAM,QAAQ,QAAQ,IAAI,EAAS,CAAE,CACrD,IAAM,EAAY,MAChB,8EACD,CAMD,KALA,GAAM,KAAO,CACX,KAAM,cAAc,EAAS,GAAG,IAChC,MAAO,cAAc,EAAS,GAAG,IACjC,SAAU,CAAC,kBAAkB,CAC9B,CACK,EAER,IAAM,EAAe,EAAM,QAAQ,QAAQ,IAAI,EAAS,CACxD,GAAI,IAAiB,IAAK,IAAK,CAAC,EAC9B,MAAU,MAAM,8EAA8E,CAEhG,GAAI,GAAkB,EAAE,MAAM,QAAQ,EAAa,QAAQ,EAAI,EAAa,QAAQ,SAAS,EAAe,EAI1G,MAHkB,MAChB,yGAES,CAEb,IAAM,EAAqB,EAAa,OACxC,GAAI,EAAa,OAAS,EAAW,OAAS,CAAC,EAI7C,MAHkB,MAChB,wHAES,CAEb,GAAI,CAAC,GAAY,CAAC,EAAM,QAAQ,QAAQ,IAAI,EAAS,CAAE,CACrD,GAAI,IAAuB,EAAM,QAAQ,WAAY,CACnD,IAAM,EAAY,MAChB,8EACD,CAMD,KALA,GAAM,KAAO,CACX,KAAM,cAAc,EAAS,GAAG,IAChC,MAAO,cAAc,EAAS,GAAG,IACjC,SAAU,CAAC,kBAAkB,CAC9B,CACK,EAER,IAAM,EAAkB,EAAM,QAAQ,SAAS,IAAI,EAAM,QAAQ,WAAW,CAC5E,GAAI,IAAoB,IAAK,IAAK,CAAC,EAAiB,CAClD,IAAM,EAAY,MAChB,qDAAqD,EAAM,QAAQ,WAAW,iBAC/E,CAMD,KALA,GAAM,KAAO,CACX,KAAM,cAAc,EAAS,GAAG,IAChC,MAAO,cAAc,EAAS,GAAG,IACjC,SAAU,CAAC,kBAAkB,CAC9B,CACK,EAER,IAAM,EAAgB,EAAM,QAAQ,QAAQ,IAAI,EAAgB,CAChE,GAAI,IAAkB,IAAK,IAAK,CAAC,EAAe,CAC9C,IAAM,EAAY,MAChB,qDAAqD,EAAM,QAAQ,WAAW,iBAC/E,CAMD,KALA,GAAM,KAAO,CACX,KAAM,cAAc,EAAS,GAAG,IAChC,MAAO,cAAc,EAAS,GAAG,IACjC,SAAU,CAAC,kBAAkB,CAC9B,CACK,EAER,IAAM,EAAU,CACd,GAAI,EAAM,QAAQ,IAAM,IAAM,GAAO,CACrC,QAAS,iBAAiB,GAAc,QAAQ,QAAQ,EAAM,QAAQ,aACtE,IAAK,EAAM,QAAQ,MACnB,QAAS,EAAM,QAAQ,MAAQ,KAAO,EAAE,CAAG,CAAC,EAAM,QAAQ,KAAK,GAAI,EAAa,GAAG,CACnF,OAAQ,EAAM,QAAQ,WACtB,KAAM,EAAW,YACjB,KAAM,EAAO,EAAK,OAAO,QAAQ,CAAG,CAClC,eAAe,EAAa,KAAK,EAAa,OAAS,EAAW,MAAQ,WAAW,IAAmB,KACzG,CACF,CACD,EAAM,QAAQ,KAAO,EACrB,EAAM,QAAQ,QAAQ,IAAI,EAAQ,GAAI,EAAQ,CAC9C,EAAM,QAAQ,SAAS,IAAI,EAAM,QAAQ,WAAY,EAAQ,GAAG,CAChE,EAAI,MAAM,EAAM,QAAQ,SAAS,CACjC,EAAI,MAAM,gBAAgB,GAE3B,aAAa,CACZ,EAA2B,EAAO,SAAS,EAAS,CAEtD,GADA,EAAU,EAAe,aAAa,EAAS,GAAY,CAAC,CACvD,EAAM,QAAQ,SAAS,IAAI,EAAQ,CAUjC,CACL,EAAM,QAAQ,WAAa,EAC3B,IAAM,EAAK,EAAM,QAAQ,SAAS,IAAI,EAAM,QAAQ,WAAW,CAC3D,IAAO,IAAK,IAAK,CAAC,EACpB,EAAM,QAAQ,KAAO,KAErB,EAAM,QAAQ,KAAO,EAAM,QAAQ,QAAQ,IAAI,EAAG,EAAI,SAhBhB,CACxC,IAAM,EAAY,MAChB,+EAA+E,EAAQ,IACxF,CAMD,KALA,GAAM,KAAO,CACX,KAAM,YAAY,IAClB,MAAO,YAAY,IACnB,SAAU,CAAC,UAAU,IAAU,CAChC,CACK,IAUP,WAAW,CACd,SAAS,EAAO,EAAK,EAAK,EAAQ,CAChC,IAAM,EAAQ,EAAI,QAAQ,EAAI,CAC1B,IAAU,GACZ,EAAI,KAAK,EAAO,CAEhB,EAAI,OAAO,EAAO,EAAG,EAAO,CAGhC,EAAO,EAAQ,SAAS,CACxB,SAAS,EAAyB,EAAW,CAC3C,IAAM,EAAU,EAAU,QAAQ,EAAK,IACjC,EAAI,IAAM,EAAQ,IACb,EAEF,EACN,EAAU,GAAG,CACZ,EAAO,GACX,EAAU,QAAQ,SAAS,EAAG,CACxB,IAAM,EACR,GAAQ,KAER,GAAQ,MAEV,CACF,IAAM,EAAQ,CAAC,EAAM,EAAQ,GAAI,EAAQ,IAAI,CAC7C,IAAK,IAAM,KAAW,EAAM,QAAQ,SAC9B,EAAM,QAAQ,SAAS,IAAI,EAAQ,GAAK,EAAQ,IAClD,EAAM,KAAK,EAAQ,CAIvB,GADA,EAAI,MAAM,EAAM,KAAK,IAAI,CAAC,CACtB,EAAQ,SAAW,EAAQ,QAAQ,QAAU,GAAK,EAAQ,QAAQ,IAAM,EAAQ,QAAQ,GAAI,CAC9F,IAAM,EAAY,EAAM,QAAQ,QAAQ,IAAI,EAAQ,QAAQ,GAAG,CAC/D,EAAO,EAAW,EAAS,EAAU,CACjC,EAAQ,QAAQ,IAClB,EAAU,KAAK,EAAM,QAAQ,QAAQ,IAAI,EAAQ,QAAQ,GAAG,CAAC,MAE1D,GAAI,EAAQ,QAAQ,QAAU,EACnC,YAEA,GAAI,EAAQ,QAAQ,GAAI,CACtB,IAAM,EAAY,EAAM,QAAQ,QAAQ,IAAI,EAAQ,QAAQ,GAAG,CAC/D,EAAO,EAAW,EAAS,EAAU,CAGzC,EAAY,EAAO,EAAY,GAAM,EAAE,GAAG,CAC1C,EAAyB,EAAU,CAErC,EAAO,EAA0B,2BAA2B,CAC5D,IAAI,GAA8B,EAAO,UAAW,CAClD,EAAI,MAAM,EAAM,QAAQ,QAAQ,CAChC,IAAM,EAAO,GAAiB,CAAC,GAC/B,EAAyB,CAAC,EAAK,CAAC,EAC/B,cAAc,CACb,GAAyB,EAAO,UAAW,CAC7C,EAAM,OAAO,CACb,GAAO,EACN,QAAQ,CACP,GAAwC,EAAO,UAAW,CAU5D,MATsB,CAAC,GAAG,EAAM,QAAQ,aAAa,QAAQ,CAAC,CAAC,KAAK,EAAc,IAC5E,EAAa,QAAU,MAAQ,EAAa,QAAU,IAAK,GACtD,EAEF,CACL,GAAG,EACH,MAAO,WAAW,KAAK,IAAI,CAC5B,CACD,CAAC,MAAM,EAAG,KAAO,EAAE,OAAS,IAAM,EAAE,OAAS,GAAG,CAAC,KAAK,CAAE,WAAY,CAAE,OAAM,EAC1D,EACnB,wBAAwB,CACvB,GAA8B,EAAO,UAAW,CAClD,OAAO,EAAM,QAAQ,UACpB,cAAc,CACb,GAA6B,EAAO,UAAW,CACjD,OAAO,EAAM,QAAQ,SACpB,aAAa,CACZ,EAAkC,EAAO,UAAW,CACtD,IAAM,EAAY,CAAC,GAAG,EAAM,QAAQ,QAAQ,QAAQ,CAAC,CAKrD,OAJA,EAAU,QAAQ,SAAS,EAAG,CAC5B,EAAI,MAAM,EAAE,GAAG,EACf,CACF,EAAU,MAAM,EAAG,IAAM,EAAE,IAAM,EAAE,IAAI,CAChC,GACN,kBAAkB,CAUjB,EAAK,CACP,aACA,UAAW,EACX,gBACA,cACA,cACA,UACA,UACA,SACA,cACA,WAEA,eACA,MAAO,GACP,yBACA,eACA,cACA,kBACA,iBA3BqC,EAAO,UAAW,CACvD,OAAO,EAAM,QAAQ,YACpB,mBAyBe,CAChB,aAzBiC,EAAO,UAAW,CACnD,OAAO,EAAM,QAAQ,WACpB,eAuBW,CACZ,QAvB4B,EAAO,UAAW,CAC9C,OAAO,EAAM,QAAQ,MACpB,UAqBM,CACP,cACA,cACA,oBACA,oBACA,kBACA,kBACD,CAGG,GAA2B,GAAQ,EAAK,IAAQ,CAClD,EAAiB,EAAK,EAAI,CACtB,EAAI,KACN,EAAI,aAAa,EAAI,IAAI,CAE3B,IAAK,IAAM,KAAa,EAAI,WAC1B,GAAe,EAAW,EAAI,EAE/B,WAAW,CACV,GAAiC,GAAQ,EAAW,IAAQ,CAQ9D,IAAM,EAAU,CANd,OAAwB,EAAQ,GAAS,EAAI,OAAO,GAAY,EAAK,CAAC,CAAE,SAAS,CACjF,OAAwB,EAAQ,GAAS,EAAI,OAAO,GAAY,EAAK,CAAC,CAAE,SAAS,CACjF,MAAuB,EAAQ,GAAS,EAAI,MAAM,GAAW,EAAK,CAAC,CAAE,QAAQ,CAC7E,SAA0B,EAAQ,GAAS,EAAI,SAAS,GAAc,EAAK,CAAC,CAAE,WAAW,CACzF,cAA+B,EAAQ,GAAS,EAAI,WAAW,GAAmB,EAAK,CAAC,CAAE,gBAAgB,CAErF,CAAC,EAAU,OAC9B,EACF,EAAQ,EAAU,CAElB,EAAI,MAAM,2BAA2B,EAAU,QAAQ,EAExD,iBAAiB,CAChB,GAA8B,EAAQ,IAOjC,CALL,GAAI,EAAQ,GACZ,IAAK,EAAQ,SAAW,GACxB,KAAM,EAAQ,OAAS,IAAK,GAA+B,EAAW,OAAtC,EAAW,EAAQ,MACnD,KAAM,EAAQ,MAAQ,IAAK,GAEd,EACd,cAAc,CACb,GAA8B,EAAQ,IAKjC,CAHL,KAAM,EAAQ,KACd,MAAO,EAAQ,OAAS,EAEX,EACd,cAAc,CACb,GAA6B,EAAQ,IAOhC,CALL,OAAQ,EAAO,OACf,GAAI,EAAO,IAAM,GACjB,KAAM,EAAO,OAAS,IAAK,GAA8B,IAAK,GAA/B,EAAW,EAAO,MACjD,KAAM,EAAO,MAAQ,IAAK,GAEd,EACb,aAAa,CACZ,GAAgC,EAAQ,GAC1B,EAAU,OAEzB,gBAAgB,CACf,GAAqC,EAAQ,IAOxC,CALL,GAAI,EAAc,GAClB,SAAU,GACV,KAAM,EAAc,MAAM,SAAW,EAAI,IAAK,GAAI,EAAc,KAChE,OAAQ,EAAc,OAEL,EAClB,qBAAqB,CACpB,GAAS,CACX,MAAuB,EAAO,KAAO,IAAU,CAC7C,IAAM,EAAM,MAAM,EAAM,WAAY,EAAM,CAC1C,EAAI,MAAM,EAAI,CACd,GAAS,EAAK,EAAG,EAChB,QAAQ,CACZ,CAoJG,EAAgB,GAChB,EAAc,GACd,EAAK,EACL,EAAK,EACL,EAAoB,EACpB,EAAwC,IAAI,IAAI,CAAC,QAAS,aAAc,cAAe,mBAAmB,CAAC,CAC3G,EAA+B,GAC/B,EAA+B,IAAI,IAAI,CAAC,cAAe,mBAAmB,CAAC,CAC3E,GAA8B,IAAI,IAAI,CAAC,OAAQ,aAAc,mBAAoB,WAAW,CAAC,CAC7F,EAAiC,GAAQ,EAAU,EAAO,EAAoB,KAC5E,GAAqB,EAAW,GAC1B,EAAW,IAAM,EAAQ,GAAK,EAEjC,EAAW,EACjB,iBAAiB,CAChB,EAA4B,IAAI,IAChC,EAA4B,IAAI,IAChC,EAAa,GACb,EAAiC,IAAI,IACrC,EAAQ,EAAE,CACV,EAAS,EACT,EAAM,KACN,EAAyB,MAAa,CACxC,EAAU,OAAO,CACjB,EAAU,OAAO,CACjB,EAAe,OAAO,CACtB,EAAS,EACT,EAAQ,EAAE,CACV,EAAM,MACL,QAAQ,CACP,EAA2B,EAAQ,GAAQ,CAC7C,IAAM,EAAW,SAAS,gBAAgB,6BAA8B,OAAO,CAW/E,OAVa,OAAO,GAAQ,SAAW,EAAI,MAAM,sBAAsB,CAAG,GACrE,QAAS,GAAQ,CACpB,IAAM,EAAQ,SAAS,gBAAgB,6BAA8B,QAAQ,CAC7E,EAAM,eAAe,uCAAwC,YAAa,WAAW,CACrF,EAAM,aAAa,KAAM,MAAM,CAC/B,EAAM,aAAa,IAAK,IAAI,CAC5B,EAAM,aAAa,QAAS,MAAM,CAClC,EAAM,YAAc,EAAI,MAAM,CAC9B,EAAS,YAAY,EAAM,EAC3B,CACK,GACN,WAAW,CACV,EAAoC,EAAQ,GAAY,CAC1D,IAAI,EACA,EACA,EAeJ,OAdI,IAAQ,MACV,EAAiC,GAAQ,EAAG,IAAM,GAAK,EAAG,iBAAiB,CAC3E,EAAiB,MAEjB,EAAiC,GAAQ,EAAG,IAAM,GAAK,EAAG,iBAAiB,CAC3E,EAAiB,GAEnB,EAAQ,QAAS,GAAW,CAC1B,IAAM,EAAiB,IAAQ,MAAQ,GAAO,KAAO,EAAU,IAAI,EAAO,EAAE,EAAI,EAAU,IAAI,EAAO,EAAE,EACnG,IAAmB,IAAK,IAAK,EAAe,EAAgB,EAAe,GAC7E,EAAgB,EAChB,EAAiB,IAEnB,CACK,GACN,oBAAoB,CACnB,GAAsC,EAAQ,GAAY,CAC5D,IAAI,EAAgB,GAChB,EAAc,IAQlB,OAPA,EAAQ,QAAS,GAAW,CAC1B,IAAM,EAAiB,EAAU,IAAI,EAAO,CAAC,EACzC,GAAkB,IACpB,EAAgB,EAChB,EAAc,IAEhB,CACK,GAAiB,IAAK,IAC5B,sBAAsB,CACrB,GAAmC,GAAQ,EAAY,EAAS,IAAgB,CAClF,IAAI,EAAS,EACT,EAAc,EACZ,EAAQ,EAAE,CAChB,EAAW,QAAS,GAAQ,CAC1B,IAAM,EAAU,EAAQ,IAAI,EAAI,CAChC,GAAI,CAAC,EACH,MAAU,MAAM,4BAA4B,IAAM,CAEhD,EAAQ,QAAQ,QAClB,EAAS,GAAwB,EAAQ,CACzC,EAAc,KAAK,IAAI,EAAQ,EAAY,EAE3C,EAAM,KAAK,EAAQ,CAErB,GAAkB,EAAS,EAAO,EAClC,CACF,EAAS,EACT,EAAM,QAAS,GAAY,CACzB,GAAgB,EAAS,EAAQ,EAAY,EAC7C,CACF,EAAW,QAAS,GAAQ,CAC1B,IAAM,EAAU,EAAQ,IAAI,EAAI,CAChC,GAAI,GAAS,QAAQ,OAAQ,CAC3B,IAAM,EAAgB,GAAoB,EAAQ,QAAQ,CAC1D,EAAS,EAAU,IAAI,EAAc,CAAC,EAAI,EACtC,GAAU,IACZ,EAAc,GAEhB,IAAM,EAAI,EAAU,IAAI,EAAQ,OAAO,CAAC,IAClC,EAAI,EAAS,EACnB,EAAU,IAAI,EAAQ,GAAI,CAAE,IAAG,IAAG,CAAC,GAErC,EACD,mBAAmB,CAClB,GAAuC,EAAQ,GAAY,CAC7D,IAAM,EAAgB,EAAkB,EAAQ,QAAQ,OAAQ,GAAM,IAAM,KAAK,CAAC,CAClF,GAAI,CAAC,EACH,MAAU,MAAM,uCAAuC,EAAQ,KAAK,CAEtE,IAAM,EAAmB,EAAU,IAAI,EAAc,EAAE,EACvD,GAAI,IAAqB,IAAK,GAC5B,MAAU,MAAM,gDAAgD,EAAQ,KAAK,CAE/E,OAAO,GACN,uBAAuB,CACtB,GAA0C,EAAQ,GAC3B,GAAqB,EACvB,CAAG,EACzB,0BAA0B,CACzB,GAAoC,GAAQ,EAAS,IAAW,CAClE,IAAM,EAAU,EAAU,IAAI,EAAQ,OAAO,CAC7C,GAAI,CAAC,EACH,MAAU,MAAM,+BAA+B,EAAQ,KAAK,CAE9D,IAAM,EAAI,EAAQ,IACZ,EAAI,EAAS,EAEnB,OADA,EAAU,IAAI,EAAQ,GAAI,CAAE,IAAG,IAAG,CAAC,CAC5B,CAAE,IAAG,IAAG,EACd,oBAAoB,CACnB,GAAkC,GAAQ,EAAS,EAAQ,IAAgB,CAC7E,IAAM,EAAU,EAAU,IAAI,EAAQ,OAAO,CAC7C,GAAI,CAAC,EACH,MAAU,MAAM,+BAA+B,EAAQ,KAAK,CAE9D,IAAM,EAAI,EAAS,EACb,EAAI,EAAQ,IAClB,EAAU,IAAI,EAAQ,GAAI,CAAE,IAAG,IAAG,CAAC,EAClC,kBAAkB,CACjB,GAAmC,GAAQ,EAAU,EAAS,EAAgB,EAAW,EAAa,IAAqB,CAC7H,GAAM,CAAE,SAAU,GAAY,CACxB,EAAmB,EAAsB,IAAI,GAAS,GAAG,CACzD,EAAgB,EAAa,IAAI,GAAS,GAAG,CAC7C,EAAS,GAAY,IAAI,GAAS,GAAG,CAC3C,GAAI,IAAqB,EAAW,UAClC,EAAS,OAAO,OAAO,CAAC,KAAK,IAAK,EAAe,EAAI,IAAM,EAAmB,EAAI,GAAG,CAAC,KAAK,IAAK,EAAe,EAAI,IAAM,EAAmB,EAAI,GAAG,CAAC,KAAK,QAAS,EAAmB,GAAK,GAAG,CAAC,KAAK,SAAU,EAAmB,GAAK,GAAG,CAAC,KACvO,QACA,UAAU,EAAQ,GAAG,mBAAmB,EAAe,EAAa,EAAmB,EAAc,CAAC,GAAG,EAAU,QACpH,CACD,EAAS,OAAO,OAAO,CAAC,KAAK,IAAK,EAAe,EAAI,GAAK,EAAmB,EAAI,GAAG,CAAC,KAAK,IAAK,EAAe,EAAI,GAAK,EAAmB,EAAI,GAAG,CAAC,KAAK,QAAS,EAAmB,EAAI,GAAG,CAAC,KAAK,SAAU,EAAmB,EAAI,GAAG,CAAC,KACnO,QACA,UAAU,EAAQ,GAAG,SAAS,EAAe,EAAa,EAAmB,EAAc,CAAC,GAAG,EAAU,QAC1G,MACI,GAAI,IAAqB,EAAW,YACzC,EAAS,OAAO,SAAS,CAAC,KAAK,KAAM,EAAe,EAAE,CAAC,KAAK,KAAM,EAAe,EAAE,CAAC,KAAK,IAAK,EAAmB,EAAI,GAAG,CAAC,KAAK,QAAS,UAAU,EAAQ,GAAG,GAAG,IAAY,CAC3K,EAAS,OAAO,SAAS,CAAC,KAAK,KAAM,EAAe,EAAI,EAAE,CAAC,KAAK,KAAM,EAAe,EAAI,EAAE,CAAC,KAAK,IAAK,EAAmB,IAAM,KAAK,CAAC,KAAK,OAAQ,EAAS,UAAY,OAAO,CAAC,KAAK,QAAS,UAAU,EAAQ,GAAG,GAAG,IAAY,CACjO,EAAS,OAAO,SAAS,CAAC,KAAK,KAAM,EAAe,EAAI,EAAE,CAAC,KAAK,KAAM,EAAe,EAAI,EAAE,CAAC,KAAK,IAAK,EAAmB,IAAM,KAAK,CAAC,KAAK,OAAQ,EAAS,UAAY,OAAO,CAAC,KAAK,QAAS,UAAU,EAAQ,GAAG,GAAG,IAAY,CACjO,EAAS,OAAO,OAAO,CAAC,KAAK,KAAM,EAAe,EAAI,EAAE,CAAC,KAAK,KAAM,EAAe,EAAI,EAAE,CAAC,KAAK,KAAM,EAAe,EAAE,CAAC,KAAK,KAAM,EAAe,EAAI,EAAE,CAAC,KAAK,SAAU,EAAS,UAAY,OAAO,CAAC,KAAK,QAAS,UAAU,EAAQ,GAAG,GAAG,IAAY,CACtP,EAAS,OAAO,OAAO,CAAC,KAAK,KAAM,EAAe,EAAI,EAAE,CAAC,KAAK,KAAM,EAAe,EAAI,EAAE,CAAC,KAAK,KAAM,EAAe,EAAE,CAAC,KAAK,KAAM,EAAe,EAAI,EAAE,CAAC,KAAK,SAAU,EAAS,UAAY,OAAO,CAAC,KAAK,QAAS,UAAU,EAAQ,GAAG,GAAG,IAAY,KACjP,CACL,IAAM,EAAS,EAAS,OAAO,SAAS,CAQxC,GAPA,EAAO,KAAK,KAAM,EAAe,EAAE,CACnC,EAAO,KAAK,KAAM,EAAe,EAAE,CACnC,EAAO,KAAK,IAAK,EAAmB,EAAI,GAAG,CAC3C,EAAO,KACL,QACA,UAAU,EAAQ,GAAG,SAAS,EAAe,EAAa,EAAmB,EAAc,GAC5F,CACG,IAAqB,EAAW,MAAO,CACzC,IAAM,EAAU,EAAS,OAAO,SAAS,CACzC,EAAQ,KAAK,KAAM,EAAe,EAAE,CACpC,EAAQ,KAAK,KAAM,EAAe,EAAE,CACpC,EAAQ,KAAK,IAAK,EAAmB,EAAI,EAAE,CAC3C,EAAQ,KACN,QACA,UAAU,EAAU,GAAG,EAAQ,GAAG,SAAS,EAAe,EAAa,EAAmB,EAAc,GACzG,CAEH,GAAI,IAAqB,EAAW,QAAS,CAC3C,IAAM,EAAQ,EAAS,OAAO,OAAO,CAC/B,EAAa,EAAmB,EAAI,EAC1C,EAAM,KACJ,IACA,KAAK,EAAe,EAAI,EAAW,GAAG,EAAe,EAAI,EAAW,GAAG,EAAe,EAAI,EAAW,GAAG,EAAe,EAAI,EAAW,GAAG,EAAe,EAAI,EAAW,GAAG,EAAe,EAAI,EAAW,GAAG,EAAe,EAAI,EAAW,GAAG,EAAe,EAAI,IAChQ,CAAC,KACA,QACA,UAAU,EAAU,GAAG,EAAQ,GAAG,SAAS,EAAe,EAAa,EAAmB,EAAc,GACzG,IAGJ,mBAAmB,CAClB,GAAkC,GAAQ,EAAS,EAAS,EAAgB,EAAK,IAAmB,CACtG,GAAI,EAAQ,OAAS,EAAW,cAAgB,EAAQ,UAAY,EAAQ,OAAS,EAAW,OAAS,EAAQ,OAAS,EAAW,QAAU,EAAe,gBAAiB,CAC7K,IAAM,EAAU,EAAQ,OAAO,IAAI,CAC7B,EAAW,EAAQ,OAAO,OAAO,CAAC,KAAK,QAAS,mBAAmB,CACnE,EAAO,EAAQ,OAAO,OAAO,CAAC,KAAK,IAAK,EAAI,CAAC,KAAK,IAAK,EAAe,EAAI,GAAG,CAAC,KAAK,QAAS,eAAe,CAAC,KAAK,EAAQ,GAAG,CAC5H,EAAO,EAAK,MAAM,EAAE,SAAS,CACnC,GAAI,IACF,EAAS,KAAK,IAAK,EAAe,cAAgB,EAAK,MAAQ,EAAI,EAAG,CAAC,KAAK,IAAK,EAAe,EAAI,KAAK,CAAC,KAAK,QAAS,EAAK,MAAQ,EAAI,EAAG,CAAC,KAAK,SAAU,EAAK,OAAS,EAAI,EAAG,CAC7K,IAAQ,MAAQ,IAAQ,MAC1B,EAAS,KAAK,IAAK,EAAe,GAAK,EAAK,MAAQ,EAAI,EAAK,GAAG,CAAC,KAAK,IAAK,EAAe,EAAI,GAAG,CACjG,EAAK,KAAK,IAAK,EAAe,GAAK,EAAK,MAAQ,EAAI,GAAI,CAAC,KAAK,IAAK,EAAe,EAAI,EAAK,OAAS,GAAG,EAEvG,EAAK,KAAK,IAAK,EAAe,cAAgB,EAAK,MAAQ,EAAE,CAE3D,EAAe,mBACjB,GAAI,IAAQ,MAAQ,IAAQ,KAC1B,EAAK,KACH,YACA,eAAiB,EAAe,EAAI,KAAO,EAAe,EAAI,IAC/D,CACD,EAAS,KACP,YACA,eAAiB,EAAe,EAAI,KAAO,EAAe,EAAI,IAC/D,KACI,CACL,IAAM,EAAM,MAAQ,EAAK,MAAQ,IAAM,GAAK,IACtC,EAAM,GAAK,EAAK,MAAQ,GAAK,IACnC,EAAQ,KACN,YACA,aAAe,EAAM,KAAO,EAAM,iBAAmB,EAAM,KAAO,EAAe,EAAI,IACtF,IAKR,kBAAkB,CACjB,GAAiC,GAAQ,EAAS,EAAS,EAAgB,IAAQ,CACrF,GAAI,EAAQ,KAAK,OAAS,EAAG,CAC3B,IAAI,EAAU,EACV,EAAkB,EAClB,EAAmB,EACjB,EAAc,EAAE,CACtB,IAAK,IAAM,KAAY,EAAQ,KAAK,SAAS,CAAE,CAC7C,IAAM,EAAO,EAAQ,OAAO,UAAU,CAChC,EAAO,EAAQ,OAAO,SAAS,CAC/B,EAAM,EAAQ,OAAO,OAAO,CAAC,KAAK,IAAK,EAAe,EAAI,GAAK,EAAQ,CAAC,KAAK,QAAS,YAAY,CAAC,KAAK,EAAS,CACjH,EAAU,EAAI,MAAM,EAAE,SAAS,CACrC,GAAI,CAAC,EACH,MAAU,MAAM,qBAAqB,CAEvC,EAAkB,KAAK,IAAI,EAAiB,EAAQ,MAAM,CAC1D,EAAmB,KAAK,IAAI,EAAkB,EAAQ,OAAO,CAC7D,EAAI,KAAK,IAAK,EAAe,cAAgB,EAAQ,MAAQ,EAAE,CAC/D,EAAY,KAAK,CACf,MACA,OACA,OACA,UACD,CAAC,CACF,GAAW,GAEb,IAAK,GAAM,CAAE,MAAK,OAAM,OAAM,QAAS,KAAc,EAAa,CAChE,IAAM,EAAK,EAAmB,EACxB,EAAK,EAAe,EAAI,KAAO,EAYrC,GAXA,EAAK,KAAK,QAAS,gBAAgB,CAAC,KAClC,SACA;QACA,EAAM,EAAkB,EAAI,EAAK,EAAE,GAAG,EAAK,EAAG;QAC9C,EAAM,EAAkB,EAAI,EAAK,EAAE,GAAG,EAAK,EAAG;QAC9C,EAAe,cAAgB,EAAkB,EAAI,EAAG,GAAG,EAAK,EAAK,EAAG;QACxE,EAAe,cAAgB,EAAkB,EAAI,EAAG,GAAG,EAAK,EAAK,EAAG;QACxE,EAAe,cAAgB,EAAkB,EAAI,EAAG,GAAG,EAAK,EAAK,EAAG;QACxE,EAAe,cAAgB,EAAkB,EAAI,EAAG,GAAG,EAAK,EAAK,IACtE,CACD,EAAK,KAAK,KAAM,EAAG,CAAC,KAAK,KAAM,EAAM,EAAkB,EAAI,EAAK,EAAE,CAAC,KAAK,IAAK,IAAI,CAAC,KAAK,QAAS,WAAW,CACvG,IAAQ,MAAQ,IAAQ,KAAM,CAChC,IAAM,EAAU,EAAM,EACtB,EAAK,KAAK,QAAS,gBAAgB,CAAC,KAClC,SACA;UACA,EAAe,EAAE,GAAG,EAAU,EAAE;UAChC,EAAe,EAAE,GAAG,EAAU,EAAE;UAChC,EAAe,EAAI,EAAc,GAAG,EAAU,EAAK,EAAE;UACrD,EAAe,EAAI,EAAgB,EAAkB,EAAE,GAAG,EAAU,EAAK,EAAE;UAC3E,EAAe,EAAI,EAAgB,EAAkB,EAAE,GAAG,EAAU,EAAK,EAAE;UAC3E,EAAe,EAAI,EAAc,GAAG,EAAU,EAAK,IACpD,CAAC,KAAK,YAAa,+BAAiC,EAAe,EAAI,IAAM,EAAM,IAAI,CACxF,EAAK,KAAK,KAAM,EAAe,EAAI,EAAK,EAAE,CAAC,KAAK,KAAM,EAAQ,CAAC,KAAK,YAAa,+BAAiC,EAAe,EAAI,IAAM,EAAM,IAAI,CACrJ,EAAI,KAAK,IAAK,EAAe,EAAI,EAAE,CAAC,KAAK,IAAK,EAAU,EAAE,CAAC,KAAK,YAAa,+BAAiC,EAAe,EAAI,IAAM,EAAM,IAAI,KAItJ,iBAAiB,CAChB,GAAqC,EAAQ,GAAY,CAE3D,OADyB,EAAQ,YAAc,EAAQ,KACvD,CACE,KAAK,EAAW,OACd,MAAO,gBACT,KAAK,EAAW,QACd,MAAO,iBACT,KAAK,EAAW,UACd,MAAO,mBACT,KAAK,EAAW,MACd,MAAO,eACT,KAAK,EAAW,YACd,MAAO,qBACT,QACE,MAAO,kBAEV,qBAAqB,CACpB,GAAoC,GAAQ,EAAS,EAAM,EAAK,IAAe,CACjF,IAAM,EAAwB,CAAE,EAAG,EAAG,EAAG,EAAG,CAC5C,GAAI,EAAQ,QAAQ,OAAS,EAAG,CAC9B,IAAM,EAAgB,EAAkB,EAAQ,QAAQ,CACxD,GAAI,EAAe,CACjB,IAAM,EAAiB,EAAW,IAAI,EAAc,EAAI,EAOtD,OANE,IAAS,KACJ,EAAe,EAAI,EACjB,IAAS,MACM,EAAW,IAAI,EAAQ,GAAG,EAAI,GAC/B,EAAI,EAEpB,EAAe,EAAI,QAI9B,GAAI,IAAS,KACX,OAAO,OACF,GAAI,IAAS,KAElB,OADwB,EAAW,IAAI,EAAQ,GAAG,EAAI,GAC/B,EAAI,OAE3B,MAAO,GAGX,MAAO,IACN,oBAAoB,CACnB,GAAoC,GAAQ,EAAS,EAAK,IAAsB,CAClF,IAAM,EAAgB,IAAQ,MAAQ,EAAoB,EAAM,EAAM,EAChE,EAAU,EAAU,IAAI,EAAQ,OAAO,EAAE,IACzC,EAAI,IAAQ,MAAQ,IAAQ,KAAO,EAAU,IAAI,EAAQ,OAAO,EAAE,IAAM,EAC9E,GAAI,IAAM,IAAK,IAAK,IAAY,IAAK,GACnC,MAAU,MAAM,sCAAsC,EAAQ,KAAK,CAErE,IAAM,EAAmB,EAAsB,IAAI,GAAY,CAAC,OAAS,GAAG,CAE5E,MAAO,CAAE,IAAG,EADF,IAAQ,MAAQ,IAAQ,KAAO,EAAgB,GAAW,EAAmB,EAA+B,EAAI,EAAI,IAC/G,gBAAe,EAC7B,oBAAoB,CACnB,EAA8B,GAAQ,EAAK,EAAS,EAAa,IAAmB,CACtF,IAAM,EAAW,EAAI,OAAO,IAAI,CAAC,KAAK,QAAS,iBAAiB,CAC1D,EAAU,EAAI,OAAO,IAAI,CAAC,KAAK,QAAS,gBAAgB,CAC1D,EAAM,IAAQ,MAAQ,IAAQ,KAAO,EAAa,EAChD,EAAO,CAAC,GAAG,EAAQ,MAAM,CAAC,CAC1B,EAAoB,EAAe,iBAAmB,GACtD,EAA2B,GAAQ,EAAG,IAAM,CAChD,IAAM,EAAO,EAAQ,IAAI,EAAE,EAAE,IACvB,EAAO,EAAQ,IAAI,EAAE,EAAE,IAC7B,OAAO,IAAS,IAAK,IAAK,IAAS,IAAK,GAAI,EAAO,EAAO,GACzD,WAAW,CACV,EAAa,EAAK,KAAK,EAAS,CAChC,IAAQ,OACN,GACF,GAAiB,EAAY,EAAS,EAAI,CAE5C,EAAa,EAAW,SAAS,EAEnC,EAAW,QAAS,GAAQ,CAC1B,IAAM,EAAU,EAAQ,IAAI,EAAI,CAChC,GAAI,CAAC,EACH,MAAU,MAAM,4BAA4B,IAAM,CAEhD,IACF,EAAM,GAAkB,EAAS,EAAK,EAAK,EAAU,EAEvD,IAAM,EAAiB,GAAkB,EAAS,EAAK,EAAkB,CACzE,GAAI,EAAa,CACf,IAAM,EAAY,GAAmB,EAAQ,CACvC,EAAmB,EAAQ,YAAc,EAAQ,KAEvD,GAAiB,EAAU,EAAS,EAAgB,EADhC,EAAU,IAAI,EAAQ,OAAO,EAAE,OAAS,EACgB,EAAiB,CAC7F,GAAgB,EAAS,EAAS,EAAgB,EAAK,EAAe,CACtE,GAAe,EAAS,EAAS,EAAgB,EAAI,CAEnD,IAAQ,MAAQ,IAAQ,KAC1B,EAAU,IAAI,EAAQ,GAAI,CAAE,EAAG,EAAe,EAAG,EAAG,EAAe,cAAe,CAAC,CAEnF,EAAU,IAAI,EAAQ,GAAI,CAAE,EAAG,EAAe,cAAe,EAAG,EAAe,EAAG,CAAC,CAErF,EAAM,IAAQ,MAAQ,EAAoB,EAAM,EAAc,EAAM,EAAc,EAC9E,EAAM,IACR,EAAS,IAEX,EACD,cAAc,CACb,GAAqC,GAAQ,EAAS,EAAS,EAAI,EAAI,IAAe,CAExF,IAAM,GADoB,IAAQ,MAAQ,IAAQ,KAAO,EAAG,EAAI,EAAG,EAAI,EAAG,EAAI,EAAG,GACpC,EAAQ,OAAS,EAAQ,OAChE,EAAuC,EAAQ,GAAM,EAAE,SAAW,EAAkB,uBAAuB,CAC3G,EAAmC,EAAQ,GAAM,EAAE,IAAM,EAAQ,KAAO,EAAE,IAAM,EAAQ,IAAK,mBAAmB,CACtH,MAAO,CAAC,GAAG,EAAW,QAAQ,CAAC,CAAC,KAAM,GAC7B,EAAiB,EAAQ,EAAI,EAAqB,EAAQ,CACjE,EACD,qBAAqB,CACpB,EAA2B,GAAQ,EAAI,EAAI,EAAQ,IAAM,CAC3D,IAAM,EAAY,EAAK,KAAK,IAAI,EAAK,EAAG,CAAG,EAU3C,OATI,EAAQ,EACH,EAEE,EAAM,MAAO,GAAS,KAAK,IAAI,EAAO,EAAU,EAAI,GACzD,EACJ,EAAM,KAAK,EAAU,CACd,GAGF,EAAS,EAAI,EADP,KAAK,IAAI,EAAK,EACE,CAAG,EAAG,EAAQ,EAAE,EAC5C,WAAW,CACV,GAA4B,GAAQ,EAAK,EAAS,EAAS,IAAe,CAC5E,GAAM,CAAE,MAAO,GAAe,GAAY,CACpC,EAAgB,EAAa,IAAI,GAAc,GAAG,CAClD,EAAK,EAAU,IAAI,EAAQ,GAAG,CAC9B,EAAK,EAAU,IAAI,EAAQ,GAAG,CACpC,GAAI,IAAO,IAAK,IAAK,IAAO,IAAK,GAC/B,MAAU,MAAM,0CAA0C,EAAQ,GAAG,OAAO,EAAQ,KAAK,CAE3F,IAAM,EAAsB,GAAmB,EAAS,EAAS,EAAI,EAAI,EAAW,CAChF,EAAM,GACN,EAAO,GACP,EAAS,EACT,EAAS,EACT,EAAgB,EAAU,IAAI,EAAQ,OAAO,EAAE,MAC/C,EAAQ,OAAS,EAAW,OAAS,EAAQ,KAAO,EAAQ,QAAQ,KACtE,EAAgB,EAAU,IAAI,EAAQ,OAAO,EAAE,OAEjD,IAAI,EACJ,GAAI,EAAqB,CACvB,EAAM,oBACN,EAAO,oBACP,EAAS,GACT,EAAS,GACT,IAAM,EAAQ,EAAG,EAAI,EAAG,EAAI,EAAS,EAAG,EAAG,EAAG,EAAE,CAAG,EAAS,EAAG,EAAG,EAAG,EAAE,CACjE,EAAQ,EAAG,EAAI,EAAG,EAAI,EAAS,EAAG,EAAG,EAAG,EAAE,CAAG,EAAS,EAAG,EAAG,EAAG,EAAE,CACnE,IAAQ,KACN,EAAG,EAAI,EAAG,EACZ,EAAU,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAQ,EAAO,GAAG,EAAG,EAAE,GAAG,EAAK,GAAG,EAAM,GAAG,EAAG,EAAI,EAAO,KAAK,EAAM,GAAG,EAAG,EAAI,EAAO,GAAG,EAAI,GAAG,EAAQ,EAAO,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAG,KAEvK,EAAgB,EAAU,IAAI,EAAQ,OAAO,EAAE,MAC/C,EAAU,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAQ,EAAO,GAAG,EAAG,EAAE,GAAG,EAAI,GAAG,EAAM,GAAG,EAAG,EAAI,EAAO,KAAK,EAAM,GAAG,EAAG,EAAI,EAAO,GAAG,EAAK,GAAG,EAAQ,EAAO,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAG,KAEhK,IAAQ,KACb,EAAG,EAAI,EAAG,EACZ,EAAU,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAQ,EAAO,GAAG,EAAG,EAAE,GAAG,EAAI,GAAG,EAAM,GAAG,EAAG,EAAI,EAAO,KAAK,EAAM,GAAG,EAAG,EAAI,EAAO,GAAG,EAAK,GAAG,EAAQ,EAAO,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAG,KAEvK,EAAgB,EAAU,IAAI,EAAQ,OAAO,EAAE,MAC/C,EAAU,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAQ,EAAO,GAAG,EAAG,EAAE,GAAG,EAAK,GAAG,EAAM,GAAG,EAAG,EAAI,EAAO,KAAK,EAAM,GAAG,EAAG,EAAI,EAAO,GAAG,EAAI,GAAG,EAAQ,EAAO,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAG,KAGrK,EAAG,EAAI,EAAG,EACZ,EAAU,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAQ,EAAO,GAAG,EAAI,GAAG,EAAG,EAAI,EAAO,GAAG,EAAM,KAAK,EAAG,EAAI,EAAO,GAAG,EAAM,GAAG,EAAK,GAAG,EAAG,EAAE,GAAG,EAAQ,EAAO,KAAK,EAAG,EAAE,GAAG,EAAG,KAEvK,EAAgB,EAAU,IAAI,EAAQ,OAAO,EAAE,MAC/C,EAAU,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAQ,EAAO,GAAG,EAAK,GAAG,EAAG,EAAI,EAAO,GAAG,EAAM,KAAK,EAAG,EAAI,EAAO,GAAG,EAAM,GAAG,EAAI,GAAG,EAAG,EAAE,GAAG,EAAQ,EAAO,KAAK,EAAG,EAAE,GAAG,EAAG,UAI3K,EAAM,oBACN,EAAO,oBACP,EAAS,GACT,EAAS,GACL,IAAQ,MACN,EAAG,EAAI,EAAG,IACZ,AAGE,EAHE,EAAQ,OAAS,EAAW,OAAS,EAAQ,KAAO,EAAQ,QAAQ,GAC5D,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAG,EAAI,EAAO,GAAG,EAAI,GAAG,EAAG,EAAI,EAAO,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAG,IAE7F,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAG,EAAI,EAAO,GAAG,EAAG,EAAE,GAAG,EAAK,GAAG,EAAG,EAAE,GAAG,EAAG,EAAI,EAAO,KAAK,EAAG,EAAE,GAAG,EAAG,KAGxG,EAAG,EAAI,EAAG,IACZ,EAAM,oBACN,EAAO,oBACP,EAAS,GACT,EAAS,GACT,AAGE,EAHE,EAAQ,OAAS,EAAW,OAAS,EAAQ,KAAO,EAAQ,QAAQ,GAC5D,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAG,EAAI,EAAO,GAAG,EAAK,GAAG,EAAG,EAAI,EAAO,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAG,IAE9F,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAG,EAAI,EAAO,GAAG,EAAG,EAAE,GAAG,EAAI,GAAG,EAAG,EAAE,GAAG,EAAG,EAAI,EAAO,KAAK,EAAG,EAAE,GAAG,EAAG,KAGvG,EAAG,IAAM,EAAG,IACd,EAAU,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAG,MAErC,IAAQ,MACb,EAAG,EAAI,EAAG,IACZ,AAGE,EAHE,EAAQ,OAAS,EAAW,OAAS,EAAQ,KAAO,EAAQ,QAAQ,GAC5D,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAG,EAAI,EAAO,GAAG,EAAK,GAAG,EAAG,EAAI,EAAO,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAG,IAE9F,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAG,EAAI,EAAO,GAAG,EAAG,EAAE,GAAG,EAAI,GAAG,EAAG,EAAE,GAAG,EAAG,EAAI,EAAO,KAAK,EAAG,EAAE,GAAG,EAAG,KAGvG,EAAG,EAAI,EAAG,IACZ,EAAM,oBACN,EAAO,oBACP,EAAS,GACT,EAAS,GACT,AAGE,EAHE,EAAQ,OAAS,EAAW,OAAS,EAAQ,KAAO,EAAQ,QAAQ,GAC5D,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAG,EAAI,EAAO,GAAG,EAAI,GAAG,EAAG,EAAI,EAAO,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAG,IAE7F,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAG,EAAI,EAAO,GAAG,EAAG,EAAE,GAAG,EAAK,GAAG,EAAG,EAAE,GAAG,EAAG,EAAI,EAAO,KAAK,EAAG,EAAE,GAAG,EAAG,KAGxG,EAAG,IAAM,EAAG,IACd,EAAU,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAG,OAG1C,EAAG,EAAI,EAAG,IACZ,AAGE,EAHE,EAAQ,OAAS,EAAW,OAAS,EAAQ,KAAO,EAAQ,QAAQ,GAC5D,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAG,EAAI,EAAO,GAAG,EAAG,EAAE,GAAG,EAAK,GAAG,EAAG,EAAE,GAAG,EAAG,EAAI,EAAO,KAAK,EAAG,EAAE,GAAG,EAAG,IAE9F,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAG,EAAI,EAAO,GAAG,EAAI,GAAG,EAAG,EAAI,EAAO,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAG,KAGvG,EAAG,EAAI,EAAG,IACZ,AAGE,EAHE,EAAQ,OAAS,EAAW,OAAS,EAAQ,KAAO,EAAQ,QAAQ,GAC5D,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAG,EAAI,EAAO,GAAG,EAAG,EAAE,GAAG,EAAI,GAAG,EAAG,EAAE,GAAG,EAAG,EAAI,EAAO,KAAK,EAAG,EAAE,GAAG,EAAG,IAE7F,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAG,EAAI,EAAO,GAAG,EAAK,GAAG,EAAG,EAAI,EAAO,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAG,KAGxG,EAAG,IAAM,EAAG,IACd,EAAU,KAAK,EAAG,EAAE,GAAG,EAAG,EAAE,KAAK,EAAG,EAAE,GAAG,EAAG,MAIlD,GAAI,IAAY,IAAK,GACnB,MAAU,MAAM,4BAA4B,CAE9C,EAAI,OAAO,OAAO,CAAC,KAAK,IAAK,EAAQ,CAAC,KACpC,QACA,cAAgB,EAAe,EAAe,EAAmB,EAAc,CAChF,EACA,YAAY,CACX,GAA6B,GAAQ,EAAK,IAAY,CACxD,IAAM,EAAU,EAAI,OAAO,IAAI,CAAC,KAAK,QAAS,gBAAgB,CAC9D,CAAC,GAAG,EAAQ,MAAM,CAAC,CAAC,QAAS,GAAQ,CACnC,IAAM,EAAU,EAAQ,IAAI,EAAI,CAC5B,EAAQ,SAAW,EAAQ,QAAQ,OAAS,GAC9C,EAAQ,QAAQ,QAAS,GAAW,CAClC,GAAU,EAAS,EAAQ,IAAI,EAAO,CAAE,EAAS,EAAQ,EACzD,EAEJ,EACD,aAAa,CACZ,GAA+B,GAAQ,EAAK,EAAU,EAAgB,IAAO,CAC/E,GAAM,CAAE,OAAM,QAAO,kBAAmB,GAAY,CAC9C,CAAE,aAAY,kBAAmB,GAAoB,EACrD,EAAmB,EAAsB,IAAI,GAAS,GAAG,CACzD,EAAgB,EAAa,IAAI,GAAS,GAAG,CAC7C,EAAI,EAAI,OAAO,IAAI,CACzB,EAAS,SAAS,EAAS,IAAU,CACnC,IAAM,EAAsB,EAC1B,EACA,EAAmB,EAAkB,EACrC,EACD,CACK,EAAM,EAAU,IAAI,EAAQ,KAAK,EAAE,IACzC,GAAI,IAAQ,IAAK,GACf,MAAU,MAAM,iCAAiC,EAAQ,OAAO,CAElE,IAAM,EAAS,IAAQ,MAAQ,IAAQ,KAAO,EAAM,EAAmB,EAAM,EAA+B,EAAI,EAAI,EAAM,EACpH,EAAO,EAAE,OAAO,OAAO,CAC7B,EAAK,KAAK,KAAM,EAAE,CAClB,EAAK,KAAK,KAAM,EAAO,CACvB,EAAK,KAAK,KAAM,EAAO,CACvB,EAAK,KAAK,KAAM,EAAO,CACvB,EAAK,KAAK,QAAS,gBAAkB,EAAoB,CACrD,IAAQ,MACV,EAAK,KAAK,KAAM,EAAW,CAC3B,EAAK,KAAK,KAAM,EAAI,CACpB,EAAK,KAAK,KAAM,EAAO,CACvB,EAAK,KAAK,KAAM,EAAI,EACX,IAAQ,OACjB,EAAK,KAAK,KAAM,EAAO,CACvB,EAAK,KAAK,KAAM,EAAI,CACpB,EAAK,KAAK,KAAM,EAAW,CAC3B,EAAK,KAAK,KAAM,EAAI,EAEtB,EAAM,KAAK,EAAO,CAClB,IAAM,EAAO,EAAQ,KACf,EAAe,EAAS,EAAK,CAC7B,EAAM,EAAE,OAAO,OAAO,CAEtB,EADc,EAAE,OAAO,IAAI,CAAC,KAAK,QAAS,cACvB,CAAC,OAAO,IAAI,CAAC,KAAK,QAAS,qBAAuB,EAAoB,CAC/F,EAAM,MAAM,CAAC,YAAY,EAAa,CACtC,IAAM,EAAO,EAAa,SAAS,CAC7B,EAAe,EAAmB,EAAI,EACtC,EAAgB,EAAmB,GAAK,EACxC,EAAgB,EAAmB,EAA+B,EACpE,IAAS,OACX,EAAI,KAAK,YAAa,MAAM,CAE9B,EAAI,KAAK,QAAS,uBAAyB,EAAoB,CAAC,KAC9D,QACA,IAAS,MAAQ,UAAU,EAAmB,QAAQ,EAAG,eAAiB,IAAe,GAC1F,CAAC,KAAK,KAAM,EAAa,CAAC,KAAK,KAAM,EAAa,CAAC,KAAK,IAAK,CAAC,EAAK,MAAQ,GAAK,EAAe,oBAAsB,GAAO,GAAK,GAAG,CAAC,KAAK,IAAK,CAAC,EAAK,OAAS,EAAI,GAAG,CAAC,KAAK,QAAS,EAAK,MAAQ,GAAK,EAAc,CAAC,KAAK,SAAU,EAAK,OAAS,EAAI,EAAc,CACrQ,EAAM,KACJ,YACA,cAAgB,CAAC,EAAK,MAAQ,IAAM,EAAe,oBAAsB,GAAO,GAAK,GAAK,EAAgB,GAAK,MAAQ,EAAS,EAAK,OAAS,EAAI,GAAK,IACxJ,CACG,IAAQ,MACV,EAAI,KAAK,IAAK,EAAM,EAAK,MAAQ,EAAI,GAAG,CAAC,KAAK,IAAK,EAAE,CACrD,EAAM,KAAK,YAAa,cAAgB,EAAM,EAAK,MAAQ,EAAI,GAAK,OAAO,CACvE,IACF,EAAI,KAAK,YAAa,aAAa,CAAC,EAAgB,EAAI,EAAE,IAAI,CAAC,EAAgB,GAAG,GAAG,CACrF,EAAM,KACJ,YACA,cAAgB,EAAM,EAAK,MAAQ,EAAI,GAAK,MAAQ,CAAC,EAAgB,EAAI,GAAK,IAC/E,GAEM,IAAQ,MACjB,EAAI,KAAK,IAAK,EAAM,EAAK,MAAQ,EAAI,GAAG,CAAC,KAAK,IAAK,EAAO,CAC1D,EAAM,KAAK,YAAa,cAAgB,EAAM,EAAK,MAAQ,EAAI,GAAK,KAAO,EAAS,IAAI,CACpF,IACF,EAAI,KAAK,YAAa,aAAa,CAAC,EAAgB,EAAI,EAAE,IAAI,EAAgB,GAAG,GAAG,CACpF,EAAM,KACJ,YACA,cAAgB,EAAM,EAAK,MAAQ,EAAI,GAAK,MAAQ,EAAS,EAAgB,EAAI,GAAK,IACvF,GAGH,EAAI,KAAK,YAAa,mBAAqB,EAAS,GAAK,EAAgB,GAAK,IAAI,EAEpF,EACD,eAAe,CACd,GAAoC,EAAO,SAAS,EAAM,EAAK,EAAO,EAAM,EAAmB,CAGjG,OAFA,EAAU,IAAI,EAAM,CAAE,MAAK,QAAO,CAAC,CACnC,GAAO,IAAM,EAAoB,GAAK,IAAM,IAAQ,MAAQ,IAAQ,KAAO,EAAK,MAAQ,EAAI,GACrF,GACN,oBAAoB,CAoDnB,GAA2B,CAC7B,KApDyB,EAAO,SAAS,EAAK,EAAI,EAAK,EAAS,CAChE,GAAQ,CACR,EAAI,MAAM,uBAAwB,EAAM;EAAM,MAAO,EAAI,EAAI,CAC7D,IAAM,EAAM,EAAQ,GACpB,GAAI,CAAC,EAAI,UAAW,CAClB,EAAI,MAAM,0CAA0C,CACpD,OAEF,IAAM,EAAiB,EAAI,WAAW,CAChC,EAAoB,EAAe,mBAAqB,GAC9D,EAAiB,EAAI,YAAY,CACjC,IAAM,EAAW,EAAI,uBAAuB,CAC5C,EAAM,EAAI,cAAc,CACxB,IAAM,EAAWA,EAAO,QAAQ,EAAG,IAAI,CACjC,CAAE,OAAM,QAAO,kBAAmB,GAAY,CAC9C,CAAE,cAAa,gBAAe,eAAc,eAAgB,EAClE,GAAI,EAAa,CACf,IAAM,EAAW,EAAS,OAAO,OAAO,CAAC,OAAO,iBAAiB,CAAC,KAAK,KAAM,EAAK,YAAY,CAAC,KAAK,gBAAiB,oBAAoB,CAAC,KAAK,KAAM,KAAK,CAAC,KAAK,KAAM,KAAK,CAAC,KAAK,KAAM,OAAO,CAAC,KAAK,KAAM,KAAK,CAC/M,EAAS,OAAO,OAAO,CAAC,KAAK,SAAU,KAAK,CAAC,KAAK,aAAc,EAAc,CAAC,KAAK,eAAgB,EAAE,CACtG,EAAS,OAAO,OAAO,CAAC,KAAK,SAAU,OAAO,CAAC,KAAK,aAAc,EAAa,CAAC,KAAK,eAAgB,EAAE,CAErG,IAAS,OAAS,EAAsB,IAAI,GAAS,GAAG,EAC1D,EAAS,OAAO,OAAO,CAAC,OAAO,SAAS,CAAC,KAAK,KAAM,EAAK,eAAe,CAAC,KAAK,SAAU,OAAO,CAAC,KAAK,QAAS,OAAO,CAAC,OAAO,eAAe,CAAC,KAAK,KAAM,IAAI,CAAC,KAAK,KAAM,IAAI,CAAC,KAAK,eAAgB,EAAE,CAAC,KAAK,gBAAiB,OAAO,CAAC,KAAK,cAAe,EAAY,CAErQ,IAAI,EAAM,EACV,EAAS,SAAS,EAAS,IAAU,CACnC,IAAM,EAAe,EAAS,EAAQ,KAAK,CACrC,EAAI,EAAS,OAAO,IAAI,CACxB,EAAc,EAAE,OAAO,IAAI,CAAC,KAAK,QAAS,cAAc,CACxD,EAAQ,EAAY,OAAO,IAAI,CAAC,KAAK,QAAS,qBAAqB,CACzE,EAAM,MAAM,EAAE,YAAY,EAAa,CACvC,IAAM,EAAO,EAAa,SAAS,CACnC,EAAM,GAAkB,EAAQ,KAAM,EAAK,EAAO,EAAM,EAAkB,CAC1E,EAAM,QAAQ,CACd,EAAY,QAAQ,CACpB,EAAE,QAAQ,EACV,CACF,EAAY,EAAU,EAAgB,GAAO,EAAe,CACxD,EAAe,cACjB,GAAa,EAAU,EAAU,EAAgB,EAAG,CAEtD,GAAW,EAAU,EAAe,CACpC,EAAY,EAAU,EAAgB,GAAM,EAAe,CAC3D,EAAc,YACZ,EACA,eACA,EAAe,gBAAkB,EACjC,EAAI,iBAAiB,CACtB,CACD,EAAkB,IAAK,GAAG,EAAU,EAAe,eAAgB,EAAe,YAAY,EAC7F,OAEG,CACL,CAiYG,EAAwB,EACxB,EAAyC,IAAI,IAAI,CAAC,QAAS,aAAc,cAAe,mBAAmB,CAAC,CAC5G,GAAgC,IAAI,IAAI,CAAC,cAAe,mBAAmB,CAAC,CAC5E,GAA6B,IAAI,IAAI,CAAC,MAAO,WAAW,CAAC,CACzD,GAA+B,IAAI,IAAI,CAAC,OAAQ,aAAc,mBAAoB,WAAW,CAAC,CAC9F,GAAuC,IAAI,IAAI,CACjD,QACA,aACA,cACA,mBACA,MACA,WACD,CAAC,CACE,GAAsC,EAAQ,GAAY,CAC5D,GAAM,CAAE,SAAU,EACd,EAAW,GACf,GAAI,EAAQ,aAAe,EACzB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,kBAAmB,IAC7C,GAAY;cACJ,EAAE,YAAY,EAAQ,QAAQ,gBAAgB,EAAM,4BAA4B,EAAQ,YAAY;eAIhH,OAAO,GACN,sBAAsB,CACrB,GAA2B,EAAQ,GAAY,CAEjD,GAAM,CAAE,QAAO,kBADA,GACyB,CAClC,CAAE,oBAAqB,EACvB,EAAmB,EAAuB,IAAI,EAAM,CAC1D,GAAI,GAAW,IAAI,EAAM,CAAE,CACzB,IAAI,EAAW,GACf,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,kBAAmB,IAC7C,GAAI,IAAM,EACR,GAAY;uBACG,EAAE,WAAW,EAAQ,WAAW;iBACtC,EAAE,aAAa,EAAQ,WAAW;2BACxB,EAAE,aAAa,EAAQ,WAAW,UAAU,EAAQ,WAAW;gBAC1E,EAAE,aAAa,EAAQ,WAAW;kCAChB,EAAQ,WAAW;6BACxB,EAAE,aAAa,EAAQ,WAAW;UACrD,GAAoB,EAAQ,OACzB,CACL,IAAM,EAAK,EAAI,EACf,GAAY;uBACG,EAAE,WAAW,EAAQ,iBAAmB,GAAI;iBAClD,EAAE,aAAa,EAAQ,MAAQ,GAAI,UAAU,EAAQ,MAAQ,GAAI;2BACvD,EAAE,aAAa,EAAQ,SAAW,GAAI,UAAU,EAAQ,SAAW,GAAI;gBAClF,EAAE,aAAa,EAAQ,MAAQ,GAAI;UAI/C,OAAO,OACF,GAAK,GAAc,IAAI,EAAM,CAc7B,CACL,IAAI,EAAW,GACf,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,kBAAmB,IAC7C,GAAI,IAAM,EACR,GAAY;uBACG,EAAE,WAAW,EAAQ,WAAW,IAAI,EAAmB,eAAe,EAAQ,iBAAmB,GAAG;iBAC1G,EAAE,aAAa,EAAQ,WAAW;2BACxB,EAAE,aAAa,EAAQ,WAAW,UAAU,EAAQ,QAAQ;gBACvE,EAAE,YAAY,EAAQ,QAAQ,YAAY,EAAQ,WAAW,kBAAkB,EAAQ,YAAY,IAAI,EAAmB,eAAe,EAAQ,iBAAmB,GAAG;gBACvK,EAAE,aAAa,EAAQ,WAAW;kCAChB,EAAQ,WAAW;cAExC,CACL,IAAM,EAAa,EAAI,EAAiB,OACxC,GAAY;uBACG,EAAE,WAAW,EAAQ,WAAW,IAAI,EAAmB,eAAe,EAAQ,iBAAmB,GAAG;iBAC1G,EAAE,aAAa,EAAiB,GAAY,UAAU,EAAiB,GAAY;2BACzE,EAAE,aAAa,EAAiB,GAAY,UAAU,EAAiB,GAAY;gBAC9F,EAAE,YAAY,GAAa,IAAI,EAAM,CAAG,EAAQ,QAAU,EAAiB,GAAY,YAAY,EAAiB,GAAY,mBAAmB,EAAQ,YAAY;gBACvK,EAAE,aAAa,EAAiB,GAAY;UAIxD,OAAO,MArC6B,CACpC,IAAI,EAAW,GACf,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,kBAAmB,IAC7C,GAAY;uBACK,EAAE,WAAW,EAAQ,WAAW,IAAI,EAAmB,eAAe,EAAQ,iBAAmB,GAAG;iBAC1G,EAAE,aAAa,EAAQ,WAAW;2BACxB,EAAE,aAAa,EAAQ,WAAW,UAAU,EAAQ,WAAW;gBAC1E,EAAE,YAAY,EAAQ,QAAQ,YAAY,EAAQ,WAAW,kBAAkB,EAAQ,YAAY,IAAI,EAAmB,eAAe,EAAQ,iBAAmB,GAAG;gBACvK,EAAE,aAAa,EAAQ,WAAW;kCAChB,EAAQ,WAAW;6BACxB,EAAE,aAAa,EAAQ,WAAW;UAG3D,OAAO,IA0BR,WAAW,CACV,GAA8B,EAAQ,GACjC,GAAG,MAAM,KAAK,CAAE,OAAQ,EAAQ,kBAAmB,EAAG,EAAG,IAAM,EAAE,CAAC,IAAK,GAAM,CAClF,IAAM,EAAK,EAAI,EACf,MAAO;uBACY,EAAE,WAAW,EAAQ,iBAAmB,GAAI;iBAClD,EAAE,aAAa,EAAQ,MAAQ,GAAI,UAAU,EAAQ,MAAQ,GAAI;2BACvD,EAAE,aAAa,EAAQ,SAAW,GAAI,UAAU,EAAQ,SAAW,GAAI;gBAClF,EAAE,YAAY,EAAQ,MAAQ,GAAI;gBAClC,EAAE,aAAa,EAAQ,MAAQ,GAAI;WAE/C,CAAC,KAAK;EAAK,GACZ,cAAc,CA4Db,GAAU,CACZ,UACA,KACA,SAAU,GACV,OA/D8B,EAAQ,GAAY,CAElD,GAAM,CAAE,SADO,GACS,CAClB,EAAiB,GAAqB,IAAI,EAAM,CACtD,MAAO;;;;;;;;;;IAUL,EAAiB,GAAS,EAAQ,CAAG,GAAY,EAAQ,CAAC;;;oBAG1C,EAAQ,YAAY;cAC1B,EAAQ,iBAAmB,EAAQ,UAAU;yBAClC,EAAiB,MAAQ,IAAI;;+BAEvB,EAAQ,oBAAoB,UAAU,EAAiB,EAAQ,WAAa,EAAQ,iBAAiB,IAAI,EAAiB,eAAe,EAAQ,eAAe,GAAK,GAAG;mCACpK,EAAQ,oBAAoB,UAAU,EAAiB,cAAgB,EAAQ,sBAAsB,aAAa,EAAiB,GAAK,GAAI;4BACnJ,EAAQ,iBAAiB,UAAU,EAAQ,cAAc;2BAC1D,EAAiB,EAAQ,QAAU,EAAQ,mBAAmB,YAAY,EAAiB,EAAQ,WAAa,EAAQ,eAAe,IAAI,EAAiB,UAAU,EAAQ,aAAe,GAAG;sBACrM,EAAQ,UAAU;;;cAG1B,EAAiB,EAAQ,QAAU,EAAQ,aAAa;YAC1D,EAAiB,EAAQ,QAAU,EAAQ,aAAa;;;cAGtD,EAAiB,EAAQ,QAAU,EAAQ,aAAa;YAC1D,EAAiB,EAAQ,QAAU,EAAQ,aAAa;oBAChD,EAAiB,EAAQ,YAAc,EAAE;;;;;cAK/C,EAAiB,EAAQ,QAAU,EAAQ,aAAa;YAC1D,EAAiB,EAAQ,QAAU,EAAQ,aAAa;;;;;oBAKhD,EAAuB,IAAI,EAAM,CAAG,EAAQ,YAAc,EAAE;;;;;;;YAOpE,EAAQ,UAAU;;GAG3B,YAQqB,CACvB"}