@codragraph/cli 2.1.5 → 2.2.0-rc.6

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 (113) hide show
  1. package/README.md +18 -13
  2. package/dist/cli/analyze.d.ts +9 -4
  3. package/dist/cli/analyze.js +37 -13
  4. package/dist/cli/graphpack.d.ts +48 -0
  5. package/dist/cli/graphpack.js +217 -0
  6. package/dist/cli/index.js +81 -3
  7. package/dist/cli/status.d.ts +1 -1
  8. package/dist/cli/status.js +8 -0
  9. package/dist/cli/tool.d.ts +11 -2
  10. package/dist/cli/tool.js +138 -8
  11. package/dist/core/adaptive-profile.d.ts +52 -0
  12. package/dist/core/adaptive-profile.js +180 -0
  13. package/dist/core/cgdb/cgdb-adapter.d.ts +34 -5
  14. package/dist/core/cgdb/cgdb-adapter.js +418 -5
  15. package/dist/core/cgdb/pool-adapter.js +1 -1
  16. package/dist/core/graphpack/index.d.ts +14 -0
  17. package/dist/core/graphpack/index.js +474 -0
  18. package/dist/core/graphpack/types.d.ts +129 -0
  19. package/dist/core/graphpack/types.js +4 -0
  20. package/dist/core/ingestion/pipeline-phases/parse-impl.js +3 -1
  21. package/dist/core/ingestion/pipeline-phases/structure.js +19 -3
  22. package/dist/core/ingestion/pipeline.d.ts +10 -0
  23. package/dist/core/run-analyze.d.ts +27 -2
  24. package/dist/core/run-analyze.js +598 -27
  25. package/dist/core/search/bm25-index.d.ts +19 -0
  26. package/dist/core/search/bm25-index.js +68 -29
  27. package/dist/core/semantic/relationships.d.ts +36 -0
  28. package/dist/core/semantic/relationships.js +261 -0
  29. package/dist/mcp/local/local-backend.js +48 -3
  30. package/dist/mcp/resources.js +125 -0
  31. package/dist/mcp/tools.js +105 -0
  32. package/dist/server/api.js +112 -0
  33. package/dist/storage/repo-manager.d.ts +29 -0
  34. package/dist/web/assets/agent-CQNZQ-hg.js +1139 -0
  35. package/dist/web/assets/architectureDiagram-UL44E2DR-B5_goS_i.js +36 -0
  36. package/dist/web/assets/blockDiagram-7IZFK4PR-D7ZAlDyv.js +132 -0
  37. package/dist/web/assets/{c4Diagram-DFAF54RM-C4Hl3J2U.js → c4Diagram-Y2BXMSZH-Djcgm_54.js} +1 -1
  38. package/dist/web/assets/{chunk-7RZVMHOQ-BitYcNVR.js → chunk-3SSMPTDK-Cv2Zy2FO.js} +1 -1
  39. package/dist/web/assets/{chunk-TBF5ZNIQ-DL5stGM1.js → chunk-6764PJDD-Cppb-jH-.js} +1 -1
  40. package/dist/web/assets/{chunk-KSICW3F5-BYzvDLNI.js → chunk-AZZRMDJM-BHlLC7p3.js} +1 -1
  41. package/dist/web/assets/{chunk-AEOMTBSW-BgTIXPsY.js → chunk-JQRUD6KW-3F8Zg-1N.js} +1 -1
  42. package/dist/web/assets/chunk-KRXBNO2N-C0mbN9a7.js +1 -0
  43. package/dist/web/assets/chunk-LCXTWHL2-BoiuJpIF.js +231 -0
  44. package/dist/web/assets/{chunk-O5ABG6QK-dHwHzA6n.js → chunk-LII3EMHJ-Dqq0Qguw.js} +1 -1
  45. package/dist/web/assets/chunk-RG4AUYOV-Bl5F_gDs.js +206 -0
  46. package/dist/web/assets/{chunk-TU3PZOEN-RLyvLcv-.js → chunk-T5OCTHI4-B2tIcggA.js} +1 -1
  47. package/dist/web/assets/chunk-W44A43WB-BHe37iN7.js +13 -0
  48. package/dist/web/assets/{chunk-RWUO3TPN-BgRTY0_k.js → chunk-ZXARS5L4-wcrIaQvY.js} +1 -1
  49. package/dist/web/assets/classDiagram-KGZ6W3CR-IbI6v_24.js +1 -0
  50. package/dist/web/assets/classDiagram-v2-72OJOZXJ-IbI6v_24.js +1 -0
  51. package/dist/web/assets/{cose-bilkent-PNC4W37J-DVhePRYg.js → cose-bilkent-UX7MHV2Q-BWr7v0Wr.js} +1 -1
  52. package/dist/web/assets/dagre-ND4H6XIP-De5LIh1B.js +4 -0
  53. package/dist/web/assets/diagram-3NCE3AQN-Dd22FSHy.js +43 -0
  54. package/dist/web/assets/diagram-GF46GFSD-Cev3THY8.js +24 -0
  55. package/dist/web/assets/diagram-HNR7UZ2L-D8Z8RQGs.js +3 -0
  56. package/dist/web/assets/diagram-QXG6HAR7-B8VOJOiE.js +24 -0
  57. package/dist/web/assets/diagram-WEQXMOUZ-va1bLoMD.js +10 -0
  58. package/dist/web/assets/{erDiagram-GCSMX5X6-C3dhDFA8.js → erDiagram-L5TCEMPS-B3_9uAoP.js} +5 -5
  59. package/dist/web/assets/{flowDiagram-OTCZ4VVT-CWSFWmhr.js → flowDiagram-H6V6AXG4-98m6maI1.js} +9 -9
  60. package/dist/web/assets/ganttDiagram-JCBTUEKG-vE2nzETb.js +292 -0
  61. package/dist/web/assets/gitGraphDiagram-S2ZK5IYY-DKc8uUg_.js +106 -0
  62. package/dist/web/assets/index-BAhe1HSk.css +1 -0
  63. package/dist/web/assets/index-VTKdaklA.js +1415 -0
  64. package/dist/web/assets/infoDiagram-3YFTVSEB-DYP-Srzx.js +2 -0
  65. package/dist/web/assets/{ishikawaDiagram-YMYX4NHK-DUoJvNP2.js → ishikawaDiagram-BNXS4ZKH-QZnkpmmb.js} +3 -3
  66. package/dist/web/assets/{journeyDiagram-SO5T7YLQ-RMFPNNqz.js → journeyDiagram-M6C3CM3L-B5ojIuqu.js} +1 -1
  67. package/dist/web/assets/{kanban-definition-LJHFXRCJ-BzpDs1K9.js → kanban-definition-75IXJCU3-BJA8liRR.js} +4 -4
  68. package/dist/web/assets/{katex-GD7MH7QM-DBQvrix-.js → katex-K3KEBU37-DUqZiCRL.js} +1 -1
  69. package/dist/web/assets/mindmap-definition-2TDM6QVE-BQj5yylD.js +96 -0
  70. package/dist/web/assets/pieDiagram-CU6KROY3-4eSrPiQz.js +30 -0
  71. package/dist/web/assets/quadrantDiagram-VICAPDV7-PzxN8j55.js +7 -0
  72. package/dist/web/assets/{requirementDiagram-M5DCFWZL-DLHOVTSv.js → requirementDiagram-JXO7QTGE-CtplTc5y.js} +2 -2
  73. package/dist/web/assets/sankeyDiagram-URQDO5SZ-CoSgvkxv.js +40 -0
  74. package/dist/web/assets/sequenceDiagram-VS2MUI6T-D7ygyXvJ.js +162 -0
  75. package/dist/web/assets/stateDiagram-7D4R322I-v01gvwji.js +1 -0
  76. package/dist/web/assets/stateDiagram-v2-36443NZ5-DFD2b8_x.js +1 -0
  77. package/dist/web/assets/{timeline-definition-5SPVSISX-TRSDRgPw.js → timeline-definition-O6YCAMPW-CTI3M65J.js} +4 -4
  78. package/dist/web/assets/{vennDiagram-IE5QUKF5-DNy7HRBM.js → vennDiagram-MWXL3ELB-RnB0XMP7.js} +6 -6
  79. package/dist/web/assets/wardley-L42UT6IY-5TKZOOLJ-C-ZcgEBb.js +173 -0
  80. package/dist/web/assets/wardleyDiagram-CUQ6CDDI-EwRi4kwo.js +78 -0
  81. package/dist/web/assets/{xychartDiagram-ZHJ5623Y-Dr9r7a35.js → xychartDiagram-N2JHSOCM-DA38II6y.js} +4 -4
  82. package/dist/web/index.html +2 -2
  83. package/package.json +2 -2
  84. package/vendor/node_modules/node-addon-api/node_addon_api_except.stamp +0 -0
  85. package/dist/web/assets/agent-D5lb0zXz.js +0 -1089
  86. package/dist/web/assets/architectureDiagram-EMZXCZ2Q-CZtc99v_.js +0 -36
  87. package/dist/web/assets/blockDiagram-IGV67L2C-BtoUp-6Y.js +0 -132
  88. package/dist/web/assets/chunk-3GS5O3IE-DkUjU0WD.js +0 -231
  89. package/dist/web/assets/chunk-3YCYZ6SJ-CQkVgT_z.js +0 -1
  90. package/dist/web/assets/chunk-H3VCZNTA-Cx5XV_aC.js +0 -13
  91. package/dist/web/assets/chunk-HN6EAY2L-BBnyTNdB.js +0 -1
  92. package/dist/web/assets/chunk-PK6DOVAG-CvsEnugt.js +0 -206
  93. package/dist/web/assets/classDiagram-PPOCWD7C-DTr8QIOf.js +0 -1
  94. package/dist/web/assets/classDiagram-v2-23LJLIIU-DTr8QIOf.js +0 -1
  95. package/dist/web/assets/dagre-E77IOHMT-Dzx0A6ZU.js +0 -4
  96. package/dist/web/assets/diagram-H7BISOXX-CC9pRew1.js +0 -43
  97. package/dist/web/assets/diagram-JC5VWROH-Bau_i9tf.js +0 -24
  98. package/dist/web/assets/diagram-LXUTUG65-D9_FM2Gt.js +0 -10
  99. package/dist/web/assets/diagram-WEHSV5V5-BMlayouL.js +0 -24
  100. package/dist/web/assets/ganttDiagram-MUNLMDZQ-D3a67Yol.js +0 -292
  101. package/dist/web/assets/gitGraphDiagram-3HKGZ4G3-7jmry-vM.js +0 -106
  102. package/dist/web/assets/index-BgeqpYgd.js +0 -1415
  103. package/dist/web/assets/index-CT0GtFLZ.css +0 -1
  104. package/dist/web/assets/infoDiagram-MN7RKWGX-G7lhP0Ib.js +0 -2
  105. package/dist/web/assets/mindmap-definition-2EUWGEK5-Bk0O4roa.js +0 -96
  106. package/dist/web/assets/pieDiagram-3IATQBI2-DKU7kpgS.js +0 -30
  107. package/dist/web/assets/quadrantDiagram-E256RVCF-BY0TGWCS.js +0 -7
  108. package/dist/web/assets/sankeyDiagram-L3NBLAOT-DVMj5rX2.js +0 -10
  109. package/dist/web/assets/sequenceDiagram-ZOUHS735-CJC73bV-.js +0 -157
  110. package/dist/web/assets/stateDiagram-MLPALWAM-BCFyESls.js +0 -1
  111. package/dist/web/assets/stateDiagram-v2-B5LQ5ZB2-DahzzIca.js +0 -1
  112. package/dist/web/assets/wardley-RL74JXVD-BCRCBASE-B-eZEzf9.js +0 -161
  113. package/dist/web/assets/wardleyDiagram-XU3VSMPF-BP-r1xzR.js +0 -20
@@ -1,20 +0,0 @@
1
- import{c as Lt}from"./chunk-AEOMTBSW-BgTIXPsY.js";import{d as Nt}from"./wardley-RL74JXVD-BCRCBASE-B-eZEzf9.js";import{a as zt,l as At,n as Et,h as Tt,s as Bt,e as It,m as u,p as et,a7 as Rt,b as Xt,o as Ft,q as G,c as Yt}from"./index-BgeqpYgd.js";import"./chunk-H3VCZNTA-Cx5XV_aC.js";var j=u((e,r)=>{let a=e<=1?e*100:e;if(a<0||a>100)throw new Error(`${r} must be between 0-1 (decimal) or 0-100 (percentage). Received: ${e}`);return a},"toPercent"),B=u((e,r,a)=>({x:j(r,`${a} evolution`),y:j(e,`${a} visibility`)}),"toCoordinates"),tt=u(e=>{if(e){if(e==="+<>")return"bidirectional";if(e==="+<")return"backward";if(e==="+>")return"forward"}},"getFlowFromPort"),Ot=u(e=>{var a;if(!(e!=null&&e.startsWith("+")))return{};let r=(a=/^\+'([^']*)'/.exec(e))==null?void 0:a[1];return e.includes("<>")?{flow:"bidirectional",label:r}:e.includes("<")?{flow:"backward",label:r}:e.includes(">")?{flow:"forward",label:r}:{label:r}},"extractFlowFromArrow"),Dt=u((e,r)=>{if(Lt(e,r),e.size&&r.setSize(e.size.width,e.size.height),e.evolution){let a=e.evolution.stages.map(n=>n.secondName?`${n.name.trim()} / ${n.secondName.trim()}`:n.name.trim()),h=e.evolution.stages.filter(n=>n.boundary!==void 0).map(n=>n.boundary);r.updateAxes({stages:a,stageBoundaries:h})}if(e.anchors.forEach(a=>{let h=B(a.visibility,a.evolution,`Anchor "${a.name}"`);r.addNode(a.name,a.name,h.x,h.y,"anchor")}),e.components.forEach(a=>{var v;let h=B(a.visibility,a.evolution,`Component "${a.name}"`),n=a.label?(a.label.negX?-1:1)*a.label.offsetX:void 0,s=a.label?(a.label.negY?-1:1)*a.label.offsetY:void 0,m=(v=a.decorator)==null?void 0:v.strategy;r.addNode(a.name,a.name,h.x,h.y,"component",n,s,a.inertia,m)}),e.notes.forEach(a=>{let h=B(a.visibility,a.evolution,`Note "${a.text}"`);r.addNote(a.text,h.x,h.y)}),e.pipelines.forEach(a=>{let h=r.getNode(a.parent);if(!h||typeof h.y!="number")throw new Error(`Pipeline "${a.parent}" must reference an existing component with coordinates.`);let n=h.y;r.startPipeline(a.parent),a.components.forEach(s=>{let m=`${a.parent}_${s.name}`,v=s.label?(s.label.negX?-1:1)*s.label.offsetX:void 0,g=s.label?(s.label.negY?-1:1)*s.label.offsetY:void 0,z=j(s.evolution,`Pipeline component "${s.name}" evolution`);r.addNode(m,s.name,z,n,"pipeline-component",v,g),r.addPipelineComponent(a.parent,m)})}),e.links.forEach(a=>{let h=!!a.arrow&&(a.arrow.includes("-.->")||a.arrow.includes(".-.")),n=tt(a.fromPort)??tt(a.toPort),{flow:s,label:m}=Ot(a.arrow);!n&&s&&(n=s);let v=a.linkLabel,g=m??v;r.addLink(a.from,a.to,h,g,n)}),e.evolves.forEach(a=>{let h=r.getNode(a.component);if((h==null?void 0:h.y)!==void 0){let n=j(a.target,`Evolve target for "${a.component}"`);r.addTrend(a.component,n,h.y)}}),e.annotations.length>0){let a=e.annotations[0],h=B(a.x,a.y,"Annotations box");r.setAnnotationsBox(h.x,h.y)}e.annotation.forEach(a=>{let h=B(a.x,a.y,`Annotation ${a.number}`);r.addAnnotation(a.number,[{x:h.x,y:h.y}],a.text)}),e.accelerators.forEach(a=>{let h=B(a.x,a.y,`Accelerator "${a.name}"`);r.addAccelerator(a.name,h.x,h.y)}),e.deaccelerators.forEach(a=>{let h=B(a.x,a.y,`Deaccelerator "${a.name}"`);r.addDeaccelerator(a.name,h.x,h.y)})},"populateDb"),at={parser:{yy:void 0},parse:u(async e=>{var h;let r=await Nt("wardley",e);et.debug(r);let a=(h=at.parser)==null?void 0:h.yy;if(!a||typeof a.addNode!="function")throw new Error("parser.parser?.yy was not a WardleyDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");Dt(r,a)},"parse")},X,qt=(X=class{constructor(){this.nodes=new Map,this.links=[],this.trends=new Map,this.pipelines=new Map,this.annotations=[],this.notes=[],this.accelerators=[],this.deaccelerators=[],this.axes={}}addNode(r){let a=this.nodes.get(r.id)??{id:r.id,label:r.label},h={...a,...r,className:r.className??a.className,labelOffsetX:r.labelOffsetX??a.labelOffsetX,labelOffsetY:r.labelOffsetY??a.labelOffsetY};this.nodes.set(r.id,h)}addLink(r){this.links.push(r)}addTrend(r){this.trends.set(r.nodeId,r)}startPipeline(r){this.pipelines.set(r,{nodeId:r,componentIds:[]});let a=this.nodes.get(r);a&&(a.isPipelineParent=!0)}addPipelineComponent(r,a){let h=this.pipelines.get(r);h&&h.componentIds.push(a);let n=this.nodes.get(a);n&&(n.inPipeline=!0)}addAnnotation(r){this.annotations.push(r)}addNote(r){this.notes.push(r)}addAccelerator(r){this.accelerators.push(r)}addDeaccelerator(r){this.deaccelerators.push(r)}setAnnotationsBox(r,a){this.annotationsBox={x:r,y:a}}setAxes(r){this.axes={...this.axes,...r}}setSize(r,a){this.size={width:r,height:a}}getNode(r){return this.nodes.get(r)}build(){let r=[];for(let a of this.nodes.values()){if(typeof a.x!="number"||typeof a.y!="number")throw new Error(`Node "${a.label}" is missing coordinates`);r.push(a)}return{nodes:r,links:[...this.links],trends:[...this.trends.values()],pipelines:[...this.pipelines.values()],annotations:[...this.annotations],notes:[...this.notes],accelerators:[...this.accelerators],deaccelerators:[...this.deaccelerators],annotationsBox:this.annotationsBox,axes:{...this.axes},size:this.size}}clear(){this.nodes.clear(),this.links=[],this.trends.clear(),this.pipelines.clear(),this.annotations=[],this.notes=[],this.accelerators=[],this.deaccelerators=[],this.annotationsBox=void 0,this.axes={},this.size=void 0}},u(X,"WardleyBuilder"),X),$=new qt;function C(e){let r=G();return Yt(e.trim(),r)}u(C,"textSanitizer");function rt(){return G()["wardley-beta"]}u(rt,"getConfig");function nt(e,r,a,h,n,s,m,v,g){$.addNode({id:e,label:C(r),x:a,y:h,className:n,labelOffsetX:s,labelOffsetY:m,inertia:v,sourceStrategy:g})}u(nt,"addNode");function ot(e,r,a=!1,h,n){$.addLink({source:e,target:r,dashed:a,label:h,flow:n})}u(ot,"addLink");function it(e,r,a){$.addTrend({nodeId:e,targetX:r,targetY:a})}u(it,"addTrend");function lt(e,r,a){$.addAnnotation({number:e,coordinates:r,text:a?C(a):void 0})}u(lt,"addAnnotation");function st(e,r,a){$.addNote({text:C(e),x:r,y:a})}u(st,"addNote");function dt(e,r,a){$.addAccelerator({name:C(e),x:r,y:a})}u(dt,"addAccelerator");function ct(e,r,a){$.addDeaccelerator({name:C(e),x:r,y:a})}u(ct,"addDeaccelerator");function pt(e,r){$.setAnnotationsBox(e,r)}u(pt,"setAnnotationsBox");function ht(e,r){$.setSize(e,r)}u(ht,"setSize");function xt(e){$.startPipeline(e)}u(xt,"startPipeline");function gt(e,r){$.addPipelineComponent(e,r)}u(gt,"addPipelineComponent");function yt(e){let r={};e.xLabel&&(r.xLabel=C(e.xLabel)),e.yLabel&&(r.yLabel=C(e.yLabel)),e.stages&&(r.stages=e.stages.map(a=>C(a))),e.stageBoundaries&&(r.stageBoundaries=e.stageBoundaries),$.setAxes(r)}u(yt,"updateAxes");function ft(e){return $.getNode(e)}u(ft,"getNode");function ut(){return $.build()}u(ut,"getWardleyData");function mt(){$.clear(),Ft()}u(mt,"clear");var Wt={getConfig:rt,addNode:nt,addLink:ot,addTrend:it,addAnnotation:lt,addNote:st,addAccelerator:dt,addDeaccelerator:ct,setAnnotationsBox:pt,setSize:ht,startPipeline:xt,addPipelineComponent:gt,updateAxes:yt,getNode:ft,getWardleyData:ut,clear:mt,setAccTitle:It,getAccTitle:Bt,setDiagramTitle:Tt,getDiagramTitle:Et,getAccDescription:At,setAccDescription:zt},jt=["Genesis","Custom Built","Product","Commodity"],Gt=u(()=>{var r,a,h,n,s,m,v,g,z,S,k,L;let{themeVariables:e}=G();return{backgroundColor:((r=e.wardley)==null?void 0:r.backgroundColor)??e.background??"#fff",axisColor:((a=e.wardley)==null?void 0:a.axisColor)??"#000",axisTextColor:((h=e.wardley)==null?void 0:h.axisTextColor)??e.primaryTextColor??"#222",gridColor:((n=e.wardley)==null?void 0:n.gridColor)??"rgba(100, 100, 100, 0.2)",componentFill:((s=e.wardley)==null?void 0:s.componentFill)??"#fff",componentStroke:((m=e.wardley)==null?void 0:m.componentStroke)??"#000",componentLabelColor:((v=e.wardley)==null?void 0:v.componentLabelColor)??e.primaryTextColor??"#222",linkStroke:((g=e.wardley)==null?void 0:g.linkStroke)??"#000",evolutionStroke:((z=e.wardley)==null?void 0:z.evolutionStroke)??"#dc3545",annotationStroke:((S=e.wardley)==null?void 0:S.annotationStroke)??"#000",annotationTextColor:((k=e.wardley)==null?void 0:k.annotationTextColor)??e.primaryTextColor??"#222",annotationFill:((L=e.wardley)==null?void 0:L.annotationFill)??e.background??"#fff"}},"getTheme"),Ht=u(()=>{let e=G()["wardley-beta"];return{width:(e==null?void 0:e.width)??900,height:(e==null?void 0:e.height)??600,padding:(e==null?void 0:e.padding)??48,nodeRadius:(e==null?void 0:e.nodeRadius)??6,nodeLabelOffset:(e==null?void 0:e.nodeLabelOffset)??8,axisFontSize:(e==null?void 0:e.axisFontSize)??12,labelFontSize:(e==null?void 0:e.labelFontSize)??10,showGrid:(e==null?void 0:e.showGrid)??!1,useMaxWidth:(e==null?void 0:e.useMaxWidth)??!0}},"getConfigValues"),Vt=u((e,r,a,h)=>{var Q,U;et.debug(`Rendering Wardley map
2
- `+e);let n=Ht(),s=Gt(),m=n.nodeRadius*1.6,v=h.db,g=v.getWardleyData(),z=v.getDiagramTitle(),S=((Q=g.size)==null?void 0:Q.width)??n.width,k=((U=g.size)==null?void 0:U.height)??n.height,L=Rt(r);L.selectAll("*").remove(),Xt(L,k,S,n.useMaxWidth),L.attr("viewBox",`0 0 ${S} ${k}`);let M=L.append("g").attr("class","wardley-map"),H=L.append("defs");H.append("marker").attr("id",`arrow-${r}`).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerWidth",6).attr("markerHeight",6).attr("orient","auto-start-reverse").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("fill",s.evolutionStroke).attr("stroke","none"),H.append("marker").attr("id",`link-arrow-end-${r}`).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerWidth",5).attr("markerHeight",5).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("fill",s.linkStroke).attr("stroke","none"),H.append("marker").attr("id",`link-arrow-start-${r}`).attr("viewBox","0 0 10 10").attr("refX",1).attr("refY",5).attr("markerWidth",5).attr("markerHeight",5).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z").attr("fill",s.linkStroke).attr("stroke","none"),M.append("rect").attr("class","wardley-background").attr("width",S).attr("height",k).attr("fill",s.backgroundColor);let F=S-n.padding*2,Y=k-n.padding*2;z&&M.append("text").attr("class","wardley-title").attr("x",S/2).attr("y",n.padding/2).attr("fill",s.axisTextColor).attr("font-size",n.axisFontSize*1.05).attr("font-weight","bold").attr("text-anchor","middle").attr("dominant-baseline","middle").text(z);let A=u(t=>n.padding+t/100*F,"projectX"),E=u(t=>k-n.padding-t/100*Y,"projectY"),D=M.append("g").attr("class","wardley-axes");D.append("line").attr("x1",n.padding).attr("x2",S-n.padding).attr("y1",k-n.padding).attr("y2",k-n.padding).attr("stroke",s.axisColor).attr("stroke-width",1),D.append("line").attr("x1",n.padding).attr("x2",n.padding).attr("y1",n.padding).attr("y2",k-n.padding).attr("stroke",s.axisColor).attr("stroke-width",1);let wt=g.axes.xLabel??"Evolution",kt=g.axes.yLabel??"Visibility";D.append("text").attr("class","wardley-axis-label wardley-axis-label-x").attr("x",n.padding+F/2).attr("y",k-n.padding/4).attr("fill",s.axisTextColor).attr("font-size",n.axisFontSize).attr("font-weight","bold").attr("text-anchor","middle").text(wt),D.append("text").attr("class","wardley-axis-label wardley-axis-label-y").attr("x",n.padding/3).attr("y",n.padding+Y/2).attr("fill",s.axisTextColor).attr("font-size",n.axisFontSize).attr("font-weight","bold").attr("text-anchor","middle").attr("transform",`rotate(-90 ${n.padding/3} ${n.padding+Y/2})`).text(kt);let O=g.axes.stages&&g.axes.stages.length>0?g.axes.stages:jt;if(O.length>0){let t=M.append("g").attr("class","wardley-stages"),i=g.axes.stageBoundaries,o=[];if(i&&i.length===O.length){let l=0;i.forEach(d=>{o.push({start:l,end:d}),l=d})}else{let l=1/O.length;O.forEach((d,c)=>{o.push({start:c*l,end:(c+1)*l})})}O.forEach((l,d)=>{let c=o[d],y=n.padding+c.start*F,x=n.padding+c.end*F,f=(y+x)/2;d>0&&t.append("line").attr("x1",y).attr("x2",y).attr("y1",n.padding).attr("y2",k-n.padding).attr("stroke","#000").attr("stroke-width",1).attr("stroke-dasharray","5 5").attr("opacity",.8),t.append("text").attr("class","wardley-stage-label").attr("x",f).attr("y",k-n.padding/1.5).attr("fill",s.axisTextColor).attr("font-size",n.axisFontSize-2).attr("text-anchor","middle").text(l)})}if(n.showGrid){let t=M.append("g").attr("class","wardley-grid");for(let i=1;i<4;i++){let o=i/4,l=n.padding+F*o;t.append("line").attr("x1",l).attr("x2",l).attr("y1",n.padding).attr("y2",k-n.padding).attr("stroke",s.gridColor).attr("stroke-dasharray","2 6"),t.append("line").attr("x1",n.padding).attr("x2",S-n.padding).attr("y1",k-n.padding-Y*o).attr("y2",k-n.padding-Y*o).attr("stroke",s.gridColor).attr("stroke-dasharray","2 6")}}let p=new Map;if(g.nodes.forEach(t=>{p.set(t.id,{x:A(t.x),y:E(t.y),node:t})}),g.pipelines.length>0){let t=M.append("g").attr("class","wardley-pipelines"),i=M.append("g").attr("class","wardley-pipeline-links");g.pipelines.forEach(o=>{if(o.componentIds.length===0)return;let l=o.componentIds.map(x=>({id:x,pos:p.get(x),node:g.nodes.find(f=>f.id===x)})).filter(x=>x.pos&&x.node).sort((x,f)=>x.node.x-f.node.x);for(let x=0;x<l.length-1;x++){let f=l[x],w=l[x+1];i.append("line").attr("class","wardley-pipeline-evolution-link").attr("x1",f.pos.x).attr("y1",f.pos.y).attr("x2",w.pos.x).attr("y2",w.pos.y).attr("stroke",s.linkStroke).attr("stroke-width",1).attr("stroke-dasharray","4 4")}let d=1/0,c=-1/0,y=0;if(o.componentIds.forEach(x=>{let f=p.get(x);f&&(d=Math.min(d,f.x),c=Math.max(c,f.x),y=f.y)}),d!==1/0&&c!==-1/0){let x=n.nodeRadius*4,f=y-x/2,w=p.get(o.nodeId);if(w){let P=(d+c)/2;w.x=P,w.y=f-m/6}t.append("rect").attr("class","wardley-pipeline-box").attr("x",d-15).attr("y",f).attr("width",c-d+30).attr("height",x).attr("fill","none").attr("stroke",s.axisColor).attr("stroke-width",1.5).attr("rx",4).attr("ry",4)}})}let _=M.append("g").attr("class","wardley-links"),J=new Map;g.pipelines.forEach(t=>{J.set(t.nodeId,new Set(t.componentIds))});let K=g.links.filter(t=>{var i;return!(!p.has(t.source)||!p.has(t.target)||(i=J.get(t.target))!=null&&i.has(t.source))});_.selectAll("line").data(K).enter().append("line").attr("class",t=>`wardley-link${t.dashed?" wardley-link--dashed":""}`).attr("x1",t=>{let i=p.get(t.source),o=p.get(t.target),l=g.nodes.find(x=>x.id===t.source).isPipelineParent?m/Math.sqrt(2):n.nodeRadius,d=o.x-i.x,c=o.y-i.y,y=Math.sqrt(d*d+c*c);return i.x+d/y*l}).attr("y1",t=>{let i=p.get(t.source),o=p.get(t.target),l=g.nodes.find(x=>x.id===t.source).isPipelineParent?m/Math.sqrt(2):n.nodeRadius,d=o.x-i.x,c=o.y-i.y,y=Math.sqrt(d*d+c*c);return i.y+c/y*l}).attr("x2",t=>{let i=p.get(t.source),o=p.get(t.target),l=g.nodes.find(x=>x.id===t.target).isPipelineParent?m/Math.sqrt(2):n.nodeRadius,d=i.x-o.x,c=i.y-o.y,y=Math.sqrt(d*d+c*c);return o.x+d/y*l}).attr("y2",t=>{let i=p.get(t.source),o=p.get(t.target),l=g.nodes.find(x=>x.id===t.target).isPipelineParent?m/Math.sqrt(2):n.nodeRadius,d=i.x-o.x,c=i.y-o.y,y=Math.sqrt(d*d+c*c);return o.y+c/y*l}).attr("stroke",s.linkStroke).attr("stroke-width",1).attr("stroke-dasharray",t=>t.dashed?"6 6":null).attr("marker-end",t=>t.flow==="forward"||t.flow==="bidirectional"?`url(#link-arrow-end-${r})`:null).attr("marker-start",t=>t.flow==="backward"||t.flow==="bidirectional"?`url(#link-arrow-start-${r})`:null),_.selectAll("text").data(K.filter(t=>t.label)).enter().append("text").attr("class","wardley-link-label").attr("x",t=>{let i=p.get(t.source),o=p.get(t.target),l=(i.x+o.x)/2,d=o.y-i.y,c=o.x-i.x,y=Math.sqrt(c*c+d*d),x=8,f=d/y;return l+f*x}).attr("y",t=>{let i=p.get(t.source),o=p.get(t.target),l=(i.y+o.y)/2,d=o.x-i.x,c=o.y-i.y,y=Math.sqrt(d*d+c*c),x=8,f=-d/y;return l+f*x}).attr("fill",s.axisTextColor).attr("font-size",n.labelFontSize).attr("text-anchor","middle").attr("dominant-baseline","middle").attr("transform",t=>{let i=p.get(t.source),o=p.get(t.target),l=(i.x+o.x)/2,d=(i.y+o.y)/2,c=o.x-i.x,y=o.y-i.y,x=Math.sqrt(c*c+y*y),f=8,w=y/x,P=-c/x,I=l+w*f,q=d+P*f,R=Math.atan2(y,c)*180/Math.PI;return(R>90||R<-90)&&(R+=180),`rotate(${R} ${I} ${q})`}).text(t=>t.label);let bt=M.append("g").attr("class","wardley-trends"),$t=g.trends.map(t=>{let i=p.get(t.nodeId);if(!i)return null;let o=A(t.targetX),l=E(t.targetY),d=o-i.x,c=l-i.y,y=Math.sqrt(d*d+c*c),x=n.nodeRadius+2,f=y>x?o-d/y*x:o,w=y>x?l-c/y*x:l;return{origin:i,targetX:o,targetY:l,adjustedX2:f,adjustedY2:w}}).filter(t=>t!==null);bt.selectAll("line").data($t).enter().append("line").attr("class","wardley-trend").attr("x1",t=>t.origin.x).attr("y1",t=>t.origin.y).attr("x2",t=>t.adjustedX2).attr("y2",t=>t.adjustedY2).attr("stroke",s.evolutionStroke).attr("stroke-width",1).attr("stroke-dasharray","4 4").attr("marker-end",`url(#arrow-${r})`);let N=M.append("g").attr("class","wardley-nodes").selectAll("g").data(g.nodes).enter().append("g").attr("class",t=>["wardley-node",t.className?`wardley-node--${t.className}`:""].filter(Boolean).join(" "));N.filter(t=>t.sourceStrategy==="outsource").append("circle").attr("class","wardley-outsource-overlay").attr("cx",t=>p.get(t.id).x).attr("cy",t=>p.get(t.id).y).attr("r",n.nodeRadius*2).attr("fill","#666").attr("stroke",s.componentStroke).attr("stroke-width",1),N.filter(t=>t.sourceStrategy==="buy").append("circle").attr("class","wardley-buy-overlay").attr("cx",t=>p.get(t.id).x).attr("cy",t=>p.get(t.id).y).attr("r",n.nodeRadius*2).attr("fill","#ccc").attr("stroke",s.componentStroke).attr("stroke-width",1),N.filter(t=>t.sourceStrategy==="build").append("circle").attr("class","wardley-build-overlay").attr("cx",t=>p.get(t.id).x).attr("cy",t=>p.get(t.id).y).attr("r",n.nodeRadius*2).attr("fill","#eee").attr("stroke","#000").attr("stroke-width",1);let T=N.filter(t=>t.sourceStrategy==="market");T.append("circle").attr("class","wardley-market-overlay").attr("cx",t=>p.get(t.id).x).attr("cy",t=>p.get(t.id).y).attr("r",n.nodeRadius*2).attr("fill","white").attr("stroke",s.componentStroke).attr("stroke-width",1),N.filter(t=>!t.isPipelineParent&&t.sourceStrategy!=="market"&&t.className!=="anchor").append("circle").attr("cx",t=>p.get(t.id).x).attr("cy",t=>p.get(t.id).y).attr("r",n.nodeRadius).attr("fill",s.componentFill).attr("stroke",s.componentStroke).attr("stroke-width",1);let V=n.nodeRadius*.7,b=n.nodeRadius*1.2;if(T.append("line").attr("class","wardley-market-line").attr("x1",t=>p.get(t.id).x).attr("y1",t=>p.get(t.id).y-b).attr("x2",t=>p.get(t.id).x-b*Math.cos(Math.PI/6)).attr("y2",t=>p.get(t.id).y+b*Math.sin(Math.PI/6)).attr("stroke",s.componentStroke).attr("stroke-width",1),T.append("line").attr("class","wardley-market-line").attr("x1",t=>p.get(t.id).x-b*Math.cos(Math.PI/6)).attr("y1",t=>p.get(t.id).y+b*Math.sin(Math.PI/6)).attr("x2",t=>p.get(t.id).x+b*Math.cos(Math.PI/6)).attr("y2",t=>p.get(t.id).y+b*Math.sin(Math.PI/6)).attr("stroke",s.componentStroke).attr("stroke-width",1),T.append("line").attr("class","wardley-market-line").attr("x1",t=>p.get(t.id).x+b*Math.cos(Math.PI/6)).attr("y1",t=>p.get(t.id).y+b*Math.sin(Math.PI/6)).attr("x2",t=>p.get(t.id).x).attr("y2",t=>p.get(t.id).y-b).attr("stroke",s.componentStroke).attr("stroke-width",1),T.append("circle").attr("class","wardley-market-dot").attr("cx",t=>p.get(t.id).x).attr("cy",t=>p.get(t.id).y-b).attr("r",V).attr("fill","white").attr("stroke",s.componentStroke).attr("stroke-width",2),T.append("circle").attr("class","wardley-market-dot").attr("cx",t=>p.get(t.id).x-b*Math.cos(Math.PI/6)).attr("cy",t=>p.get(t.id).y+b*Math.sin(Math.PI/6)).attr("r",V).attr("fill","white").attr("stroke",s.componentStroke).attr("stroke-width",2),T.append("circle").attr("class","wardley-market-dot").attr("cx",t=>p.get(t.id).x+b*Math.cos(Math.PI/6)).attr("cy",t=>p.get(t.id).y+b*Math.sin(Math.PI/6)).attr("r",V).attr("fill","white").attr("stroke",s.componentStroke).attr("stroke-width",2),N.filter(t=>t.isPipelineParent===!0).append("rect").attr("x",t=>p.get(t.id).x-m/2).attr("y",t=>p.get(t.id).y-m/2).attr("width",m).attr("height",m).attr("fill",s.componentFill).attr("stroke",s.componentStroke).attr("stroke-width",1),N.filter(t=>t.inertia===!0).append("line").attr("class","wardley-inertia").attr("x1",t=>{let i=p.get(t.id),o=t.isPipelineParent?m/2+15:n.nodeRadius+15;return t.sourceStrategy&&(o+=n.nodeRadius+10),i.x+o}).attr("y1",t=>{let i=p.get(t.id),o=t.isPipelineParent?m:n.nodeRadius*2;return i.y-o/2}).attr("x2",t=>{let i=p.get(t.id),o=t.isPipelineParent?m/2+15:n.nodeRadius+15;return t.sourceStrategy&&(o+=n.nodeRadius+10),i.x+o}).attr("y2",t=>{let i=p.get(t.id),o=t.isPipelineParent?m:n.nodeRadius*2;return i.y+o/2}).attr("stroke",s.componentStroke).attr("stroke-width",6),N.append("text").attr("x",t=>{let i=p.get(t.id);if(t.className==="anchor")return t.labelOffsetX!==void 0?i.x+t.labelOffsetX:i.x;let o=n.nodeLabelOffset;t.sourceStrategy&&t.labelOffsetX===void 0&&(o+=10);let l=t.labelOffsetX??o;return i.x+l}).attr("y",t=>{let i=p.get(t.id);if(t.className==="anchor")return t.labelOffsetY!==void 0?i.y+t.labelOffsetY:i.y-3;let o=-n.nodeLabelOffset;t.sourceStrategy&&t.labelOffsetY===void 0&&(o-=10);let l=t.labelOffsetY??o;return i.y+l}).attr("class","wardley-node-label").attr("fill",t=>t.className==="evolved"?s.evolutionStroke:t.className==="anchor"?"#000":s.componentLabelColor).attr("font-size",n.labelFontSize).attr("font-weight",t=>t.className==="anchor"?"bold":"normal").attr("text-anchor",t=>t.className==="anchor"?"middle":"start").attr("dominant-baseline",t=>t.className==="anchor"?"middle":"auto").text(t=>t.label),g.annotations.length>0){let t=M.append("g").attr("class","wardley-annotations");if(g.annotations.forEach(i=>{let o=i.coordinates.map(l=>({x:A(l.x),y:E(l.y)}));if(o.length>1)for(let l=0;l<o.length-1;l++)t.append("line").attr("class","wardley-annotation-line").attr("x1",o[l].x).attr("y1",o[l].y).attr("x2",o[l+1].x).attr("y2",o[l+1].y).attr("stroke",s.axisColor).attr("stroke-width",1.5).attr("stroke-dasharray","4 4");o.forEach(l=>{let d=t.append("g").attr("class","wardley-annotation");d.append("circle").attr("cx",l.x).attr("cy",l.y).attr("r",10).attr("fill","white").attr("stroke",s.axisColor).attr("stroke-width",1.5),d.append("text").attr("x",l.x).attr("y",l.y).attr("text-anchor","middle").attr("dominant-baseline","central").attr("font-size",10).attr("fill",s.axisTextColor).attr("font-weight","bold").text(i.number)})}),g.annotationsBox){let i=A(g.annotationsBox.x),o=E(g.annotationsBox.y),l=10,d=16,c=11,y=t.append("g").attr("class","wardley-annotations-box"),x=[...g.annotations].filter(w=>w.text).sort((w,P)=>w.number-P.number),f=[];if(x.forEach((w,P)=>{let I=y.append("text").attr("x",i+l).attr("y",o+l+(P+1)*d).attr("font-size",c).attr("fill",s.axisTextColor).attr("text-anchor","start").attr("dominant-baseline","middle").text(`${w.number}. ${w.text}`);f.push(I)}),f.length>0){let w=0,P=0;f.forEach(Z=>{let W=Z.node(),Pt=W.getComputedTextLength();w=Math.max(w,Pt);let Ct=W.getBBox();P=Math.max(P,Ct.height)});let I=w+l*2+105,q=x.length*d+l*2+P/2,R=n.padding,vt=S-n.padding-I,Mt=n.padding,St=k-n.padding-q;i=Math.max(R,Math.min(i,vt)),o=Math.max(Mt,Math.min(o,St)),f.forEach((Z,W)=>{Z.attr("x",i+l).attr("y",o+l+(W+1)*d)}),y.insert("rect","text").attr("x",i).attr("y",o).attr("width",I).attr("height",q).attr("fill","white").attr("stroke",s.axisColor).attr("stroke-width",1.5).attr("rx",4).attr("ry",4)}}}if(g.notes.length>0){let t=M.append("g").attr("class","wardley-notes");g.notes.forEach(i=>{let o=A(i.x),l=E(i.y);t.append("text").attr("x",o).attr("y",l).attr("text-anchor","start").attr("font-size",11).attr("fill",s.axisTextColor).attr("font-weight","bold").text(i.text)})}if(g.accelerators.length>0){let t=M.append("g").attr("class","wardley-accelerators");g.accelerators.forEach(i=>{let o=A(i.x),l=E(i.y),d=60,c=30,y=20,x=`
3
- M ${o} ${l-c/2}
4
- L ${o+d-y} ${l-c/2}
5
- L ${o+d-y} ${l-c/2-8}
6
- L ${o+d} ${l}
7
- L ${o+d-y} ${l+c/2+8}
8
- L ${o+d-y} ${l+c/2}
9
- L ${o} ${l+c/2}
10
- Z
11
- `;t.append("path").attr("d",x).attr("fill","white").attr("stroke",s.componentStroke).attr("stroke-width",1),t.append("text").attr("x",o+d/2).attr("y",l+c/2+15).attr("text-anchor","middle").attr("font-size",10).attr("fill",s.axisTextColor).attr("font-weight","bold").text(i.name)})}if(g.deaccelerators.length>0){let t=M.append("g").attr("class","wardley-deaccelerators");g.deaccelerators.forEach(i=>{let o=A(i.x),l=E(i.y),d=60,c=30,y=20,x=`
12
- M ${o+d} ${l-c/2}
13
- L ${o+y} ${l-c/2}
14
- L ${o+y} ${l-c/2-8}
15
- L ${o} ${l}
16
- L ${o+y} ${l+c/2+8}
17
- L ${o+y} ${l+c/2}
18
- L ${o+d} ${l+c/2}
19
- Z
20
- `;t.append("path").attr("d",x).attr("fill","white").attr("stroke",s.componentStroke).attr("stroke-width",1),t.append("text").attr("x",o+d/2).attr("y",l+c/2+15).attr("text-anchor","middle").attr("font-size",10).attr("fill",s.axisTextColor).attr("font-weight","bold").text(i.name)})}},"draw"),Zt={draw:Vt},Ut={parser:at,db:Wt,renderer:Zt,styles:u(()=>"","styles")};export{Ut as diagram};