@next-bricks/ai-portal 0.22.2 → 0.22.3

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 (32) hide show
  1. package/dist/bricks.json +20 -20
  2. package/dist/chunks/3500.f90c30f5.js +2 -0
  3. package/dist/chunks/3500.f90c30f5.js.map +1 -0
  4. package/dist/chunks/{5054.087396dd.js → 5054.fbc3c2b0.js} +2 -2
  5. package/dist/chunks/5054.fbc3c2b0.js.map +1 -0
  6. package/dist/chunks/9543.929397fe.js +3 -0
  7. package/dist/chunks/9543.929397fe.js.map +1 -0
  8. package/dist/chunks/elevo-sidebar.cbc3e781.js +3 -0
  9. package/dist/chunks/elevo-sidebar.cbc3e781.js.map +1 -0
  10. package/dist/chunks/{main.8091b272.js → main.1391ad2c.js} +2 -2
  11. package/dist/chunks/{main.8091b272.js.map → main.1391ad2c.js.map} +1 -1
  12. package/dist/chunks/mcp-tools.04c1ff64.js +3 -0
  13. package/dist/chunks/mcp-tools.04c1ff64.js.map +1 -0
  14. package/dist/examples.json +10 -10
  15. package/dist/{index.bbf59e6f.js → index.fbf870e3.js} +2 -2
  16. package/dist/{index.bbf59e6f.js.map → index.fbf870e3.js.map} +1 -1
  17. package/dist/manifest.json +114 -114
  18. package/dist/types.json +6 -6
  19. package/dist-types/mcp-tools/i18n.d.ts +1 -1
  20. package/package.json +2 -2
  21. package/dist/chunks/3500.f0c191e3.js +0 -2
  22. package/dist/chunks/3500.f0c191e3.js.map +0 -1
  23. package/dist/chunks/5054.087396dd.js.map +0 -1
  24. package/dist/chunks/9543.433bae9f.js +0 -3
  25. package/dist/chunks/9543.433bae9f.js.map +0 -1
  26. package/dist/chunks/elevo-sidebar.8a4cd6d3.js +0 -3
  27. package/dist/chunks/elevo-sidebar.8a4cd6d3.js.map +0 -1
  28. package/dist/chunks/mcp-tools.1dea514a.js +0 -3
  29. package/dist/chunks/mcp-tools.1dea514a.js.map +0 -1
  30. /package/dist/chunks/{9543.433bae9f.js.LICENSE.txt → 9543.929397fe.js.LICENSE.txt} +0 -0
  31. /package/dist/chunks/{elevo-sidebar.8a4cd6d3.js.LICENSE.txt → elevo-sidebar.cbc3e781.js.LICENSE.txt} +0 -0
  32. /package/dist/chunks/{mcp-tools.1dea514a.js.LICENSE.txt → mcp-tools.04c1ff64.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunks/3500.f90c30f5.js","mappings":"gMAGIA,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,iuBAEwJ,KAEjMH,EAAwBI,OAAS,CAChC,MAAS,kBACT,MAAS,kBACT,KAAQ,iBACR,QAAW,oBACX,KAAQ,iBACR,KAAQ,iBACR,SAAY,sBAEb,S,0EChBO,IAAKC,EAAC,SAADA,GAAC,OAADA,EAAC,UAADA,EAAC,QAADA,EAAC,gCAADA,EAAC,gCAADA,EAAC,cAADA,EAAC,gDAADA,EAAC,sBAADA,EAAC,kBAADA,EAAC,oBAADA,EAAC,4CAADA,EAAC,gCAADA,EAAC,kCAADA,EAAC,kCAADA,EAAC,oEAADA,EAAC,wEAADA,EAAC,gCAADA,EAAC,kBAADA,EAAC,oBAADA,EAAC,wBAADA,EAAC,sBAADA,EAAC,oCAADA,EAAC,kCAADA,EAAC,0BAADA,EAAC,4BAADA,EAAC,oBAADA,EAAC,8EAADA,EAAC,8EAADA,EAAC,oBAADA,EAAC,gBAADA,EAAC,cAADA,EAAC,0CAADA,EAAC,oCAADA,EAAC,4DAADA,EAAC,sDAADA,EAAC,wEAADA,EAAC,kEAADA,EAAC,kFAADA,EAAC,8GAADA,EAAC,oDAADA,CAAC,MA0Cb,MA0FaC,EAAK,iCAELC,EAAU,CAAEC,GA5FN,CACjBC,IAAK,MACLC,GAAI,KACJC,eAAgB,gBAChBC,eAAgB,iBAChBC,MAAO,QACPC,uBAAwB,yBACxBC,UAAW,YACXC,QAAS,UACTC,SAAU,WACVC,qBACE,4DACFC,eAAgB,iBAChBC,gBAAiB,kBACjBC,gBAAiB,kBACjBC,iCAAkC,mCAClCC,mCACE,mDACFC,eAAgB,iBAChBC,QAAS,UACTC,SAAU,WACVC,WAAY,aACZC,UAAW,uBACXC,iBAAkB,yBAClBC,gBAAiB,kBACjBC,YAAa,cACbC,aAAc,eACdC,SAAU,WACVC,sCACE,gDACFC,sCAAuC,uBACvCC,SAAU,WACVC,OAAQ,SACRC,MAAO,QACPC,oBAAqB,6CACrBC,iBAAkB,mBAClBC,6BAA8B,+CAC9BC,0BAA2B,6BAC3BC,mCAAoC,sCACpCC,gCAAiC,mCACjCC,wCACE,2CACFC,sDACE,yDACFC,yBAA0B,2CAgDCC,GA7CV,CACjBvC,IAAK,IACLC,GAAI,IACJC,eAAgB,YAChBC,eAAgB,OAChBC,MAAO,KACPC,uBAAwB,UACxBC,UAAW,KACXC,QAAS,KACTC,SAAU,KACVC,qBAAsB,iBACtBC,eAAgB,OAChBC,gBAAiB,OACjBC,gBAAiB,OACjBC,iCAAkC,WAClCC,mCAAoC,iBACpCC,eAAgB,KAChBC,QAAS,KACTC,SAAU,KACVC,WAAY,KACZC,UAAW,aACXC,iBAAkB,UAClBC,gBAAiB,QACjBC,YAAa,OACbC,aAAc,OACdC,SAAU,MACVC,sCAAuC,kBACvCC,sCAAuC,MACvCC,SAAU,KACVC,OAAQ,KACRC,MAAO,KACPC,oBAAqB,qBACrBC,iBAAkB,OAClBC,6BAA8B,WAC9BC,0BAA2B,YAC3BC,mCAAoC,cACpCC,gCAAiC,cACjCC,wCAAyC,YACzCC,sDACE,eACFC,yBAA0B,gBAOfE,EAAIC,EAAAA,KAAKC,UAAU,KAAM7C,E,yHCvIlCN,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,w7CAG0hB,KAEnkBH,EAAwBI,OAAS,CAChC,UAAa,sBACb,IAAO,gBACP,KAAQ,iBACR,SAAY,qBACZ,KAAQ,iBACR,KAAQ,iBACR,KAAQ,iBACR,OAAU,mBACV,UAAa,sBACb,OAAU,mBACV,QAAW,oBACX,iBAAkB,2BAClB,SAAY,sBAEb,S,4KCzBO,MAAMgD,EAA0B,GAC1BC,EAA0B,EAC1BC,EAAgB,UAChBC,EAAc,QACdC,EAAmB,aACnBC,EAAsB,gBACtBC,EAAkB,YAClBC,EAAqB,GACrBC,EAAuB,GAEvBC,EAAwB,IACxBC,EAAsB,IACtBC,EAAW,GACXC,EAAW,GACXC,EAAW,GAGXC,EAAS,OAAOC,KAQP,QARWC,EAON,QAPMC,EAOhB,QAPgBC,EAE7BC,UAKAC,qBAAa,IAAAF,OAAA,EANfA,EAMiBG,gBAAQ,IAAAJ,EAAAA,EACvBE,UAAUE,gBAAQ,IAAAL,EAAAA,EAClBG,UAAUG,U,sECvBV1E,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,2OAA4O,KAErRH,EAAwBI,OAAS,CAChC,SAAY,qBACZ,YAAa,sBACb,QAAW,qBAEZ,S,sECTIJ,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,4XAA6X,KAEtaH,EAAwBI,OAAS,CAChC,QAAW,oBACX,MAAS,mBAEV,S,2PCAIuE,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKnB,QAAe,KAAW,IAAQvE,OAAS,IAAQA,YAAS6E,ECZ7DC,GAAuBC,EAAAA,EAAAA,WAC3B,qBASK,SAASC,EAAehB,GAIO,IAJN,QAC9BiB,EAAO,UACPC,EAAS,OACTC,GACqBnB,EACrB,MAAMoB,GAAWC,EAAAA,EAAAA,UAAQ,IAChBC,EAAAA,KAAKC,UAAUH,UACrB,IAEH,OACEI,IAAAA,cAAA,OACEC,UAAWC,IAAWC,EAAO,oBAAqB,CAChD,CAACA,EAAOR,QAASA,KAGnBK,IAAAA,cAAA,OAAKC,UAAWE,EAAOC,SACrBJ,IAAAA,cAACV,EAAoB,CACnBW,UAAWE,EAAOE,OAClBC,iBAAkBV,EAClBW,UAAQ,EACRC,KAAK,OAEPR,IAAAA,cAAA,OAAKC,UAAWE,EAAOM,MACpBf,GAAagB,IAAmB,IAAZhB,GAAkBiB,OAAO,iBAGlDX,IAAAA,cAAA,OAAKC,UAAWE,EAAOS,MAAOnB,GAGpC,C,yLClCO,MAAMoB,EAAmBb,IAAAA,MAAWc,UAAY,CACrDC,cAAeC,EAAAA,EAAAA,gBAKb,2CAA4C,CAC5CC,WAAY,qC,iJCbZlC,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKnB,QAAe,KAAW,IAAQvE,OAAS,IAAQA,YAAS6E,E,eCjB5D,SAAS6B,EAAY1C,GAQZ,IARa,MAC3B2C,EAAK,YACLC,EAAW,WACXC,GAKD7C,EACC,MAAM,WAAE8C,IAAeC,EAAAA,EAAAA,YAAWC,EAAAA,GAElC,OACExB,IAAAA,cAAA,OAAKC,UAAWE,EAAO,kBACrBH,IAAAA,cAACyB,EAAAA,GAAa,CACZC,KAAK,UACLC,aAAa,QACbC,MAAM,QACNC,QAASA,KACPP,EAAWH,EAAOC,IAAe/D,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEI,KAAK,GAG3CuG,IAAe/D,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEI,MAEtBmF,IAAAA,cAACyB,EAAAA,GAAa,CACZC,KAAK,OACLC,aAAa,QACbE,QAASA,KACPP,EAAWH,EAAOE,IAAchE,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEK,IAAI,EAE1CgH,MAAO,CAAEC,WAAY,UAEpBV,IAAchE,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEK,KAI3B,C,0BClCO,SAASkH,EAAqBxD,GAEO,IAFN,IACpCyD,GAC2BzD,EAC3B,MAAM0D,GAAWrC,EAAAA,EAAAA,UAAQ,KAAM,IAAAsC,EAC7B,MAAMC,EAAkB,QAAfD,EAAGF,EAAII,gBAAQ,IAAAF,OAAA,EAAZA,EAAcG,MAAMF,GACV,SAAbA,EAAIG,OAEb,GAAIH,EAAK,KAAAI,EACP,MAAMC,EAAgB,QAAZD,EAAGJ,EAAIM,aAAK,IAAAF,GAAsC,QAAtCA,EAATA,EAAWF,MAAMK,GAAuB,SAAdA,EAAKjB,cAAgB,IAAAc,OAAA,EAA/CA,EAAiDC,KAC9D,GAAIA,EACF,IACE,OAAOG,KAAKC,MAAMJ,EACpB,CAAE,MACA,CAGN,CACA,OAAO,IAAI,GACV,CAACR,EAAII,WAER,MAAuB,UAAnBH,aAAQ,EAARA,EAAUR,OAAmBoB,MAAMC,QAAQb,EAASc,OAEpDhD,IAAAA,cAAA,OAAKC,UAAW,GAAGE,EAAAA,EAAO8C,WAAW9C,EAAAA,EAAO,gBAC1CH,IAAAA,cAAA,MACE8B,MAAO,CACLoB,YAAoE,GAApDC,KAAKC,MAAMD,KAAKE,MAAMnB,EAASc,MAAMM,OAAS,IAAY,IAA7D,OAGdpB,EAASc,MAAMO,KAAI,CAACC,EAAMC,IACzBzD,IAAAA,cAAA,MAAI0D,IAAKD,GAAQD,OAQzBxD,IAAAA,cAAA,OAAKC,UAAW,GAAGE,EAAAA,EAAO8C,WAAW9C,EAAAA,EAAO,gBAAgB,wBAIhE,C,+CCtCI,EAAU,CAAC,EAEf,EAAQnB,kBAAoB,IAC5B,EAAQC,cAAgB,IACxB,EAAQC,OAAS,SAAc,KAAM,QACrC,EAAQC,OAAS,IACjB,EAAQC,mBAAqB,IAEhB,IAAI,IAAS,GAKnB,QAAe,KAAW,IAAQ5E,OAAS,IAAQA,YAAS6E,E,0BCX5D,SAASsE,EAAQnF,GAAkC,IAAjC,MAAEoF,EAAK,MAAEC,GAAsBrF,EACtD,MAAM,cAAEsF,IAAkBvC,EAAAA,EAAAA,YAAWwC,EAAAA,GAErC,OACE/D,IAAAA,cAAA,MAAIC,UAAWC,IAAWC,EAAOyD,MAAO,CAAE,CAACzD,EAAO0D,OAAQA,KACvDD,EAAML,KAAI,CAACS,EAAMP,KAChB,MAAO/B,EAAMuC,IAAQC,EAAAA,EAAAA,IAAmBF,EAAKG,SAAUH,EAAKI,MAC5D,OACEpE,IAAAA,cAAA,MAAI0D,IAAKD,GACPzD,IAAAA,cAAA,KAAGC,UAAWE,EAAO6D,KAAMnC,QAASA,IAAMiC,EAAcE,IACtDhE,IAAAA,cAAA,OAAKC,UAAWE,EAAO8D,KAAMI,IAAKJ,EAAMK,MAAO,GAAIC,OAAQ,KAC3DvE,IAAAA,cAAA,OAAKC,UAAWE,EAAOV,SACrBO,IAAAA,cAAA,OAAKC,UAAWE,EAAOiE,MAAOJ,EAAKI,OAAQ/G,EAAAA,EAAAA,GAAE5C,EAAAA,EAAE4B,WAC/C2D,IAAAA,cAAA,OAAKC,UAAWE,EAAOqE,UACpB,GAAG9C,IAAOsC,EAAKxD,KAAO,OAAMiE,EAAAA,EAAAA,IAAeT,EAAKxD,QAAU,QAI9D,IAKf,CCLA,MAAMkE,EAA6B,oCAQ5B,SAASC,EAAOnG,GAAoD,IAAAoG,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,IAAnD,IAAEhD,EAAG,MAAEiD,EAAK,OAAEvF,GAAsBnB,EAC1D,MAAM2G,EAAwB,QAAfP,EAAG3C,EAAImD,gBAAQ,IAAAR,GAAa,QAAbA,EAAZA,EAAcS,mBAAW,IAAAT,OAAA,EAAzBA,EAA2BU,MACvCC,EAAuB,QAAfV,EAAG5C,EAAImD,gBAAQ,IAAAP,OAAA,EAAZA,EAAcT,KACzBoB,EAAuB,cAAbD,EACVE,EAA2B,8BAAbF,EACdG,EAAiBF,GAAWC,EAC5BE,EACHH,GACC,CACE,gBACA,mBACA,kBACA,6BACAI,SAAgC,QAAxBd,EAAC7C,EAAImD,SAAUS,iBAAS,IAAAf,OAAA,EAAvBA,EAAyBgB,UACtCL,EACIM,EAAoB,YAAVb,GAAiC,cAAVA,EACjCc,IAAa/D,EAAIgE,gBAGrBC,EACAC,EACAC,EACAxC,EACAyC,IACExG,EAAAA,EAAAA,UAAQ,KAAM,IAAAsC,EAChB,MAAMmE,EAAqB,GAC3B,IAAIH,EACJ,MAAMI,EAA4C,GAC5C3C,EAAoB,GAC1B,IAAIC,EAAqB,eAAb0B,EACA,QAAZpD,EAAAF,EAAII,gBAAQ,IAAAF,GAAZA,EAAcqE,SAASvD,IACrB,GAAqB,SAAjBA,EAAQV,KACV,IAAK,MAAMI,KAAQM,EAAQP,MAAO,CACN,IAAA+D,EAA1B,GAAkB,SAAd9D,EAAKjB,KACP,OAAiB,QAAjB+E,EAAQ9D,EAAK+D,YAAI,IAAAD,OAAA,EAATA,EAAW/E,MACjB,IAAK,WACH4E,EAASjM,KAAKsI,EAAK+D,KAAKjH,SACxB,MACF,IAAK,uBAES,IAAAkH,EADZJ,EAAgBlM,KAAKsI,EAAK+D,MACrB7C,IACHA,EACE+C,OAAOC,KAC6B,YAAzB,QAATF,EAAAhE,EAAK+D,YAAI,IAAAC,GAAc,QAAdA,EAATA,EAAWG,oBAAY,IAAAH,OAAA,EAAvBA,EAAyBjF,MACrBiB,EAAK+D,KAAKI,aAAaC,WACvBpE,EAAK+D,KAAKM,QACd1D,OAAS,QAId,GAAkB,SAAdX,EAAKjB,KACdkC,EAAMvJ,KAAKsI,EAAKqB,WACX,GAAkB,SAAdrB,EAAKjB,MAAmB8D,EACjC,IACEW,EAAcvD,KAAKC,MAAMF,EAAKF,MAAMwE,YACtC,CAAE,MAAOC,GAEPC,QAAQD,MAAM,gCAAiCA,EACjD,CAEJ,CACF,IAGF,MAAME,EAAkBd,EAASe,KAAK,IAItC,OAFAxD,EAAQA,GAASa,EAA2BnG,KAAK6I,GAE1C,CACLA,EACAjB,EACAI,EACA3C,EACAC,EACD,GACA,CAAC2B,EAASvD,EAAII,SAAUkD,IAE3B,OACEvF,IAAAA,cAAA,OACEC,UAAWC,IAAWC,EAAAA,EAAO,YAAa,CACxC,CAACA,EAAAA,EAAO+G,OAAQjF,EAAIqF,QACpB,CAACnH,EAAAA,EAAO,aAAcuF,EACtB,CAACvF,EAAAA,EAAO,gBAAiB6F,EACzB,CAAC7F,EAAAA,EAAOR,QAASA,EACjB,CAACQ,EAAAA,EAAO0D,OAAQwC,KAGlBrG,IAAAA,cAAA,OAAKC,UAAWE,EAAAA,EAAOoH,aACvBvH,IAAAA,cAAA,OAAKC,UAAWE,EAAAA,EAAOC,SACpBsF,EACC1F,IAAAA,cAACwH,EAAAA,GAAW,CACVvH,UAAWE,EAAAA,EAAO8D,KAClBwD,IAAI,KACJC,OAAO,MAEPzD,KAAK,eAELhC,EAAImD,SACNpF,IAAAA,cAACwH,EAAAA,GAAW,CACVvH,UAAWE,EAAAA,EAAO8D,KAClBwD,IAAI,OACJE,MAAM,WACN1D,KAAK,SAGPjE,IAAAA,cAACwH,EAAAA,GAAW,CAACvH,UAAWE,EAAAA,EAAO8D,KAAMwD,IAAI,UAAUxD,KAAK,UAE1DjE,IAAAA,cAAA,OACEC,UAAWC,IAAWC,EAAAA,EAAOyH,KAAM,CACjC,CAACC,EAAAA,EAAa,eAAgB9B,KAG/BZ,IAAcI,GAAWlI,EAAAA,EAAAA,GAAE5C,EAAAA,EAAE8K,KAAmBA,EAAW,UAE9DvF,IAAAA,cAAA,OAAKC,UAAWE,EAAAA,EAAOM,MACpBwB,EAAIvC,WAAagB,IAAuB,IAAhBuB,EAAIvC,WAAkBiB,OAAO,iBAG1DX,IAAAA,cAAA,OACEC,UAAWC,IAAWC,EAAAA,EAAOS,KAAM,CACjC,IAGD+E,EACC3F,IAAAA,cAAAA,IAAAA,SAAA,MACIyF,KAAwC,QAAxBV,EAAC9C,EAAImD,SAAUS,iBAAS,IAAAd,IAAvBA,EAAyB+C,YAC1C9H,IAAAA,cAAA,OACEC,UAAW,GAAGE,EAAAA,EAAO8C,WAAW4E,EAAAA,EAAaE,YAAY5H,EAAAA,EAAO,qBAEhEH,IAAAA,cAACgI,EAAAA,EAAgB,CACfvI,QACEgG,GACIpI,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEa,sBACoB,QADC0J,EACxB/C,EAAImD,SAAUS,iBAAS,IAAAb,OAAA,EAAvBA,EAAyB8C,YAK3B,mBAAV5C,IACuC,kBAArCjD,EAAImD,SAAUS,UAAWC,QACxB9F,IAAAA,cAACiI,EAAmB,CAAC9G,MAAOc,EAAI1H,KACO,qBAArC0H,EAAImD,SAAUS,UAAWC,QAC3B9F,IAAAA,cAACkB,EAAY,CACXC,MAAOc,EAAI1H,GACX6G,YAAaa,EAAImD,SAAUS,UAAWqC,aACtC7G,WAAYY,EAAImD,SAAUS,UAAWsC,cAEA,oBAArClG,EAAImD,SAAUS,UAAWC,QAC3B9F,IAAAA,cAACoI,EAAoB,CACnBjH,MAAOc,EAAI1H,GACXwE,QAASkD,EAAImD,SAAUS,UAAW9G,UAGpC,8BADEkD,EAAImD,SAAUS,UAAWC,QAE3B9F,IAAAA,cAACqI,EAAmB,CAClBlH,MAAOc,EAAI1H,GACX+N,SAAUrG,EAAImD,SAAUS,UAAWyC,SACnCC,OAAQtG,EAAImD,SAAUS,UAAW0C,SAEjC9C,EACFzF,IAAAA,cAACwI,EAAAA,EAAe,CACdrH,MAAOc,EAAI1H,GACXyI,MAAOf,EAAImD,SAAUS,UAAW7C,QAEhC,OAEN,MACF0C,GAAkBzD,EAAImD,UAAYpF,IAAAA,cAACyI,EAAAA,EAAc,CAACxG,IAAKA,IACxDwD,GAAyB,cAAVP,EACdlF,IAAAA,cAACgC,EAAqB,CAACC,IAAKA,IAEhB,QAFuBgD,EAEnChD,EAAII,gBAAQ,IAAA4C,OAAA,EAAZA,EAAc1B,KAAI,CAACN,EAASQ,KAAK,IAAAiF,EAAA,MACd,SAAjBzF,EAAQV,MAAoBmD,EAC1B1F,IAAAA,cAAA,OACE0D,IAAKD,EACLxD,UAAWC,IAAWC,EAAAA,EAAO8C,QAAS4E,EAAAA,EAAaE,SAAU,CAC3D,CAAC5H,EAAAA,EAAO,cACW,SAAjB8C,EAAQV,MAAoC,SAAjBU,EAAQV,QAGrB,SAAjBU,EAAQV,MAAmBiD,EACxBW,EACa,QADFuC,EACXzF,EAAQP,aAAK,IAAAgG,OAAA,EAAbA,EAAenF,KAAI,CAACZ,EAAMgG,IACxB3I,IAAAA,cAACA,IAAAA,SAAc,CAAC0D,IAAKiF,GACJ,SAAdhG,EAAKjB,MACJ1B,IAAAA,cAACgI,EAAAA,EAAgB,CAACvI,QAASkD,EAAKF,WAbD,IAkB5C,IAGJyD,GACClG,IAAAA,cAAA,OACEC,UAAWC,IAAWC,EAAAA,EAAO8C,QAAS4E,EAAAA,EAAaE,UACnDjG,MAAO,CAAE8G,QAAS,UAElB5I,IAAAA,cAACgI,EAAAA,EAAgB,CAACvI,QAASyG,KAG9BE,EAAoB7C,KAAI,CAACyD,EAAQvD,IAChCzD,IAAAA,cAAC6I,EAAAA,GAAkBC,EAAAA,EAAAA,GAAA,CAACpF,IAAKD,GAAWuD,MAErChB,IAAa/D,EAAIgE,eAAgB8C,SAChC/I,IAAAA,cAACgJ,EAAAA,EAAQ,CACP/C,eAAgBhE,EAAIgE,eACpBgD,OAAO,UACPC,UAAQ,IAGXtF,EAAMN,OAAS,GAAKtD,IAAAA,cAAC2D,EAAQ,CAACC,MAAOA,EAAOC,MAAOwC,KAI5D,CAEA,SAAS4B,EAAmBkB,GAA4C,IAA3C,MAAEhI,GAA0BgI,EACvD,MAAMC,GAAeC,EAAAA,EAAAA,QAAuB,OACtC,WAAE/H,IAAeC,EAAAA,EAAAA,YAAWC,EAAAA,GAElC,OACExB,IAAAA,cAAA,OAAKsJ,IAAKF,GACRpJ,IAAAA,cAACuJ,EAAAA,EAAkB,CACjBtJ,UAAWE,EAAAA,EAAO,eAClBiJ,aAAcA,EACdI,YAAU,EACVC,QAAS,EACTC,WAAY,EACZC,YAAa,GACbC,aAAavM,EAAAA,EAAAA,GAAE5C,EAAAA,EAAES,wBACjB2O,WAAW,sBACXC,SAAWC,IACT,MAAMC,EAAQD,EAAEE,cAAcC,MAC1BF,GACF1I,EAAWH,EAAO6I,EACpB,IAKV,CAEA,SAAS5B,EAAoB+B,GAMb,IANc,MAC5BhJ,EAAK,QACLpC,GAIDoL,EACC,MAAM,WAAE7I,IAAeC,EAAAA,EAAAA,YAAWC,EAAAA,GAElC,OACExB,IAAAA,cAAA,OACE8B,MAAO,CACLsI,UAAW,MACXC,QAAS,OACTC,cAAe,SACfC,IAAK,UAGNxL,aAAO,EAAPA,EAASwE,KAAI,CAACiH,EAAQ/G,IACrBzD,IAAAA,cAACyB,EAAAA,GAAa,CACZiC,IAAKD,EACL9B,aAAa,QACbE,QAASA,KACPP,EAAWH,EAAOqJ,EAAO,GAG1BA,KAKX,CAEA,SAASnC,EAAmBoC,GAQZ,IARa,MAC3BtJ,EAAK,SACLmH,EAAQ,OACRC,GAKDkC,EACC,MAAM,WAAEnJ,IAAeC,EAAAA,EAAAA,YAAWC,EAAAA,IAC3BkJ,EAAYC,IAAiBC,EAAAA,EAAAA,UAAuB,MA0B3D,IAxBAC,EAAAA,EAAAA,YAAU,KACR,IAAKvC,EACH,OAEF,IAAIwC,GAAS,EAeb,MAdA,WACE,IACE,MAAMC,SACEC,EAAAA,EAAAA,GAA2B,CAAEC,WAAY3C,KAC/C5B,KACGoE,GACHH,EAAcI,EAElB,CAAE,MAAOhB,GAEP5C,QAAQD,MAAM,4BAA6B6C,IAC3CmB,EAAAA,EAAAA,iBAAgBnB,EAClB,CACD,EAbD,GAcO,KACLe,GAAS,CAAI,CACd,GACA,CAACxC,KAECA,EACH,OACEtI,IAAAA,cAAA,OAAK8B,MAAO,CAAEsI,UAAW,QAAS,2DAStC,MAAMe,GACH5C,GAAsB,eAAXA,GAAwC,SAAbD,EAAuB,KAAOC,EAEvE,OACEvI,IAAAA,cAAA,OAAK8B,MAAO,CAAEsI,UAAW,QACvBpK,IAAAA,cAACoL,EAAAA,SAAQ,KACPpL,IAAAA,cAACa,EAAgB,CACf6J,WAAYA,EACZpC,SAAUA,EACV6C,QAASA,EACTlK,WAAa8I,IACNA,EAAE/C,OAAO1D,QAGdhC,EACEH,EACA4I,EAAE/C,OAAOzD,KAAK8H,GAAMA,EAAEF,KAAgC9D,KAAK,MAC5D,KAMb,C,mGC7XIiE,EAAgC,IAAIC,IAAI,aACxCnR,EAA0B,IAA4B,KACtDoR,EAAqC,IAAgCF,GAEzElR,EAAwBC,KAAK,CAACC,EAAOC,GAAI,2JAA2JiR,6mEAGwrB,KAE53BpR,EAAwBI,OAAS,CAChC,KAAQ,iBACR,QAAW,oBACX,QAAW,oBACX,OAAU,mBACV,eAAgB,yBAChB,MAAS,kBACT,KAAQ,iBACR,MAAS,kBACT,KAAQ,iBACR,UAAW,oBACX,mBAAoB,8BAErB,S,6LCfIuE,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKnB,QAAe,KAAW,IAAQvE,OAAS,IAAQA,YAAS6E,ECpB5D,SAASoM,IACd,OACEzL,IAAAA,cAAA,OAAKC,UAAWE,EAAO,eACrBH,IAAAA,cAAA,OAAKC,UAAWE,EAAO8D,OAG7B,C,yKCCIlF,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKnB,QAAe,KAAW,IAAQvE,OAAS,IAAQA,YAAS6E,C,yKCb/DN,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKnB,QAAe,KAAW,IAAQvE,OAAS,IAAQA,YAAS6E,C,6LCb/DN,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKnB,QAAe,KAAW,IAAQvE,OAAS,IAAQA,YAAS6E,E,oCChBnE,MAAMqM,EAAwC,CAC5CjE,IAAK,UACLxD,KAAM,kBAEF0H,EAAkC,CACtClE,IAAK,OACLxD,KAAM,gBAEF2H,EAAiC,CACrCnE,IAAK,OACLxD,KAAM,eASD,SAAS4H,EAAOrN,GAIO,IAJN,MACtBsN,EAAK,cACLC,EAAa,WACbC,GACaxN,EACb,MAAMyN,GAAeC,EAAAA,EAAAA,cAAY,KAC/BH,SAAAA,EAAgBD,EAAQ,GAAI,GAC3B,CAACC,EAAeD,IAEbK,GAAgBD,EAAAA,EAAAA,cAAY,KAChCH,SAAAA,EAAgBD,EAAQ,GAAI,GAC3B,CAACC,EAAeD,IAEnB,OACE9L,IAAAA,cAAA,OAAKC,UAAW,GAAGmM,EAAAA,EAAcC,WAAWlM,EAAO,eACjDH,IAAAA,cAACsM,EAAAA,GAAiB,CAChBC,QAAQ,OACRtI,KAAMyH,EACN7J,QAASmK,EACT1G,OAAOjI,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEmB,kBAEboE,IAAAA,cAAA,OAAKC,UAAWmM,EAAAA,EAAcI,UAC9BxM,IAAAA,cAACsM,EAAAA,GAAiB,CAChBC,QAAQ,OACRtI,KAAM0H,EACN9J,QAASsK,EACT7G,OAAOjI,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEqB,YAEbkE,IAAAA,cAACsM,EAAAA,GAAiB,CAChBC,QAAQ,OACRtI,KAAM2H,EACN/J,QAASoK,EACT3G,OAAOjI,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEoB,WAInB,C,mGC3DIyP,EAAgC,IAAIC,IAAI,cACxCnR,EAA0B,IAA4B,KACtDoR,EAAqC,IAAgCF,GAEzElR,EAAwBC,KAAK,CAACC,EAAOC,GAAI,uJAAuJiR,+uBAAixB,KAEj9BpR,EAAwBI,OAAS,CAChC,mBAAoB,6BACpB,OAAU,mBACV,QAAW,oBACX,OAAU,mBACV,KAAQ,iBACR,KAAQ,kBAET,S,wECJO,SAASiS,EAAajO,GAMJ,IANK,MAC5BkO,EAAK,UACLC,EAAS,OACTC,EAAM,QACNC,EAAO,mBACPC,GACqBtO,EACrB,MAAOuO,EAAUC,IAAepC,EAAAA,EAAAA,WAAS,GACnCqC,GAAc5D,EAAAA,EAAAA,SAAO,GAoC3B,OAjCAwB,EAAAA,EAAAA,YAAU,KACR,MAAMqC,EAAOL,EAAQM,QACrB,GAAIR,GAAaO,IAASH,GAAYL,EAAMpJ,OAAS,EAAG,CACtD,MACE8J,EAAGC,EACHC,EAAGC,EAAG,MACNjJ,EAAK,OACLC,IACEiJ,EAAAA,EAAAA,GAAWd,EAAMnJ,KAAKkK,GAASA,EAAKC,QAClCC,EAAQN,EAAO/I,EACfsJ,EAASL,EAAMhJ,EAEf6I,GAAKF,EAAKW,aAAeF,EAAQN,IAAS,EAChD,IAAIC,EAAI,GACR,GAAIL,EAAYE,QAAS,CACvB,MACMW,EADSF,EAASL,EAAMtP,EAAAA,GACPiP,EAAKa,aAE1BT,EADEQ,EAAQ,GACLA,EAAQP,GAERL,EAAKa,cAAgBH,EAASL,IAAQ,CAE/C,CACAT,EAAmB,CACjBkB,UAAW,CAAEC,EAAG,EAAGb,IAAGE,KACtBY,SAAUjB,EAAYE,aAAU9N,EAAY,IAE9C2N,GAAY,EACd,CAEAC,EAAYE,SAAU,CAAK,GAC1B,CAACJ,EAAUL,EAAOG,EAASF,EAAWC,EAAQE,IAE1C,CAAEC,WAAUC,cAAaC,cAClC,C,kPChDIlO,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKnB,QAAe,KAAW,IAAQvE,OAAS,IAAQA,YAAS6E,E,oCCjB5D,SAAS8O,IACd,MAAM,QAAEC,IAAY7M,EAAAA,EAAAA,YAAWC,EAAAA,GAE/B,OACExB,IAAAA,cAAA,OAAKC,UAAWE,EAAO,aACrBH,IAAAA,cAAA,OAAKC,UAAWE,EAAOV,SACrBO,IAAAA,cAAA,QAAMC,UAAWE,EAAO8D,MACtBjE,IAAAA,cAACwH,EAAAA,GAAW,CAACC,IAAI,KAAKC,OAAO,MAAMzD,KAAK,WAE1CjE,IAAAA,cAAA,QAAMC,UAAWE,EAAOsC,OAAOpF,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEO,kBAErCgF,IAAAA,cAAA,UAAQC,UAAWE,EAAOkO,OAAQxM,QAASuM,IACxC/Q,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEQ,QAIb,C,sECpBIb,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,+bAAgc,KAEze,QAAeH,EAAwBkU,U,sECJnClU,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,mTAAoT,KAE7VH,EAAwBI,OAAS,CAChC,gBAAiB,2BAElB,S,6LCCIuE,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKnB,QAAe,KAAW,IAAQvE,OAAS,IAAQA,YAAS6E,ECpB5D,SAASkP,IACd,OACEvO,IAAAA,cAAA,OAAKC,UAAWE,EAAO4F,SACrB/F,IAAAA,cAAA,OAAKC,UAAWE,EAAOqO,QAG7B,C,2NCCIzP,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKnB,QAAe,KAAW,IAAQvE,OAAS,IAAQA,YAAS6E,E,0BCI5D,SAASoP,EAAGjQ,GAQN,IARO,IAClBkQ,EAAG,KACHC,EAAI,KACJC,EAAI,UACJC,EAAS,aACTC,EAAY,UACZC,EAAS,QACTlN,GACSrD,EACT,MAAMwQ,GAAYnP,EAAAA,EAAAA,UAAqC,KACrD,MAAMoP,EAAiBN,aAAI,EAAJA,EAAM1F,QAC1BzF,KAAUkL,SAAAA,EAAKpM,MAAML,GAAQA,EAAI1H,KAAOiJ,EAAKjJ,QAGhD,GAAK0U,UAAAA,EAAgB3L,OACnB,OAAOoL,EAKT,MAAMQ,EAAgB,IAAIC,IAC1B,IAAIC,EAAwB,KAE5B,IAAK,IAAI3L,EAAQkL,EAAMrL,OAAS,EAAGG,GAAS,EAAGA,IAAS,CACtD,MAAMD,EAAOmL,EAAMlL,GACnB,GAAIwL,EAAerJ,SAASpC,GAAO,CACjC,IAAI6L,EAAOH,EAAcI,IAAIF,GACxBC,GACHH,EAAcK,IAAIH,EAASC,EAAO,IAEpCA,EAAKG,QAAQhM,EACf,MACE4L,EAAS5L,EAAKjJ,EAElB,CAEA,MACMyU,EAA6B,IADlBN,QAAAA,EAAO,IAExB,IAAK,MAAOU,EAAQpM,KAAUkM,EAAcO,UAAW,CACrD,MAAMC,EACO,OAAXN,EACIJ,EAAU1L,OACV0L,EAAUW,WAAWC,GAASA,EAAKrV,KAAO6U,IAG1CS,EAAWb,EAAUU,GACrBI,EAAUC,EAAAA,GAAYnK,UAASiK,aAAQ,EAARA,EAAU3K,QAAS,WAExD8J,EAAUgB,OACRN,EACA,KACG1M,EAAMO,KAAoBC,IAAS,IAAAyM,EACpC,MAAMhO,EAAM2M,aAAI,EAAJA,EAAMtM,MAAML,GAAQA,EAAI1H,KAAOiJ,EAAKjJ,KAC1C2V,EAAQrB,aAAS,EAATA,EAAWS,IAAI9L,EAAKjJ,IAClC,MAAO,CACLA,GAAIiJ,EAAKjJ,GACT+K,MAAO9B,EAAK2M,YACZjL,MAAiB,QAAZ+K,EAAEhO,aAAG,EAAHA,EAAKiD,aAAK,IAAA+K,EAAAA,EAAKH,EAAU,eAAYzQ,EAC5C6Q,MAAOA,QAAAA,EAAS,EAChBE,UAAU,EACX,IAGP,CAEA,OAAOpB,CAAS,GACf,CAACN,EAAKC,EAAMC,EAAMC,IAEfvF,GAAMD,EAAAA,EAAAA,QAAyB,MAkCrC,OAjCAwB,EAAAA,EAAAA,YAAU,KAAM,IAAAwF,EACd,MAAM3B,EAAMpF,EAAI6D,QACXuB,GAAQI,IAGuC,QAApDuB,EAAA3B,EAAI4B,cAAc,iBAAiBxB,cAAiB,IAAAuB,GAApDA,EAAsDE,eAAe,CACnEC,SAAU,SACVC,MAAO,YACP,GACD,CAAC3B,KAEJjE,EAAAA,EAAAA,YAAU,KACR,MAAM6D,EAAMpF,EAAI6D,QAChB,IAAKuB,GAAOI,EACV,OAGF,MAAM4B,EAAiB1B,aAAS,EAATA,EAAW2B,UAC/Bf,GACCG,EAAAA,GAAYnK,SAASgK,EAAK1K,OAAS,YACpB,YAAf0K,EAAK1K,OACU,mBAAf0K,EAAK1K,QAEW,IAAA0L,EAAhBF,IAEsD,QADxDE,EAAAlC,EACG4B,cAAc,iBAAiBI,EAAenW,eAAO,IAAAqW,GADxDA,EAEIL,eAAe,CACfC,SAAU,SACVC,MAAO,YAEb,GACC,CAAC3B,EAAcE,IAGhBhP,IAAAA,cAAA,OAAKC,UAAWE,EAAO0Q,WACrB7Q,IAAAA,cAAA,MAAIC,UAAWE,EAAOuO,IAAKpF,IAAKA,GAC7B0F,aAAS,EAATA,EAAWzL,KAAKqM,GACf5P,IAAAA,cAAC8Q,GAAOhI,EAAAA,EAAAA,GAAA,CACNpF,IAAKkM,EAAKrV,IACNqV,EAAI,CACRd,aAAcA,EACdC,UAAWA,EACXlN,QAASA,QAMrB,CAQA,SAASiP,EAAO3H,GASC,IATA,GACf5O,EAAE,MACF+K,EAAK,MACLJ,EAAK,MACLgL,EAAK,UACLnB,EAAS,aACTD,EAAY,SACZsB,EAAQ,QACRvO,GACasH,EACb,MAAM,UAAElJ,EAAS,KAAEgE,IAASpE,EAAAA,EAAAA,UAAQ,IA8BtC,SACEqF,EACA6J,GAEA,OAAQ7J,GACN,IAAK,YACH,MAAO,CACLjF,UAAWE,EAAO4Q,UAClB9M,KAAM,CACJwD,IAAK,KACLC,OAAQ,MACRzD,KAAM,UAGZ,IAAK,YACL,IAAK,UACH,MAAkB,WAAd8K,GAAwC,aAAdA,EACrB,CACL9K,KAAM,CACJwD,IAAK,KACLC,OAAQ,MACRzD,KAAoB,WAAd8K,EAAyB,eAAiB,gBAI/C,CACL9O,UAAWE,EAAO6Q,QAClB/M,KAAM,CACJwD,IAAK,OACLE,MAAO,WACP1D,KAAM,qBACNgN,UAAU,IAGhB,IAAK,iBACH,MAAO,CACLhR,UAAWE,EAAO,kBAClB8D,KAAM,CACJwD,IAAK,KACLC,OAAQ,MACRzD,KAAM,gBAGZ,IAAK,SACH,MAAO,CACLhE,UAAWE,EAAO+Q,OAClBjN,KAAM,CACJwD,IAAK,KACLC,OAAQ,MACRzD,KAAM,UAGZ,IAAK,WACH,MAAO,CACLhE,UAAWE,EAAOgR,SAClBlN,KAAM,CACJwD,IAAK,KACLC,OAAQ,MACRzD,KAAM,gBAGZ,IAAK,UACH,MAAO,CACLA,KAAM,CACJwD,IAAK,KACLC,OAAQ,MACRzD,KAAM,QAGZ,QACE,MAAO,CACLA,KAAM,CACJwD,IAAK,KACLC,OAAQ,MACRzD,KAAM,UAIhB,CA3GWmN,CAAyBlM,EAAO6J,IACtC,CAAC7J,EAAO6J,IAEX,OACE/O,IAAAA,cAAA,MACEC,UAAWC,IAAWC,EAAOyP,KAAM,CACjC,CAACzP,EAAOR,QAASmP,IAAiBvU,IAEpCuH,MAAO,CAAEC,WAAuB,GAARmO,EAAH,OAErBlQ,IAAAA,cAAA,KACEC,UAAWC,IAAWC,EAAOkR,KAAMpR,EAAW,CAC5C,CAACE,EAAOiQ,UAAWA,IAErB,cAAa7V,EACb+K,MAAOA,EACPzD,QAASA,KACFuO,GACHvO,EAAQtH,EACV,GAGFyF,IAAAA,cAACwH,EAAAA,IAAWsB,EAAAA,EAAAA,GAAA,CAAC7I,UAAWE,EAAO8D,MAAUA,IACzCjE,IAAAA,cAAA,QAAMC,UAAWE,EAAOsC,MAAO6C,IAIvC,C,iNCpLIvG,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKnB,QAAe,KAAW,IAAQvE,OAAS,IAAQA,YAAS6E,E,eCb5D,SAASiS,EAAe9S,GAGO,IAHN,QAC9BiB,EAAO,QACPsG,GACqBvH,EACrB,OACEwB,IAAAA,cAAA,OAAKC,UAAWE,EAAO,qBACrBH,IAAAA,cAAA,OACEC,UAAWC,IAAWC,EAAOsC,KAAM,CACjC,CAACoF,EAAAA,EAAa,eAAgB9B,IAEhCT,MAAO7F,GAENA,GAIT,C,6DCYO,SAAS8R,EACdC,EAAoBhT,GAQQ,IAP5B,aACEiT,EAAY,MACZ/E,GAIDlO,EAED,GAAIgT,EAAME,SAAWF,EAAMG,OACzB,OAGF,MAAMC,EAAaH,EACf/E,EAAMpK,MAAMmL,GAASA,EAAKlT,KAAOkX,IACjC,KAEE/N,EAAM8N,EAAM9N,IAElB,IAAKkO,EAAY,CACf,GAAY,MAARlO,IAAgB8N,EAAMK,QACxB,MAAO,CACLC,OAAQ,SACRC,UAAWP,EAAMQ,SAAW,OAAS,KACrCC,MAAO,QAIX,GAAIT,EAAMQ,WAAc1T,EAAAA,IAAUkT,EAAMK,QACtC,OAGF,OAAQnO,GACN,IAAK,OACH,MAAO,CACLoO,OAAQ,SACRC,UAAW,KACXE,MAAO,YAEX,IAAK,MACH,MAAO,CACLH,OAAQ,SACRC,UAAW,OACXE,MAAO,YAEX,IAAK,UACL,IAAK,YAAa,CAChB,MAAMF,EAAoB,YAARrO,EAAoB,KAAO,OAC7C,OAAI8N,EAAMK,QACD,CACLC,OAAQ,SACRC,YACAE,MAAO,YAGJ,CACLH,OAAQ,SACRC,YACAE,MAAO,OAEX,CACA,IAAK,YACL,IAAK,aACH,IAAKT,EAAMK,QACT,MAAO,CACLC,OAAQ,SACRC,UAAmB,cAARrO,EAAsB,OAAS,QAC1CuO,MAAO,QAOf,MACF,CAEA,GAAIT,EAAMQ,WAAc1T,EAAAA,IAAUkT,EAAMK,QACtC,OAGF,MAAMK,EAAaA,CAACC,EAAiBJ,KACnC,GAAIP,EAAMK,SAAoB,MAATM,EACnB,OAEF,MAAMC,EAAwB,MAATD,EAAe,IAAM,IACpCE,EAAiBC,EAAkBV,EAAWlE,MAC9C6E,EAAa7F,EAAMzD,QAAQwE,IAC/B,IAAI+E,EACAC,EACJ,OACEhF,IAASmE,GACK,UAAdnE,EAAK/L,MACS,QAAd+L,EAAK/L,MACS,aAAd+L,EAAK/L,MACS,gBAAd+L,EAAK/L,OACH+Q,EAAWH,EAAkB7E,EAAKC,MACnC8E,GAAQC,EAASN,GAAQE,EAAeF,IAASJ,EAClDS,EAAO,IACPA,EAAOrP,KAAKuP,IAAIL,EAAeD,GAAgBK,EAASL,GAAc,IAG1E,OAAQZ,EAAMK,QAAUc,EAAAA,MAAQC,EAAAA,OAAOL,GAAa9E,IAClD,MAAMgF,EAAWH,EAAkB7E,EAAKC,MACxC,OACG2E,EAAeD,GAAgBK,EAASL,KAAkB,GAC1DC,EAAeF,GAAQM,EAASN,KAAU,CAAC,GAE9C,EAGJ,IAAI1E,EACAqE,EAEJ,OAAQpO,GACN,IAAK,YACHoO,EAAS,qBACTrE,EAAOyE,EAAW,KAAM,GACxB,MACF,IAAK,UACHJ,EAAS,qBACTrE,EAAOyE,EAAW,KAAM,GACxB,MACF,IAAK,aACHJ,EAAS,qBACTrE,EAAOyE,EAAW,IAAK,GACvB,MACF,IAAK,YACHJ,EAAS,qBACTrE,EAAOyE,EAAW,IAAK,GACvB,MACF,IAAK,SACHJ,EAAS,qBACTrE,EAAO,KACP,MACF,IAAK,QACHqE,EAAS,QACTrE,EAAOmE,EAIX,OAAIE,QAAmBzS,IAAToO,EACL,CAAEqE,SAAQrE,KAAMA,QADzB,CAGF,CAEA,SAAS6E,EAAkB5E,GACzB,MAAO,CACLN,EAAGM,EAAKN,EAAIM,EAAKpJ,MAAQ,EACzBgJ,EAAGI,EAAKJ,EAAII,EAAKnJ,OAAS,EAE9B,C,mGC3LI+G,EAAgC,IAAIC,IAAI,cACxCnR,EAA0B,IAA4B,KACtDoR,EAAqC,IAAgCF,GAEzElR,EAAwBC,KAAK,CAACC,EAAOC,GAAI,ieAAieiR,6kEAEiQ,KAE3wBpR,EAAwBI,OAAS,CAChC,WAAY,qBACZ,OAAU,mBACV,WAAc,uBACd,cAAe,wBACf,MAAS,kBACT,WAAY,qBACZ,MAAS,kBACT,QAAW,oBACX,KAAQ,iBACR,KAAQ,iBACR,KAAQ,iBACR,KAAQ,iBACR,WAAc,uBACd,QAAW,oBACX,iBAAkB,2BAClB,YAAa,sBACb,cAAe,yBAEhB,S,6FCKA,SAASqY,EAAUrB,GAIjB,OACGA,EAAMsB,QACc,IAApBtB,EAAMuB,UAAkB,IAAOvB,EAAMuB,UAAY,EAAI,OACrDvB,EAAME,SAAWpT,EAAAA,GAAS,GAAK,EAEpC,CAEO,SAAS0U,EAAOxU,GASW,IATV,QACtBqO,EAAO,SACPoG,EAAQ,WACRC,EAAU,SACVC,EAAQ,iBACRC,EACAC,WAAYC,EAAW,oBACvBC,EAAmB,qBACnBC,GACehV,EACf,MAAOiV,EAAUC,IAAe9I,EAAAA,EAAAA,WAAS,IAClCoD,EAAW2F,IAAgB/I,EAAAA,EAAAA,UAA2B,CAC3DqD,EAAG,EACHb,EAAG,EACHE,EAAG,IAECsG,GAAevK,EAAAA,EAAAA,QAAO2E,GAEtBqF,GAAaxT,EAAAA,EAAAA,UACjB,IACEyT,QAAAA,EACC,CAAC9V,EAAAA,GAAyBC,EAAAA,KAC7B,CAAC6V,IAGG1G,GAAS/M,EAAAA,EAAAA,UACb,KAAMgU,EAAAA,EAAAA,MAAgCC,WAAWjB,IACjD,IA8IF,OA1IAhI,EAAAA,EAAAA,YAAU,KACR,IAAIkJ,GAAQ,EACZnH,EACGoH,YAAYf,EAAWI,EAAa,CAAC,EAAG,IACxCY,GAAG,SAAS,KACXF,GAAQ,EACRL,GAAY,EAAK,IAElBO,GAAG,QAASlK,IACXgK,GAAQ,EACRJ,EAAa5J,EAAEiE,WACf4F,EAAazG,QAAUpD,EAAEiE,SAAS,IAEnCiG,GAAG,OAAO,KACTP,GAAY,GACPK,GACHP,SAAAA,EAAuB,KACzB,IAEDvK,QACEuI,IAGiB,UAAfA,EAAM9P,KACH8P,EAAME,QACN0B,EACED,GAAY3B,EAAME,SACjBF,EAAME,WAAaF,EAAMnD,QACnC,GACF,CACDmF,EACAH,EACAJ,EACArG,EACAwG,EACAD,KAGFtI,EAAAA,EAAAA,YAAU,KACR,GAAIuI,EAAkB,CACpB,MAAMc,EAAiBnK,IACjBA,EAAE2H,SACJ3H,EAAEoK,gBACJ,EAGF,OADAC,SAASC,iBAAiB,cAAeH,GAAe,GACjD,KACLE,SAASE,oBAAoB,cAAeJ,GAAe,EAAK,CAEpE,IACC,CAACd,KAGJvI,EAAAA,EAAAA,YAAU,KACR,MAAMqC,EAAOL,EAAQM,QACrB,IAAKD,EACH,OAGF,MAAMqH,GAAgBC,EAAAA,EAAAA,GAAOtH,GAEvBuH,EAAYA,KAChBF,EACGN,GAAG,QAAS,MACZA,GAAG,eAAgB,MACnBA,GAAG,QAAS,KAAK,EAGtB,GAAMhB,GAAYC,GAAcC,EA2DhC,OAtDIF,GAAYC,IAGdqB,EAAcN,GACZ,qBACClK,IAEC,IAAKA,EAAE2H,SAAWwB,EAAY,CAC5B,MAAMzF,EAAQ1D,EAAE2K,OAAuBC,QACrC,IAAIC,EAAAA,EAAUhU,QAEhB,GAAI6M,GA0DhB,SAA0BoH,EAAkBC,GAC1C,IAAKA,EACH,OAAO,EAIT,GAFwBA,EAAQ,EAEX,CACnB,MAAMC,EAAYF,EAAQG,aAAeH,EAAQ9G,aACjD,OAAO8G,EAAQI,WAAaF,EAAY,CAC1C,CACA,OAAOF,EAAQI,WAAa,CAC9B,CApEkBC,CAAiBzH,EAAM1D,EAAE+I,QAC3B,OAIA/I,EAAEoL,aACApL,EAAE+I,OAAS,IACbS,EAAoBpG,SAAU,GAEhCpD,EAAEoK,iBACFvH,EAAOwI,YACLb,EACAxK,EAAEsL,YAAc,EAChBtL,EAAEuL,YAAc,GAGtB,KAMNf,EACGgB,KAAK3I,GACLqH,GAAG,SAAUlK,KACRmJ,GAAeD,GAAYlJ,EAAE2H,UAC/B3H,EAAEoK,gBACJ,IAEDF,GAAG,gBAAiB,MAElBd,GAAaC,GAChBmB,EAAcN,GAAG,iBAAkB,MAGhCd,GACHoB,EACGN,GAAG,kBAAmB,MACtBA,GAAG,iBAAkB,MACrBA,GAAG,gBAAiB,MAGlBQ,EA1DLA,GA0Dc,GACf,CACDrB,EACAD,EACAtG,EACA0G,EACAL,EACAD,EACArG,IAGK,CAAE6G,WAAUzF,YAAW4F,eAAchH,SAAQyG,aACtD,C,uOC9MItU,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKnB,QAAe,KAAW,IAAQvE,OAAS,IAAQA,YAAS6E,E,yBCjB5D,MAAMmW,EAA4BxV,IAAAA,MAAWc,UAAY,CAC9DC,cAAeC,EAAAA,EAAAA,gBACb,yB,eCMJ,MAAMyU,EAA6D,CAAC,GAAI,IAClEC,EACJ,CAAC,GAAI,GAAI,IACLC,EAAkB,CAACC,EAAAA,GACnBC,EAAgC,CACpCpO,IAAK,KACLC,OAAQ,MACRzD,KAAM,UASD,SAAS+E,EAAQxK,GAIO,IAJN,eACvByH,EAAc,OACdgD,EACAC,SAAU4M,GACItX,EACd,MAAMuX,GAAQlW,EAAAA,EAAAA,UAAuC,KACnD,GAAe,QAAXoJ,EAAkB,CACpB,MAAM+M,EAAkB/P,EAAeyG,MAAMzD,QAC1CwE,KAAWA,EAAK/G,KAAKuP,SAElBC,EAAoB,IAAIC,IAAIH,EAAgBzS,KAAKkK,GAASA,EAAKlT,MAC/D6b,EAAenQ,EAAeoQ,MAAMpN,QACvCqN,GACCJ,EAAkBK,IAAID,EAAKE,UACf,YAAXvN,GAAwBiN,EAAkBK,IAAID,EAAK5B,WAElD+B,EACO,YAAXxN,EACIiN,EACA,IAAIC,IAAI,IACHD,KACA,IAAIC,IAAIC,EAAa7S,KAAK+S,GAASA,EAAK5B,YAEnD,MAAO,IACF0B,KACAnQ,EAAeyG,MAAMzD,QAAQwE,GAASgJ,EAAeF,IAAI9I,EAAKlT,MAErE,CAEA,MAAO,IAAI0L,EAAeoQ,SAAUpQ,EAAeyG,MAAM,GAqIxD,CAACzG,EAAgBgD,IAEdyN,GAAgB7W,EAAAA,EAAAA,UAA+C,KAC5D,CACL+I,QAAS8M,EACTiB,QAAS,GACTC,QAAS,MAEV,IAEGC,GAAoBhX,EAAAA,EAAAA,UAExB,IACO,CACL,CACEiX,UAAWC,KAGd,IAEGC,GAAmBnX,EAAAA,EAAAA,UAEvB,IACO,CACL,CACEoX,YAAa,aAGhB,IAEG/N,GAAWrJ,EAAAA,EAAAA,UACf,IACEiW,EACI,CACExR,MAAO,cACPC,OAAQ,cAER2S,SAAU,IAEVC,SAA8B,GAApBC,OAAOC,WACjBC,UAAW,UAEbjY,GACN,CAACyW,IAGGxM,GAAMD,EAAAA,EAAAA,QAAwB,MAE9B2C,GAAaE,EAAAA,EAAAA,cAAY,KAAM,IAAAqL,EACxB,QAAXA,EAAAjO,EAAI6D,eAAO,IAAAoK,GAAXA,EAAaC,QAAQ,GACpB,IAEH,OACExX,IAAAA,cAAA,OACEC,UAAWC,IAAW2H,EAAAA,EAAa,mBAAoB1H,EAAOsX,SAAU,CACtE,CAACtX,EAAO,cAAe2V,KAGzB9V,IAAAA,cAACwV,EAAyB,CACxBlM,IAAKA,EACLyM,MAAOA,EACP2B,OAAO,QACPhB,cAAeA,EACfxN,SAAUA,EACVyO,gBAAiBlC,EACjBoB,kBAAmBA,EACnBG,iBAAkBA,EAClBY,aAAW,EACX1E,YAAY,EACZyC,gBAAiBA,IAEnB3V,IAAAA,cAAA,OAAKC,UAAW,GAAGmM,EAAAA,EAAcC,WAAWlM,EAAOkM,WACjDrM,IAAAA,cAACsM,EAAAA,GAAiB,CAChBC,QAAQ,OACRtI,KAAM4R,EACNhU,QAASmK,KAKnB,CAUA,SAAS+K,EAAY5N,GAAwD,IAAvD,KAAEsE,EAAI,YAAEoK,GAAgC1O,EAC5D,OACEnJ,IAAAA,cAAA,OACEC,UAAWC,IAAW,gBAAiB,CACrC,wBAA8C,YAArBuN,EAAK/G,KAAKuP,OACnC,mBAAyC,OAArBxI,EAAK/G,KAAKuP,SAEhC3M,IAAKuO,GAEL7X,IAAAA,cAACwH,EAAAA,GAAW,CAACC,IAAI,KAAKC,OAAO,MAAMzD,KAAK,SACxCjE,IAAAA,cAAA,OAAKC,UAAU,uBAAuBwN,EAAK/G,KAAKtC,MAGtD,C,mGCpSIkH,EAAgC,IAAIC,IAAI,cACxCnR,EAA0B,IAA4B,KACtDoR,EAAqC,IAAgCF,GAEzElR,EAAwBC,KAAK,CAACC,EAAOC,GAAI,+IAA+IiR,4HAA8J,KAEtVpR,EAAwBI,OAAS,CAChC,aAAc,uBACd,KAAQ,kBAET,S,mFCAO,SAASsd,EACdC,EACAnJ,EACA7P,GAEA,OAAOc,EAAAA,EAAAA,UAAQ,KACb,IAAKkY,EACH,OAAO,KAGT,MAAMC,EAAYpJ,QAAAA,EAAQ,GACpBlC,EAAqB,GACrB2J,EAAqB,GACrB3H,EAAsB,GACtBuJ,EAA8B,GAEpCvL,EAAMrS,KAAK,CACTqH,KAAM,cACNnH,GAAIsD,EAAAA,GACJ4B,QAASsY,EAAKG,YACdhT,MAA4B,IAArB8S,EAAU1U,OAAe,UAAY,cAG9C,MAAM,KAAE+L,EAAI,OAAE8I,EAAM,UAAEtJ,EAAS,cAAEuJ,EAAa,sBAAEC,IAC9CC,EAAAA,EAAAA,GAAe1J,EAAM7P,GAEjBwZ,EAAc,IAAIpJ,IAExB,IAAK,MAAOhO,EAAOqX,KAAgBJ,EACjC,IAAK,MAAM1D,KAAU8D,EAAa,CAChC,IAAIC,EAAYF,EAAYjJ,IAAIoF,GAC3B+D,GACHF,EAAYhJ,IAAImF,EAAS+D,EAAY,IAEvCA,EAAUpe,KAAK8G,EACjB,CAGF,MAAMuX,EAAqC,GAC3C,GAAIL,EACF,IAAK,MAAMlX,KAASkO,EAElB,GAAkB,cADN8I,EAAO7I,IAAInO,GACf+D,MAAuB,CAC7B,MAAMyT,EAAaP,EAAc9I,IAAInO,GACrC,GAAKwX,UAAAA,EAAYrV,OAAQ,CACvB,MAAMsV,EAAqBP,EAAsB/I,IAAInO,GACjDyX,SAAAA,EAAoBtV,QACtBoV,EAAyBre,KAAK8G,EAElC,CACF,CAIJ,MAAM0X,EAAc,IAAI1J,IAAsB,CAC5C,CAACtR,EAAAA,GAAqB,CAACA,EAAAA,OAGzB,IAAK,MAAMsD,KAASkO,EAAM,KAAAzK,EACxB,MAAM3C,EAAMkW,EAAO7I,IAAInO,IACjB,SAAEkB,GAAaJ,EACf6W,EACHhW,MAAMC,QAAQV,IAAaA,EAASiB,OAAS,GAAMrB,EAAImD,SAEpD2T,EAAoB,GAE1B,GAAI9W,EAAIkO,YAAa,CACnB,MAAM6I,EAAoB,eAAe7X,IACzCuL,EAAMrS,KAAK,CACTqH,KAAM,cACNnH,GAAIye,EACJ/W,MACAiD,MAAOjD,EAAIiD,QAGb6T,EAAQ1e,KAAK2e,GAEbtK,EAAIrU,KAAK,CACPE,GAAI0H,EAAI1H,GACR+K,MAAOrD,EAAIkO,YACXjL,MAAOjD,EAAIiD,MACXgL,MAAOrB,EAAUS,IAAIrN,EAAI1H,KAE7B,MAAuB,QAAhBqK,EAAI3C,EAAImD,gBAAQ,IAAAR,GAAa,QAAbA,EAAZA,EAAcS,mBAAW,IAAAT,GAAzBA,EAA2BU,OACpCoJ,EAAIrU,KAAK,CACPE,GAAI0H,EAAI1H,GACR+K,MAAOrD,EAAImD,SAASC,YAAYC,MAChCJ,MAAOjD,EAAIiD,MACXgL,MAAOrB,EAAUS,IAAIrN,EAAI1H,MAI7B,GAAIue,IAAgB7W,EAAIkO,YAAa,CACnC,MAAM8I,EAAY,OAAOhX,EAAI1H,KAC7BmS,EAAMrS,KAAK,CACTqH,KAAM,MACNnH,GAAI0e,EACJhX,MACAiD,MAAOjD,EAAIiD,QAEb6T,EAAQ1e,KAAK4e,EACf,CAEA,GAAIhX,EAAIiX,cAAe,CAErB,MAAMC,EAAa,QAAQlX,EAAI1H,KAC/BmS,EAAMrS,KAAK,CACTqH,KAAM,OACNnH,GAAI4e,EACJlX,QAEF8W,EAAQ1e,KAAK8e,GAEblB,EAAM5d,KAAK,CACTE,GAAI0H,EAAI1H,GACRmT,KAAMzL,EAAIiX,eAEd,CAEAL,EAAYtJ,IAAIpO,EAAO4X,EACzB,CAEA,IAAK,MAAM5X,KAASkO,EAAM,CACxB,MAAM0J,EAAUF,EAAYvJ,IAAInO,GAE1BsX,EAAYF,EAAYjJ,IAAInO,GAClC,IAAK,MAAMiY,KAAYX,QAAAA,EAAa,CAAC5a,EAAAA,IAAsB,CACzD,MAAMwb,EAAgBR,EAAYvJ,IAAI8J,GACtC/C,EAAMhc,KAAK,CACTmc,OAAQ6C,EAAcA,EAAc/V,OAAS,GAC7CoR,OAAQqE,EAAQ,IAEpB,CAEA,IAAK,IAAI1N,EAAI,EAAGA,EAAI0N,EAAQzV,OAAQ+H,IAClCgL,EAAMhc,KAAK,CACTmc,OAAQuC,EAAQ1N,EAAI,GACpBqJ,OAAQqE,EAAQ1N,IAGtB,CAEA,GAAqB,IAAjBqB,EAAMpJ,QAAiByM,EAAAA,GAAYnK,SAASmS,EAAK7S,QAS9C,GAAIwT,EAAyBpV,OAAS,EAAG,CAC9C,IAAIgW,EAAU,EACd,IAAK,MAAMnY,KAASuX,EAA0B,CAC5C,MAAMK,EAAUF,EAAYvJ,IAAInO,GAC1BoY,EAAaR,EAAQA,EAAQzV,OAAS,GAC5C,IAAK+S,EAAMmD,MAAMlD,GAASA,EAAKE,SAAW+C,IAAa,CACrD,MAAME,EAAY,GAAG3b,EAAAA,MAAmBwb,MACxC5M,EAAMrS,KAAK,CACTqH,KAAM,UACNnH,GAAIkf,IAENpD,EAAMhc,KAAK,CACTmc,OAAQ+C,EACR7E,OAAQ+E,GAEZ,CACF,CACF,OAzBE/M,EAAMrS,KAAK,CACTqH,KAAM,UACNnH,GAAIuD,EAAAA,KAENuY,EAAMhc,KAAK,CACTmc,OAAQ3Y,EAAAA,GACR6W,OAAQ5W,EAAAA,KAqBZ,MAAO,CACL4O,QACA2J,QACA3H,MACAuJ,QACApJ,YACD,GACA,CAACkJ,EAAMnJ,GACZ,C,kBC3LO,SAAS8K,EACdC,EACAC,EACAhR,EACAoF,EACAyC,GAEA,MAAOoJ,EAAgBC,GAAmBF,GACnCG,EAAYC,EAAcC,EAAe/W,GAAe0F,GACvDwE,EAAGC,EAAMC,EAAGC,EAAG,MAAEjJ,EAAK,OAAEC,GAAWoV,EACrChM,EAAQN,EAAO/I,EACfsJ,EAASL,EAAMhJ,EAKf2V,EAAWH,GAHMxM,EAAMS,EAAUC,EAAID,EAAUV,GAI/C6M,EAAcL,EAAkBG,GAHZrM,EAASI,EAAUC,EAAID,EAAUV,GAIrDA,EACJ4M,EAAW,GAAe,UAAVzJ,EACZyJ,EAAWlM,EAAUC,EACrBkM,EAAc,EACZA,EAAcnM,EAAUC,EACxB,EAKFmM,EAAYlX,GAHMmK,EAAOW,EAAUC,EAAID,EAAUZ,GAIjDiN,EAAaR,EAAiBG,GAHXrM,EAAQK,EAAUC,EAAID,EAAUZ,GAWzD,MAAO,CAAEA,EANPgN,EAAY,EACRA,EAAYpM,EAAUC,EACtBoM,EAAa,EACXA,EAAarM,EAAUC,EACvB,EAEIX,IACd,C,6QChCIvO,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKnB,QAAe,KAAW,IAAQvE,OAAS,IAAQA,YAAS6E,E,uGCK7Dib,EAAkC,CACtC7S,IAAK,OACLxD,KAAM,YAOR,SAASsW,IACP,MAAM,WAAElD,GAAeD,OACvB,OAAOC,EAAa,IAChBA,EACAA,EAAa,KACE,GAAbA,EACA,IACR,CAEO,SAASmD,EAAWhc,GAA6B,IAA5B,KAAEwF,GAAwBxF,EACpD,MAAM8K,GAAMD,EAAAA,EAAAA,QAAe,OACrB,cAAEvF,IAAkBvC,EAAAA,EAAAA,YAAWwC,EAAAA,IAC/B,MAAE0W,EAAK,IAAEC,EAAG,SAAEvW,EAAQ,KAAEC,GAASJ,EACjCtC,EAAOyC,IAAYwW,EAAAA,EAAAA,IAAsBvW,IACxC6R,EAAQ2E,IAAahQ,EAAAA,EAAAA,UAC1B,YAGKnL,EAASob,IAAcjQ,EAAAA,EAAAA,aAC9BC,EAAAA,EAAAA,YAAU,KACR,GAAa,oBAATnJ,EAMJ,GADAkZ,EAAU,WACG,kBAATlZ,EAAJ,CAKA,GAAI+Y,EAGF,OAFAI,EAAWC,KAAKL,SAChBG,EAAU,UAIZ,GAAIF,EAAK,CACP,IAAI5P,GAAS,EAqBb,MApBA,WACE,IACE,MAAM5I,QAAiB6Y,MACrB,IAAIxP,IAAImP,EAAK,GAAGM,SAASC,UAASC,EAAAA,EAAAA,mBAEpC,IAAKhZ,EAASiZ,GACZ,MAAM,IAAIC,MAAM,yBAAyBlZ,EAASmZ,cAEpD,MAAM5Y,QAAaP,EAASO,OAC5B,GAAIqI,EACF,OAEF+P,EAAWpY,GACXmY,EAAU,SACZ,CAAE,MAAO1T,GAEPC,QAAQD,MAAM,uBAAwBA,GACtC0T,EAAU,QACZ,CACD,EAnBD,GAoBO,KACL9P,GAAS,CAAI,CAEjB,CAjCA,MAFE8P,EAAU,cANVA,EAAUF,GAAOD,EAAQ,SAAW,QAyCtC,GACC,CAACA,EAAO/Y,EAAMgZ,IAEjB,MAAMY,GAAiBpP,EAAAA,EAAAA,cAAY,KACjC,MAAM,MAAEuO,EAAK,IAAEC,EAAG,SAAEvW,EAAQ,KAAEC,GAASJ,EACjCuX,EAAWnX,IAAQ/G,EAAAA,EAAAA,GAAE5C,EAAAA,EAAE4B,UAC7B,GAAIoe,GACFe,EAAAA,EAAAA,QAAO,IAAIC,KAAK,CAACX,KAAKL,IAAS,CAAE/Y,KAAMyC,IAAaoX,QAC/C,GAAIb,EAAK,CACd,MAAMrJ,EAAO+C,SAASsH,cAAc,KACpCrK,EAAKsK,KAAO,IAAIpQ,IAAImP,EAAK,GAAGM,SAASC,UAASC,EAAAA,EAAAA,kBAAiB5M,WAC/D+C,EAAKuK,SAAWL,EAChBnH,SAASxT,KAAKib,YAAYxK,GAC1BA,EAAKyK,QACL1H,SAASxT,KAAKmb,YAAY1K,EAC5B,IACC,CAACrN,IAEEgY,GAAmB9P,EAAAA,EAAAA,cAAY,KAAM,IAAAqL,EAC9B,QAAXA,EAAAjO,EAAI6D,eAAO,IAAAoK,GAAXA,EAAa0E,OAAO,GACnB,IAEGC,GAAchQ,EAAAA,EAAAA,cAAY,KAC9BiQ,YAAW,KACTrY,EAAc,KAAK,GAClB,IAAI,GACN,CAACA,KAEJ+G,EAAAA,EAAAA,YAAU,KACRsR,YAAW,KAAM,IAAAC,EACJ,QAAXA,EAAA9S,EAAI6D,eAAO,IAAAiP,GAAXA,EAAaC,MAAM,GACnB,GACD,IAEH,MAAO/X,EAAOgY,IAAY1R,EAAAA,EAAAA,UAAS2P,GAYnC,OAVA1P,EAAAA,EAAAA,YAAU,KACR,MAAM0R,EAAWA,KACfD,EAAS/B,EAAe,EAG1B,OADAnD,OAAO/C,iBAAiB,SAAUkI,GAC3B,KACLnF,OAAO9C,oBAAoB,SAAUiI,EAAS,CAC/C,GACA,IAGDvc,IAAAA,cAACwc,EAAAA,GAAa,CACZlT,IAAKA,EACLmT,YAAazY,EAAKI,OAAQ/G,EAAAA,EAAAA,GAAE5C,EAAAA,EAAE4B,UAC9BiI,MAAOA,EACPoY,UAAU,EACVC,MAAI,EACJC,cAAY,EACZC,UAAQ,EACRC,QAASZ,GAEG,YAAXjG,EACCjW,IAAAA,cAAA,OAAKC,UAAWE,EAAO4F,SACrB/F,IAAAA,cAACwH,EAAAA,GAAgBuV,EAAAA,KAEN,UAAX9G,EACFjW,IAAAA,cAAA,OAAKC,UAAWE,EAAO+G,OACrBlH,IAAAA,cAAA,OACEqE,IAAK2Y,EACLC,IAAI,gBACJ3Y,MAAO,IACPC,OAAQ,MAEVvE,IAAAA,cAAA,UACG3C,EAAAA,EAAAA,GAAE5C,EAAAA,EAAE6B,uCACL0D,IAAAA,cAACyB,EAAAA,GAAa,CACZE,aAAa,QACbD,KAAK,UACLG,QAASyZ,IAERje,EAAAA,EAAAA,GAAE5C,EAAAA,EAAE+B,YAENa,EAAAA,EAAAA,GAAE5C,EAAAA,EAAE8B,yCAGE,oBAATmF,EACF1B,IAAAA,cAAA,SACEC,UAAWE,EAAO+c,MAClB7Y,IACEqW,EACI,IAAInP,IAAImP,EAAK,GAAGM,SAASC,UAASC,EAAAA,EAAAA,kBAAiB5M,WACnD,+BAA+BmM,IAErC/Y,KAAMA,EACN4D,MAAOlB,EACPE,MAAM,OACNC,OAAO,SAGTvE,IAAAA,cAAA,OAAKC,UAAWC,IAAWC,EAAOV,QAAS0d,EAAAA,EAAYpV,WACrD/H,IAAAA,cAACgI,EAAAA,EAAgB,CAACvI,QAASA,KAG/BO,IAAAA,cAAA,OAAKod,KAAK,QAAQnd,UAAWE,EAAOkM,SAClCrM,IAAAA,cAACsM,EAAAA,GAAiB,CAACrI,KAAMqW,EAAezY,QAASyZ,IACjDtb,IAAAA,cAAA,OAAKC,UAAWmM,EAAAA,EAAcI,UAC9BxM,IAAAA,cAACsM,EAAAA,GAAiB,CAACrI,KAAMoZ,EAAAA,GAAYxb,QAASma,KAItD,C,2HC3MI5hB,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,mZAAoZ,KAE7bH,EAAwBI,OAAS,CAChC,mBAAoB,6BACpB,KAAQ,kBAET,S,kBCDO,SAASgT,EAAW8P,GACzB,IAAIjQ,EAAOkQ,IACPhQ,EAAMgQ,IACN5P,GAAQ,IACRC,GAAS,IACb,IAAK,MAAM+L,KAAQ2D,EAAO,CACxB,MAAME,EAAI7D,EAAKvM,EAAIuM,EAAKrV,MAClBmZ,EAAI9D,EAAKrM,EAAIqM,EAAKpV,OACpBoV,EAAKvM,EAAIC,IACXA,EAAOsM,EAAKvM,GAEVoQ,EAAI7P,IACNA,EAAQ6P,GAEN7D,EAAKrM,EAAIC,IACXA,EAAMoM,EAAKrM,GAETmQ,EAAI7P,IACNA,EAAS6P,EAEb,CAKA,MAAO,CAAErQ,EAAGC,EAAMC,EAAGC,EAAKjJ,MAHZqJ,EAAQN,EAGW9I,OAFlBqJ,EAASL,EAG1B,C,4OCzBIxO,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKnB,QAAe,KAAW,IAAQvE,OAAS,IAAQA,YAAS6E,E,0FCEnE,SAASkb,IACP,MAAM,WAAElD,GAAeD,OACvB,OAAOC,EAAa,IAChBlU,KAAKua,IAAI,IAAKrG,GACdA,EAAa,IACE,GAAbA,EACA,GACR,CAEO,SAASsG,EAAcnf,GAA4C,IAAAof,EAAA,IAA3C,IAAE3b,GAA0BzD,EACzD,MAAM,uBAAEqf,IAA2Btc,EAAAA,EAAAA,YAAWC,EAAAA,GACxC4D,EAAWnD,EAAImD,SACfD,EAAgC,QAAvByY,EAAGxY,EAASC,mBAAW,IAAAuY,OAAA,EAApBA,EAAsBtY,OAEjCwY,EAAUC,EAAmBC,IAAiBne,EAAAA,EAAAA,UAAQ,KAAM,IAAAsC,EACjE,MAAM8b,EAA+B,QAAf9b,EAAGF,EAAII,gBAAQ,IAAAF,OAAA,EAAZA,EAAc8G,QAAQ7G,GAAqB,SAAbA,EAAIG,OACrDwb,EAAgC,GAChCC,EAAwB,GAC9B,IAAIF,EACJ,IAAK,MAAM7a,KAAWgb,QAAAA,EAAoB,GACxC,IAAK,MAAMtb,KAAQM,EAAQP,MAAO,CACN,IAAA+D,EAA1B,GAAkB,SAAd9D,EAAKjB,KACP,OAAiB,QAAjB+E,EAAQ9D,EAAK+D,YAAI,IAAAD,OAAA,EAATA,EAAW/E,MACjB,IAAK,WAEHoc,EAAWnb,EACX,SACF,IAAK,WACL,IAAK,uBACH,SACF,QACEob,EAAkB1jB,KAAKsI,GACvB,cAEC,GAAkB,SAAdA,EAAKjB,KACd,SAEFsc,EAAc3jB,KAAKsI,EACrB,CAEF,MAAO,CAACmb,EAAUC,EAAmBC,EAAc,GAClD,CAAC/b,EAAII,WAEF6Z,GAAchQ,EAAAA,EAAAA,cAAY,KAC9BiQ,YAAW,KACT0B,EAAuB,KAAK,GAC3B,IAAI,GACN,CAACA,IAEEvU,GAAMD,EAAAA,EAAAA,QAAe,OAE3BwB,EAAAA,EAAAA,YAAU,KACRsR,YAAW,KAAM,IAAA5E,EACJ,QAAXA,EAAAjO,EAAI6D,eAAO,IAAAoK,GAAXA,EAAa8E,MAAM,GACnB,GACD,IAEH,MAAO/X,EAAOgY,IAAY1R,EAAAA,EAAAA,UAAS2P,IAEnC1P,EAAAA,EAAAA,YAAU,KACR,MAAM0R,EAAWA,KACfD,EAAS/B,EAAe,EAG1B,OADAnD,OAAO/C,iBAAiB,SAAUkI,GAC3B,KACLnF,OAAO9C,oBAAoB,SAAUiI,EAAS,CAC/C,GACA,IAEH,MAAM2B,EAAkBH,EAAkBza,OAAS,KAAOwa,EACpDK,EAAmBH,EAAc1a,OAAS,EAC1C8a,EACH,CAAC,UAAW,kBAAkBxY,SAAS3D,EAAIiD,QAAUgZ,GACtDC,EACI,YACAlc,EAAIiD,MAEJgM,EAASjP,EAAIqF,SAAyB,WAAd8W,EAE9B,OACEpe,IAAAA,cAACwc,EAAAA,GAAa,CACZlT,IAAKA,EACLmT,YAAatX,GAAaC,EAAShB,KACnCE,MAAOA,EACPoY,UAAQ,EACRC,MAAI,EACJC,cAAY,EACZC,UAAQ,EACRC,QAASZ,GAETlc,IAAAA,cAACyI,EAAAA,EAAc,CAACxG,IAAKA,EAAKsK,QAAQ,cAClCvM,IAAAA,cAAA,OAAKC,UAAWE,EAAO6G,QACrBhH,IAAAA,cAAA,OAAKC,UAAWE,EAAOC,UAAU/C,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEU,WAAW,KAChD6E,IAAAA,cAAA,OAAKC,UAAW,GAAGE,EAAOS,QAAQiH,EAAAA,EAAaE,YAC7C/H,IAAAA,cAACqe,EAAY,CAAC5e,QAAS2F,EAASkZ,kBAAmBC,WAAS,MAG/DL,GACCle,IAAAA,cAAA,OAAKC,UAAWE,EAAO6G,QACrBhH,IAAAA,cAAA,OAAKC,UAAWE,EAAOC,UAAU/C,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEW,SAAS,KAC9C4E,IAAAA,cAAA,OAAKC,UAAW,GAAGE,EAAOS,QAAQiH,EAAAA,EAAaE,YAC5CgW,EAAkBxa,KAAI,CAACZ,EAAMgG,KAAS,IAAAhC,EAAA6X,EAAAC,EAAA,MACjB,YAAX,QAAT9X,EAAAhE,EAAK+D,YAAI,IAAAC,OAAA,EAATA,EAAWjF,MACT1B,IAAAA,cAAC0e,EAAuB,CACtBhb,IAAKiF,EACLlJ,QAASkD,EAAK+D,KAAKzD,UAEC,WAAX,QAATub,EAAA7b,EAAK+D,YAAI,IAAA8X,OAAA,EAATA,EAAW9c,OACb,CAAC,kBAAmB,wBAAwBkE,SACzB,QADiC6Y,EAClD9b,EAAK+D,KAAKzD,eAAO,IAAAwb,OAAA,EAAjBA,EAAmB/c,MAErBO,EAAIgE,eACFjG,IAAAA,cAACgJ,EAAAA,EAAQ,CACPtF,IAAKiF,EACL1C,eAAgBhE,EAAIgE,eACpBgD,OAC6B,yBAA3BtG,EAAK+D,KAAKzD,QAAQvB,KACd,UACA,QAGN,KAEJ1B,IAAAA,cAACqe,EAAY,CAAC3a,IAAKiF,EAAWlJ,QAASmD,KAAK+b,UAAUhc,IACvD,MAEAmb,GACD9d,IAAAA,cAAA,OACEC,UAAWC,IAAWC,EAAO,sBAAuB,CAClD,CAACA,EAAOye,UAAW1N,KAGrBlR,IAAAA,cAAC6e,EAAAA,EAAgB,CAACf,SAAUA,EAAU5M,OAAQA,OAMvDiN,GACCne,IAAAA,cAAA,OAAKC,UAAWE,EAAO6G,QACrBhH,IAAAA,cAAA,OAAKC,UAAWE,EAAOC,UAAU/C,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEY,UAAU,KAC/C2E,IAAAA,cAAA,OAAKC,UAAW,GAAGE,EAAOS,QAAQiH,EAAAA,EAAaE,YAC5CiW,EAAcza,KAAI,CAACZ,EAAMgG,KAAS,IAAAmW,EAAA,MACnB,SAAdnc,EAAKjB,MAAuC,cAAX,QAATod,EAAAnc,EAAK+D,YAAI,IAAAoY,OAAA,EAATA,EAAWpd,MAAsB,KACvD1B,IAAAA,cAACqe,EAAY,CACX3a,IAAKiF,EACLlJ,QACgB,SAAdkD,EAAKjB,KAAkBiB,EAAKF,KAAOG,KAAK+b,UAAUhc,GAEpD4b,UAAyB,SAAd5b,EAAKjB,MAEnB,MAOf,CAEA,SAAS2c,EAAYlV,GAML,IANM,QACpB1J,EAAO,UACP8e,GAIDpV,EACC,MAAO4V,EAAgBH,IAAY/e,EAAAA,EAAAA,UAAQ,KACzC,GAAI0e,EACF,IACE,MAAMS,EAAOpc,KAAKC,MAAMpD,QAAAA,EAAW,IACnC,MAAO,CAAC,eAAiBmD,KAAK+b,UAAUK,EAAM,KAAM,aACtD,CAAE,MACA,CAGJ,MAAO,CAACvf,GAAS,EAAK,GACrB,CAACA,EAAS8e,IAEb,OAAOK,EACL5e,IAAAA,cAACif,EAAAA,EAAS,CAAChf,UAAWC,IAAW,qBAAsBC,EAAOye,WAC5D5e,IAAAA,cAAA,YAAO+e,IAGT/e,IAAAA,cAACgI,EAAAA,EAAgB,CAACvI,QAASsf,GAE/B,CAEA,SAASL,EAAuBvU,GAIhB,IAJiB,QAC/B1K,GAGD0K,EACC,OACEnK,IAAAA,cAAA,OACEC,UAAWC,IAAWC,EAAO,kBAAmB0H,EAAAA,EAAaE,WAE7D/H,IAAAA,cAACgI,EAAAA,EAAgB,CAACvI,QAASA,IAGjC,C,sEC/NIrF,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,+3DAAg4D,KAEz6DH,EAAwBI,OAAS,CAChC,gBAAiB,0BACjB,QAAW,oBACX,MAAS,kBACT,YAAa,sBACb,WAAc,uBACd,SAAY,qBACZ,QAAW,oBACX,MAAS,kBACT,OAAU,mBACV,SAAY,qBACZ,MAAS,kBACT,UAAa,uBAEd,S,sEClBIJ,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,snBAAunB,KAEhqBH,EAAwBI,OAAS,CAChC,WAAY,qBACZ,QAAW,oBACX,KAAQ,iBACR,KAAQ,iBACR,OAAU,oBAEX,S,sECXIJ,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,saAAua,KAEhdH,EAAwBI,OAAS,CAChC,QAAW,oBACX,QAAW,qBAEZ,S,6LCAIuE,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKnB,QAAe,KAAW,IAAQvE,OAAS,IAAQA,YAAS6E,E,mECfnE,IAAI6f,EAQJ,SAASC,IA8BP,OA7BKD,IACHA,EAAS,CACP,CACEE,MAAO,OAAM/hB,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEqC,6BACjBoN,MAAO,OACPmV,MAAO,QAET,CACED,MAAO,OAAM/hB,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEsC,sCACjBmN,MAAO,OACPmV,MAAO,QAET,CACED,MAAO,OAAM/hB,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEuC,mCACjBkN,MAAO,OACPmV,MAAO,QAET,CACED,MAAO,OAAM/hB,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEwC,2CACjBiN,MAAO,OACPmV,MAAO,UAET,CACED,MAAO,OAAM/hB,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEyC,yDACjBgN,MAAO,SACPmV,MAAO,YAINH,CACT,CAEO,SAASI,IACd,MAAM,mBACJC,EAAkB,kBAClBC,EAAiB,gBACjBC,EAAe,iBACfC,IACEne,EAAAA,EAAAA,YAAWwC,EAAAA,GACT4b,GAAUtW,EAAAA,EAAAA,QAAwB,MAClC6V,EAASC,KACRS,EAAaC,IAAkBjV,EAAAA,EAAAA,WAAS,GAEzCkV,GAAe5T,EAAAA,EAAAA,cAClBnC,IAAwB,IAAAgW,EAAAC,EAGvB,GAFAjW,EAAEoK,iBACF0L,GAAe,GACK,QAAhBE,EAACJ,EAAQxS,eAAO,IAAA4S,IAAfA,EAAiBE,iBACpB,OAEF,MAAMC,EAAW,IAAIC,SAASR,EAAQxS,SAChCwB,EAAiB,GACjByR,EAAmB,GACzB,IAAK,IAAI/U,EAAI,EAAGA,EAAI6T,EAAO5b,OAAQ+H,IAAK,CACtC,MAAMnB,EAAQgW,EAAS5Q,IAAI,kBAAkBjE,KACzCnB,IACsB,SAApBgV,EAAO7T,GAAGgU,MACZ1Q,EAAKtU,KAAK6P,GAEVkW,EAAO/lB,KAAK6P,GAGlB,CACAwV,EAAiB,CACf/Q,OACAyR,SACAC,SAAmC,QAA3BL,EAAGE,EAAS5Q,IAAI,mBAAW,IAAA0Q,EAAAA,EAAI,IACvC,GAEJ,CAACd,EAAQQ,IAGLY,GAAcpU,EAAAA,EAAAA,cAAanC,IAAwB,IAAAwW,EACvDxW,EAAEoK,iBACF0L,GAAe,GACA,QAAfU,EAAAZ,EAAQxS,eAAO,IAAAoT,GAAfA,EAAiBC,OAAO,GACvB,IAEH,OAAIhB,EAEAxf,IAAAA,cAAA,OAAKC,UAAW,GAAGE,EAAO,oBAAoBA,EAAOsgB,cAClDpjB,EAAAA,EAAAA,GAAE5C,EAAAA,EAAE0C,2BAMT6C,IAAAA,cAAA,OAAKC,UAAWE,EAAO,kBACrBH,IAAAA,cAAA,OAAKC,UAAWE,EAAOC,SACrBJ,IAAAA,cAAA,OAAKC,UAAWE,EAAOmF,QAAQjI,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEkC,sBACnCqD,IAAAA,cAACsM,EAAAA,GAAiB,CAChBrI,KAAMoZ,EAAAA,GACN9Q,QAAQ,OACR1K,QAASA,IAAM4d,GAAgB,MAGnCzf,IAAAA,cAAA,QACEC,UAAWC,IAAWC,EAAOugB,KAAM,CAAE,CAACvgB,EAAOwgB,UAAWf,IACxDtW,IAAKqW,GAEJT,EAAO3b,KAAI,CAACqd,EAAOnd,IAClBzD,IAAAA,cAAA,OACE0D,IAAKD,EACLxD,UAAW,GAAGE,EAAO,gBAAgBA,EAAO0gB,cAE5C7gB,IAAAA,cAAA,OAAKC,UAAWE,EAAOif,OAAQwB,EAAMxB,OACrCpf,IAAAA,cAAA,OAAKC,UAAWE,EAAOpB,SACrBiB,IAAAA,cAAA,SAAOC,UAAWE,EAAO2gB,OACvB9gB,IAAAA,cAAA,SACE0B,KAAK,QACLqf,UAAQ,EACR3c,KAAM,kBAAkBX,IACxByG,MAAO0W,EAAM1W,QAEflK,IAAAA,cAAA,aAAO3C,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEI,OAEbmF,IAAAA,cAAA,SAAOC,UAAWE,EAAO2gB,OACvB9gB,IAAAA,cAAA,SACE0B,KAAK,QACLqf,UAAQ,EACR3c,KAAM,kBAAkBX,IACxByG,MAAM,KAERlK,IAAAA,cAAA,aAAO3C,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEK,UAKnBkF,IAAAA,cAAA,OAAKC,UAAW,GAAGE,EAAO,gBAAgBA,EAAO6gB,YAC/ChhB,IAAAA,cAAA,SAAOihB,QAAQ,qBAAoB5jB,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEmC,mBACvCoD,IAAAA,cAAA,YACEzF,GAAG,mBACH6J,KAAK,WACLwF,aAAavM,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEoC,8BACjBqkB,KAAM,KAGVlhB,IAAAA,cAAA,OAAKC,UAAWE,EAAOghB,QACrBnhB,IAAAA,cAACyB,EAAAA,GAAa,CAACE,aAAa,QAAQD,KAAK,OAAOG,QAASye,IACtDjjB,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEiC,QAEPsD,IAAAA,cAACyB,EAAAA,GAAa,CACZE,aAAa,QACbD,KAAK,UACLE,MAAM,QACNC,QAASie,EACT1P,SAAUmP,IAETliB,EAAAA,EAAAA,GAAE5C,EAAAA,EAAEgC,WAMjB,C,sECzKIrC,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,uIAAwI,KAEjLH,EAAwBI,OAAS,CAChC,WAAY,sBAEb,S,gHCGO,SAAS4mB,EAAQ5iB,GAA8C,IAA7C,IAAEyD,EAAG,OAAEtC,GAAuBnB,EACrD,MAAM8K,GAAMD,EAAAA,EAAAA,QAAuB,OAC7B,4BAAEgY,IAAgC9f,EAAAA,EAAAA,YAAWwC,EAAAA,IAE5CvD,EAAM8gB,IAAW1W,EAAAA,EAAAA,UAA6B,UAE/C2W,GAAmBrV,EAAAA,EAAAA,cAAahC,IACpCoX,EAAQpX,EAAM,GACb,IAEGsX,GAAkBtV,EAAAA,EAAAA,cACrBnC,IACC,IAAI0X,GAAQ,EACZ,IAAK,MAAMC,KAAM3X,EAAE4X,YAAYC,eAAgB,CAC7C,GAAIF,IAAOpY,EAAI6D,QACb,MAEF,GACEuU,aAAcG,aACdH,EAAGI,UAAUC,SAAS,cACtBL,EAAGI,UAAUC,SAAS,+BACtB,CACAN,GAAQ,EACR,KACF,CACF,CACAJ,EAA4BI,EAAM,GAEpC,CAACJ,IAGGW,GAAmB9V,EAAAA,EAAAA,cAAY,KACnCmV,GAA4B,EAAM,GACjC,CAACA,IAEJ,OACErhB,IAAAA,cAAA,OACEC,UAAWC,IAAW0U,EAAAA,EAAU,YAAa,CAC3C,CAACA,EAAAA,EAAUjV,QAASA,EACpB,CAACiV,EAAAA,EAAU/Q,OAAiB,UAATrD,IAErB8I,IAAKA,EACL2Y,YAAaT,EACbU,aAAcF,GAEdhiB,IAAAA,cAAA,OAAKC,UAAW2U,EAAAA,EAAUrN,aAC1BvH,IAAAA,cAACmiB,EAAAA,EAAW,CAAClgB,IAAKA,EAAKmgB,aAAcb,IAG3C,C,+JCzDO,SAAS9c,EAAejE,GAC7B,MAAO0J,EAAOmY,GAAQC,EAAAA,MAAMC,WAAW/hB,EAAM,QAAS,GAChDgiB,GAAUtY,EAChB,MAAO,GAAGsY,EAAS,IAAMrf,KAAKsf,MAAMD,GAAUA,KAAUH,GAC1D,CAEO,SAASne,EACdC,EACAoX,GAEA,MAAM7Z,EAAOyC,GAAYwW,EAAsBY,GAE/C,OAAQ7Z,GACN,IAAK,gBACH,MAAO,CAAC,WAAYghB,GACtB,IAAK,kBACH,MAAO,CAAC,MAAOC,GAGnB,OAAIjhB,EAAKkhB,WAAW,SACX,CAAC,OAAQF,GAGX,CAAC,OAAQG,EAClB,CAEO,SAASlI,EAAsBY,GACpC,IAAIuH,EAAM,GACV,MAAMC,EAAUxH,aAAQ,EAARA,EAAUyH,MAAM,cAIhC,OAHID,IACFD,EAAMC,EAAQ,GAAGE,eAEXH,GACN,IAAK,KACH,MAAO,gBACT,IAAK,MACH,MAAO,kBACT,QACE,MAAO,UAEb,C,sEC1CI1oB,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,sfAAuf,KAEhiBH,EAAwBI,OAAS,CAChC,QAAW,oBACX,QAAW,oBACX,QAAW,oBACX,MAAS,kBACT,MAAS,mBAEV,S,yKCHIuE,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKnB,QAAe,KAAW,IAAQvE,OAAS,IAAQA,YAAS6E,C,sECrB/DjF,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,qpBAC4L,KAErOH,EAAwBI,OAAS,CAChC,OAAU,mBACV,KAAQ,iBACR,SAAY,qBACZ,qBAAsB,+BACtB,iBAAkB,4BAEnB,S,sICYO,SAAS0oB,EAAS1kB,GAMJ,IALnB2kB,SAAUC,EACVC,SAAUC,EAAS,QACnBC,EAAO,MACPre,EAAK,aACLse,GACiBhlB,EACjB,MAAMilB,GAAuBpa,EAAAA,EAAAA,QAAyC,MAChE0H,EAAsB,cAAV7L,GAEZ,aAAEwe,EAAY,aAAEC,IAAiB9jB,EAAAA,EAAAA,UAAQ,KAC7C,MAAM6jB,EAA4B,CAChC,CACEhiB,KAAM,QACNnH,GAAImD,EAAAA,KAGFimB,EAA4B,GAC5BC,EAA4B,GAC5BT,EAAWC,QAAAA,EAAa,GACxBC,EAAWC,QAAAA,EAAa,GAExBO,EAAY,IAAI1N,IAAYkN,EAAS9f,KAAK+S,GAASA,EAAK5B,UACxDoP,EAAY/S,EACd,IAAIoF,IAAYkN,EAAS9f,KAAK+S,GAASA,EAAKE,UAC5C,KAEJ,IAAK,MAAM/I,KAAQ0V,EACZU,EAAUtN,IAAI9I,EAAKlT,KACtBopB,EAAatpB,KAAK,CAChBmc,OAAQ9Y,EAAAA,GACRgX,OAAQjH,EAAKlT,KAIbwW,IAAc+S,EAAWvN,IAAI9I,EAAKlT,KACpCqpB,EAAgBvpB,KAAKoT,EAAKlT,IAI9BmpB,EAAarpB,QAAQ8oB,GACrBQ,EAAatpB,QAAQgpB,GAEjBO,EAAgBtgB,OAAS,IAC3BogB,EAAarpB,KAAK,CAChBE,GAAIoD,EAAAA,GACJ+D,KAAM,QAERiiB,EAAatpB,QACRupB,EAAgBrgB,KAAKhJ,IAAE,CACxBic,OAAQjc,EACRma,OAAQ/W,EAAAA,QAGR6lB,IACFE,EAAarpB,KAAK,CAChBE,GAAIqD,EAAAA,GACJ8D,KAAM,aAERiiB,EAAatpB,KAAK,CAChBmc,OAAQ7Y,EAAAA,GACR+W,OAAQ9W,EAAAA,OAKd,MAAMmmB,EAAoBN,EAAqBtW,QAC/C,GAAI4W,EACF,IAAK,MAAMtW,KAAQiW,EAAc,CAC/B,MAAMhW,EAAOqW,EAAkBzU,IAAI7B,EAAKlT,IACpCmT,IACFD,EAAKC,KAAOA,EAEhB,CAGF,MAAO,CAAEgW,eAAcC,eAAc,GACpC,CAAC5S,EAAWyS,EAAcF,EAAWF,IAElCY,GAAuB3a,EAAAA,EAAAA,QAA4B,MAEzD,OAAOxJ,EAAAA,EAAAA,UAAQ,KAAM,IAAAokB,EACnB,IAAK,MAAMxW,KAAQiW,EACjB,GAAKH,UAAAA,EAAShN,IAAI9I,EAAKlT,IACrB,MAAO,CAAEoS,WAAW,EAAOD,MAAOgX,EAAcrN,MAAO,IAI3D,MAAM6N,EAAQ,IAAIC,IAAAA,SAAeC,OACjCF,EAAMG,SAAS,CACbC,QAAS,KACT3N,QAASvY,EAAAA,GACTmmB,QAASlmB,EAAAA,GACTuY,QAASzY,EAAAA,KAGX+lB,EAAMM,qBAAoB,WACxB,MAAO,CAAC,CACV,IACA,IAAK,MAAMlO,KAAQqN,EACjBO,EAAMO,QAAQnO,EAAKE,OAAQF,EAAK5B,QAElC,IAAK,MAAMjH,KAAQiW,EAAc,CAC/B,MAAOpf,EAAOC,GAAUgf,EAASjU,IAAI7B,EAAKlT,IAC1C2pB,EAAMQ,QAAQjX,EAAKlT,GAAI,CACrBA,GAAIkT,EAAKlT,GACT+J,QACAC,UAEJ,CACA4f,IAAAA,OAAaD,GAGb,IAAIS,EAA+B,KAEnC,MAAMjY,EAAQgX,EAAangB,KAAgBkK,IACzC,MAAMmX,EAAWV,EAAMzW,KAAKA,EAAKlT,IAC3B6S,EAAIwX,EAASxX,EAAIwX,EAAStgB,MAAQ,EAClCgJ,EAAIsX,EAAStX,EAAIsX,EAASrgB,OAAS,EAazC,MAXkB,UAAdkJ,EAAK/L,OACHsiB,EAAqB7W,QACvBwX,EAAU,CACRvX,EAAG4W,EAAqB7W,QAAQC,EAAIA,EACpCE,EAAG0W,EAAqB7W,QAAQG,EAAIA,GAGtC0W,EAAqB7W,QAAU,CAAEC,IAAGE,MAIjC,IACFG,EACHC,KAAM,CACJN,IACAE,IACAhJ,MAAOsgB,EAAStgB,MAChBC,OAAQqgB,EAASrgB,QAEpB,IAGH,GAAIogB,EACF,IAAK,MAAMlX,KAAQf,EACjB9F,OAAOie,OAAOpX,EAAKC,KAAOoX,EAAuBrX,EAAKC,KAAOiX,IAIjE,MAAMZ,EAAiD,QAAhCE,EAAIR,EAAqBtW,eAAO,IAAA8W,EAAAA,EAA5BR,EAAqBtW,QAAY,IAAIgC,IAChE,IAAK,MAAM1B,KAAQf,EAAO,CACxB,MAAM,EAAEU,EAAC,EAAEE,GAAMG,EAAKC,KACtBqW,EAAkBxU,IAAI9B,EAAKlT,GAAI,CAAE6S,IAAGE,KACtC,CA2BA,MAAO,CACLX,WAAW,EACXD,QACA2J,MA5BYsN,EAAapgB,KAAK+S,IAC9B,MAAME,EAAS0N,EAAMzW,KAAK6I,EAAKE,QACzBuO,EAAiBD,EAAuBtO,EAAQmO,GAChDjQ,EAASwP,EAAMzW,KAAK6I,EAAK5B,QACzBsQ,EAAiBF,EAAuBpQ,EAAQiQ,GAOhDM,EAAQD,EAAe1X,GAAKoH,EAAOnQ,OAASpG,EAAAA,IAAY,EACxD+mB,EAAyB,CAC7B,CAAE9X,EAAG2X,EAAe3X,EAAGE,EAAGyX,EAAezX,EAAIkJ,EAAOjS,OAAS,GAC7D,CAAE6I,EAAG2X,EAAe3X,EAAGE,EAAG2X,GAC1B,CAAE7X,EAAG4X,EAAe5X,EAAGE,EAAG2X,GAC1B,CAAE7X,EAAG4X,EAAe5X,EAAGE,EAAG0X,EAAe1X,EAAIoH,EAAOnQ,OAAS,IAG/D,MAAO,IACF+R,EACH4O,SACD,IAOF,GACA,CAACvB,EAAcD,EAAcH,GAClC,CAEA,SAASuB,EACPrS,EACAkS,GAEA,OAAKA,EAME,CACLvX,EAAGqF,EAASrF,EAAIuX,EAAQvX,EACxBE,EAAGmF,EAASnF,EAAIqX,EAAQrX,GAPjB,CACLF,EAAGqF,EAASrF,EACZE,EAAGmF,EAASnF,EAOlB,C","sources":["webpack:///./src/cruise-canvas/FileList/FileList.module.css","webpack:///./src/cruise-canvas/i18n.ts","webpack:///./src/cruise-canvas/Nav/Nav.module.css","webpack:///./src/cruise-canvas/constants.ts","webpack:///./src/cruise-canvas/Topology/Topology.module.css","webpack:///./src/cruise-canvas/NodeLoading/NodeLoading.module.css","webpack:///./src/cruise-canvas/NodeRequirement/NodeRequirement.module.css?7927","webpack:///./src/cruise-canvas/NodeRequirement/NodeRequirement.tsx","webpack:///./src/cruise-canvas/cmdb.tsx","webpack:///./src/cruise-canvas/HumanConfirm/HumanConfirm.module.css?f400","webpack:///./src/cruise-canvas/HumanConfirm/HumanConfirm.tsx","webpack:///./src/cruise-canvas/HumanAdjustPlanResult/HumanAdjustPlanResult.tsx","webpack:///./src/cruise-canvas/FileList/FileList.module.css?e818","webpack:///./src/cruise-canvas/FileList/FileList.tsx","webpack:///./src/cruise-canvas/NodeJob/NodeJob.tsx","webpack:///./src/cruise-canvas/styles.module.css","webpack:///./src/cruise-canvas/NodeStart/NodeStart.module.css?c135","webpack:///./src/cruise-canvas/NodeStart/NodeStart.tsx","webpack:///./src/cruise-canvas/NodeJob/NodeJob.module.css?69ec","webpack:///./src/cruise-canvas/styles.module.css?7c94","webpack:///./src/cruise-canvas/ZoomBar/ZoomBar.module.css?7d53","webpack:///./src/cruise-canvas/ZoomBar/ZoomBar.tsx","webpack:///./src/cruise-canvas/NodeRequirement/NodeRequirement.module.css","webpack:///./src/cruise-canvas/useAutoCenter.ts","webpack:///./src/cruise-canvas/NodeEnd/NodeEnd.module.css?bd4b","webpack:///./src/cruise-canvas/NodeEnd/NodeEnd.tsx","webpack:///./src/cruise-canvas/Topology/node.shadow.css","webpack:///./src/cruise-canvas/HumanConfirm/HumanConfirm.module.css","webpack:///./src/cruise-canvas/NodeLoading/NodeLoading.module.css?c803","webpack:///./src/cruise-canvas/NodeLoading/NodeLoading.tsx","webpack:///./src/cruise-canvas/Nav/Nav.module.css?7d2d","webpack:///./src/cruise-canvas/Nav/Nav.tsx","webpack:///./src/cruise-canvas/NodeInstruction/NodeInstruction.module.css?5e68","webpack:///./src/cruise-canvas/NodeInstruction/NodeInstruction.tsx","webpack:///./src/cruise-canvas/utils/handleKeyboardNav.ts","webpack:///./src/cruise-canvas/NodeJob/NodeJob.module.css","webpack:///./src/cruise-canvas/useZoom.ts","webpack:///./src/cruise-canvas/Topology/Topology.module.css?a867","webpack:///./src/cruise-canvas/diagram.ts","webpack:///./src/cruise-canvas/Topology/Topology.tsx","webpack:///./src/cruise-canvas/NodeStart/NodeStart.module.css","webpack:///./src/cruise-canvas/useTaskGraph.ts","webpack:///./src/cruise-canvas/utils/getScrollTo.ts","webpack:///./src/cruise-canvas/FilePreview/FilePreview.module.css?cc18","webpack:///./src/cruise-canvas/FilePreview/FilePreview.tsx","webpack:///./src/cruise-canvas/NodeInstruction/NodeInstruction.module.css","webpack:///../../src/mergeRects.ts","webpack:///./src/cruise-canvas/ToolCallDetail/ToolCallDetail.module.css?7f00","webpack:///./src/cruise-canvas/ToolCallDetail/ToolCallDetail.tsx","webpack:///./src/cruise-canvas/NodeFeedback/NodeFeedback.module.css","webpack:///./src/cruise-canvas/NodeEnd/NodeEnd.module.css","webpack:///./src/cruise-canvas/toolbar.module.css","webpack:///./src/cruise-canvas/NodeFeedback/NodeFeedback.module.css?6f7a","webpack:///./src/cruise-canvas/NodeFeedback/NodeFeedback.tsx","webpack:///./src/cruise-canvas/ZoomBar/ZoomBar.module.css","webpack:///./src/cruise-canvas/NodeView/NodeView.tsx","webpack:///./src/cruise-canvas/utils/file.ts","webpack:///./src/cruise-canvas/FilePreview/FilePreview.module.css","webpack:///./src/cruise-canvas/toolbar.module.css?a4b4","webpack:///./src/cruise-canvas/ToolCallDetail/ToolCallDetail.module.css","webpack:///./src/cruise-canvas/useLayout.ts"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.files--SBFNeFls{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:4px;list-style:none;margin:12px 0 0;padding:0}.large--M2NOUc4a{grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}.file--sJi1z1FZ{background:rgba(0,0,0,0.04);border-radius:8px;display:flex;height:60px;align-items:center;padding:0 14px}.file--sJi1z1FZ,\n.file--sJi1z1FZ:hover{color:var(--elevo-color-brand)}.file--sJi1z1FZ:hover{background:rgba(0,0,0,0.08)}.content--W8hFyMBh{min-width:0;flex:1}.icon--OV3uC006{margin-right:11px}.name--i9JLowqW,\n.metadata--xbNLgFgO{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.name--i9JLowqW{color:rgba(0,0,0,0.88)}.metadata--xbNLgFgO{color:rgba(0,0,0,0.45);font-size:12px;margin-top:3px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"files\": `files--SBFNeFls`,\n\t\"large\": `large--M2NOUc4a`,\n\t\"file\": `file--sJi1z1FZ`,\n\t\"content\": `content--W8hFyMBh`,\n\t\"icon\": `icon--OV3uC006`,\n\t\"name\": `name--i9JLowqW`,\n\t\"metadata\": `metadata--xbNLgFgO`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n YES = \"YES\",\n NO = \"NO\",\n PLAN_COMPLETED = \"PLAN_COMPLETED\",\n TASK_COMPLETED = \"TASK_COMPLETED\",\n SHARE = \"SHARE\",\n TYPE_YOUR_MESSAGE_HERE = \"TYPE_YOUR_MESSAGE_HERE\",\n ARGUMENTS = \"ARGUMENTS\",\n PROCESS = \"PROCESS\",\n RESPONSE = \"RESPONSE\",\n CONFIRMING_PLAN_TIPS = \"CONFIRMING_PLAN_TIPS\",\n PAUSE_THE_TASK = \"PAUSE_THE_TASK\",\n RESUME_THE_TASK = \"RESUME_THE_TASK\",\n CANCEL_THE_TASK = \"CANCEL_THE_TASK\",\n CONFIRM_TO_CANCEL_THE_TASK_TITLE = \"CONFIRM_TO_CANCEL_THE_TASK_TITLE\",\n CONFIRM_TO_CANCEL_THE_TASK_CONTENT = \"CONFIRM_TO_CANCEL_THE_TASK_CONTENT\",\n BACK_TO_CENTER = \"BACK_TO_CENTER\",\n ZOOM_IN = \"ZOOM_IN\",\n ZOOM_OUT = \"ZOOM_OUT\",\n FULLSCREEN = \"FULLSCREEN\",\n REPLAYING = \"REPLAYING\",\n REPLAY_COMPLETED = \"REPLAY_COMPLETED\",\n SKIP_TO_RESULTS = \"SKIP_TO_RESULTS\",\n WATCH_AGAIN = \"WATCH_AGAIN\",\n SEND_MESSAGE = \"SEND_MESSAGE\",\n UNTITLED = \"UNTITLED\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX = \"FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX = \"FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX\",\n DOWNLOAD = \"DOWNLOAD\",\n SUBMIT = \"SUBMIT\",\n RESET = \"RESET\",\n FEEDBACK_NODE_TITLE = \"FEEDBACK_NODE_TITLE\",\n PROBLEM_FEEDBACK = \"PROBLEM_FEEDBACK\",\n PROBLEM_FEEDBACK_PLACEHOLDER = \"PROBLEM_FEEDBACK_PLACEHOLDER\",\n IS_THE_TASK_PLAN_COMPLETE = \"IS_THE_TASK_PLAN_COMPLETE\",\n IS_THE_TASK_PLAN_LOGICALLY_CORRECT = \"IS_THE_TASK_PLAN_LOGICALLY_CORRECT\",\n ARE_THE_TASK_PLAN_STEPS_CONCISE = \"ARE_THE_TASK_PLAN_STEPS_CONCISE\",\n ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE = \"ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE\",\n IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT = \"IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT\",\n THANKS_FOR_YOUR_FEEDBACK = \"THANKS_FOR_YOUR_FEEDBACK\",\n}\n\nconst en: Locale = {\n YES: \"Yes\",\n NO: \"No\",\n PLAN_COMPLETED: \"All jobs done\",\n TASK_COMPLETED: \"Task completed\",\n SHARE: \"Share\",\n TYPE_YOUR_MESSAGE_HERE: \"Type your message here\",\n ARGUMENTS: \"Arguments\",\n PROCESS: \"Process\",\n RESPONSE: \"Response\",\n CONFIRMING_PLAN_TIPS:\n \"According to the request, I have made the following plan:\",\n PAUSE_THE_TASK: \"Pause the task\",\n RESUME_THE_TASK: \"Resume the task\",\n CANCEL_THE_TASK: \"Cancel the task\",\n CONFIRM_TO_CANCEL_THE_TASK_TITLE: \"Are you sure to cancel the task?\",\n CONFIRM_TO_CANCEL_THE_TASK_CONTENT:\n \"The task can not be resumed after been canceled.\",\n BACK_TO_CENTER: \"Back to center\",\n ZOOM_IN: \"Zoom in\",\n ZOOM_OUT: \"Zoom out\",\n FULLSCREEN: \"Fullscreen\",\n REPLAYING: \"Task is replaying...\",\n REPLAY_COMPLETED: \"Task replay completed.\",\n SKIP_TO_RESULTS: \"Skip to results\",\n WATCH_AGAIN: \"Watch again\",\n SEND_MESSAGE: \"Send message\",\n UNTITLED: \"Untitled\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX:\n \"This file is unpreviewable currently, you can\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX: \"and view it locally.\",\n DOWNLOAD: \"Download\",\n SUBMIT: \"Submit\",\n RESET: \"Reset\",\n FEEDBACK_NODE_TITLE: \"How do you think Elevo has done this task?\",\n PROBLEM_FEEDBACK: \"Problem feedback\",\n PROBLEM_FEEDBACK_PLACEHOLDER: \"Please describe the problem you encountered.\",\n IS_THE_TASK_PLAN_COMPLETE: \"Is the task plan complete:\",\n IS_THE_TASK_PLAN_LOGICALLY_CORRECT: \"Is the task plan logically correct:\",\n ARE_THE_TASK_PLAN_STEPS_CONCISE: \"Are the task plan steps concise:\",\n ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE:\n \"Are the analytical conclusions accurate:\",\n IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT:\n \"Is the evidence supporting the conclusions sufficient:\",\n THANKS_FOR_YOUR_FEEDBACK: \"Thank you for helping us become better.\",\n};\n\nconst zh: Locale = {\n YES: \"是\",\n NO: \"否\",\n PLAN_COMPLETED: \"所有任务已全部完成\",\n TASK_COMPLETED: \"任务完成\",\n SHARE: \"分享\",\n TYPE_YOUR_MESSAGE_HERE: \"在这里输入信息\",\n ARGUMENTS: \"参数\",\n PROCESS: \"过程\",\n RESPONSE: \"响应\",\n CONFIRMING_PLAN_TIPS: \"根据需求,我已制定如下计划:\",\n PAUSE_THE_TASK: \"暂停任务\",\n RESUME_THE_TASK: \"恢复任务\",\n CANCEL_THE_TASK: \"取消任务\",\n CONFIRM_TO_CANCEL_THE_TASK_TITLE: \"确定取消任务吗?\",\n CONFIRM_TO_CANCEL_THE_TASK_CONTENT: \"任务取消后将无法再恢复运行。\",\n BACK_TO_CENTER: \"回中\",\n ZOOM_IN: \"放大\",\n ZOOM_OUT: \"缩小\",\n FULLSCREEN: \"全屏\",\n REPLAYING: \"任务正在回放中...\",\n REPLAY_COMPLETED: \"任务回放完成。\",\n SKIP_TO_RESULTS: \"跳转到结果\",\n WATCH_AGAIN: \"重新观看\",\n SEND_MESSAGE: \"发送消息\",\n UNTITLED: \"未命名\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX: \"该类型文件暂不支持预览,您可以\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX: \"查看。\",\n DOWNLOAD: \"下载\",\n SUBMIT: \"提交\",\n RESET: \"重置\",\n FEEDBACK_NODE_TITLE: \"Elevo 完成这项任务的效果如何?\",\n PROBLEM_FEEDBACK: \"问题反馈\",\n PROBLEM_FEEDBACK_PLACEHOLDER: \"欢迎留下您的意见\",\n IS_THE_TASK_PLAN_COMPLETE: \"任务计划是否完备:\",\n IS_THE_TASK_PLAN_LOGICALLY_CORRECT: \"任务计划是否逻辑正确:\",\n ARE_THE_TASK_PLAN_STEPS_CONCISE: \"任务计划步骤是否精简:\",\n ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE: \"分析结论是否准确:\",\n IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT:\n \"结论的支撑证据是否充足:\",\n THANKS_FOR_YOUR_FEEDBACK: \"感谢你帮我们变得更好。\",\n};\n\nexport const NS = \"bricks/ai-portal/cruise-canvas\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.container--nviLvTo4{position:absolute;right:0;top:72px;bottom:72px;padding:48px 0;overflow-y:auto;scrollbar-width:none;pointer-events:none}.nav--lm9zwHhG{list-style:none;margin:0;padding:20px 0;background:rgba(255,255,255,0);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);pointer-events:auto}.container--nviLvTo4,\n.nav--lm9zwHhG{border-radius:8px 0px 0px 8px}.link--sJDeRfjL{display:flex;align-items:center;width:170px;height:36px;border-radius:18px 0 0 18px;padding:0 24px 0 16px;font-size:13px}.link--sJDeRfjL,\n.link--sJDeRfjL:hover{color:rgba(93,105,126,0.7)}.link--sJDeRfjL.disabled--UpGab11N{cursor:default}.item--B4GvcxMx:not(:first-child){margin-top:12px}.icon--YLvYVRdC{margin-right:12px;font-size:14px;color:#abaab7}.text--PwKz_ODc{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.link--sJDeRfjL:not(.disabled--UpGab11N):hover,\n.item--B4GvcxMx.active--DwuLIQY_ .link--sJDeRfjL{background-color:rgba(255,255,255,0.2)}.item--B4GvcxMx.active--DwuLIQY_ .link--sJDeRfjL{font-size:14px;color:#424a58;padding-right:16px}.completed--ZPZ8DEeN .icon--YLvYVRdC{color:#0fbe59}.failed--dxvB8UKT .icon--YLvYVRdC{color:#f24c25}.working--IbqFvpPm .icon--YLvYVRdC{color:var(--elevo-color-brand)}.input-required--zcO5ZufK .icon--YLvYVRdC{color:#12aacc}.canceled--GqvLm_YF .icon--YLvYVRdC{color:#fcaa07}@media (max-height: 639px){.container--nviLvTo4{padding:0}}@media (max-width: 719px){.container--nviLvTo4{display:none}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"container\": `container--nviLvTo4`,\n\t\"nav\": `nav--lm9zwHhG`,\n\t\"link\": `link--sJDeRfjL`,\n\t\"disabled\": `disabled--UpGab11N`,\n\t\"item\": `item--B4GvcxMx`,\n\t\"icon\": `icon--YLvYVRdC`,\n\t\"text\": `text--PwKz_ODc`,\n\t\"active\": `active--DwuLIQY_`,\n\t\"completed\": `completed--ZPZ8DEeN`,\n\t\"failed\": `failed--dxvB8UKT`,\n\t\"working\": `working--IbqFvpPm`,\n\t\"input-required\": `input-required--zcO5ZufK`,\n\t\"canceled\": `canceled--GqvLm_YF`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","export const DEFAULT_SCALE_RANGE_MIN = 0.5;\nexport const DEFAULT_SCALE_RANGE_MAX = 2;\nexport const START_NODE_ID = \"<START>\";\nexport const END_NODE_ID = \"<END>\";\nexport const FEEDBACK_NODE_ID = \"<FEEDBACK>\";\nexport const REQUIREMENT_NODE_ID = \"<REQUIREMENT>\";\nexport const LOADING_NODE_ID = \"<LOADING>\";\nexport const CANVAS_PADDING_TOP = 20;\nexport const CANVAS_PADDING_RIGHT = 20;\n// 20 + 48 + 8 + 26 + 20\nexport const CANVAS_PADDING_BOTTOM = 122;\nexport const CANVAS_PADDING_LEFT = 160;\nexport const RANK_SEP = 40;\nexport const NODE_SEP = 42;\nexport const EDGE_SEP = 10;\n\n// istanbul ignore next\nexport const IS_MAC = /mac/i.test(\n (\n navigator as Navigator & {\n userAgentData?: {\n platform: string;\n };\n }\n ).userAgentData?.platform ??\n navigator.platform ??\n navigator.userAgent\n);\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.topology--H9SWG_Xt{color:#666;position:relative}.topology--H9SWG_Xt:not(.auto-size--We2YyP9m) eo-display-canvas{height:500px}.toolbar--l7OnuKQT{right:20px;bottom:20px}.topology--H9SWG_Xt:not(:hover) .toolbar--l7OnuKQT{display:none}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"topology\": `topology--H9SWG_Xt`,\n\t\"auto-size\": `auto-size--We2YyP9m`,\n\t\"toolbar\": `toolbar--l7OnuKQT`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.loading--LlSQxd6c{width:24px;height:24px;display:flex;align-items:center;justify-content:center;background:rgba(69,94,255,0.5);border-radius:24px;animation:loading--LlSQxd6c 1s infinite linear}.inner--I4b7rAPw{width:12px;height:12px;background:rgb(69,94,255);border-radius:12px}@keyframes loading--LlSQxd6c{0%{transform:scale(1);opacity:1}100%{transform:scale(1.5);opacity:0}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"loading\": `loading--LlSQxd6c`,\n\t\"inner\": `inner--I4b7rAPw`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeRequirement.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeRequirement.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React, { useMemo } from \"react\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport { auth } from \"@next-core/easyops-runtime\";\nimport type {\n EoEasyopsAvatar,\n EoEasyopsAvatarProps,\n} from \"@next-bricks/basic/easyops-avatar\";\nimport moment from \"moment\";\nimport classNames from \"classnames\";\nimport styles from \"./NodeRequirement.module.css\";\n\nconst WrappedEasyOpsAvatar = wrapBrick<EoEasyopsAvatar, EoEasyopsAvatarProps>(\n \"eo-easyops-avatar\"\n);\n\nexport interface NodeRequirementProps {\n content?: string;\n startTime?: number;\n active?: boolean;\n}\n\nexport function NodeRequirement({\n content,\n startTime,\n active,\n}: NodeRequirementProps): JSX.Element {\n const username = useMemo(() => {\n return auth.getAuth().username;\n }, []);\n\n return (\n <div\n className={classNames(styles[\"node-requirement\"], {\n [styles.active]: active,\n })}\n >\n <div className={styles.heading}>\n <WrappedEasyOpsAvatar\n className={styles.avatar}\n nameOrInstanceId={username}\n showName\n size=\"xs\"\n />\n <div className={styles.time}>\n {startTime && moment(startTime * 1000).format(\"MM-DD HH:mm\")}\n </div>\n </div>\n <div className={styles.body}>{content}</div>\n </div>\n );\n}\n","import React from \"react\";\nimport { asyncWrapBrick } from \"@next-core/react-runtime\";\n\ninterface CMDBSelectProps {\n objectId?: string | null;\n fieldId?: string | null;\n objectList?: any[] | null;\n}\n\ninterface CMDBSelectEvents {\n \"cmdb.instance.form.change.v2\": CustomEvent<any[]>;\n}\n\ninterface CMDBSelectEvensMapping {\n onChangeV2: \"cmdb.instance.form.change.v2\";\n}\n\nexport const AsyncWrappedCMDB = React.lazy(async () => ({\n default: await asyncWrapBrick<\n HTMLElement,\n CMDBSelectProps,\n CMDBSelectEvents,\n CMDBSelectEvensMapping\n >(\"cmdb-instances.cmdb-instances-input-form\", {\n onChangeV2: \"cmdb.instance.form.change.v2\",\n }),\n}));\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./HumanConfirm.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./HumanConfirm.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React, { useContext } from \"react\";\nimport styles from \"./HumanConfirm.module.css\";\nimport { K, t } from \"../i18n.js\";\nimport { WrappedButton } from \"../../shared/bricks\";\nimport { TaskContext } from \"../../shared/TaskContext\";\n\nexport function HumanConfirm({\n jobId,\n confirmText,\n cancelText,\n}: {\n jobId: string;\n confirmText?: string;\n cancelText?: string;\n}): JSX.Element {\n const { humanInput } = useContext(TaskContext);\n\n return (\n <div className={styles[\"human-confirm\"]}>\n <WrappedButton\n type=\"primary\"\n themeVariant=\"elevo\"\n shape=\"round\"\n onClick={() => {\n humanInput(jobId, confirmText || t(K.YES));\n }}\n >\n {confirmText || t(K.YES)}\n </WrappedButton>\n <WrappedButton\n type=\"text\"\n themeVariant=\"elevo\"\n onClick={() => {\n humanInput(jobId, cancelText || t(K.NO));\n }}\n style={{ marginLeft: \"0.5em\" }}\n >\n {cancelText || t(K.NO)}\n </WrappedButton>\n </div>\n );\n}\n","import React, { useMemo } from \"react\";\nimport type { Job } from \"../interfaces\";\nimport styles from \"../NodeJob/NodeJob.module.css\";\n\nexport interface HumanAdjustPlanResultProps {\n job: Job;\n}\n\nexport function HumanAdjustPlanResult({\n job,\n}: HumanAdjustPlanResultProps): JSX.Element {\n const response = useMemo(() => {\n const msg = job.messages?.find((msg) => {\n return msg.role === \"tool\";\n });\n if (msg) {\n const text = msg.parts?.find((part) => part.type === \"text\")?.text;\n if (text) {\n try {\n return JSON.parse(text) as { type: \"plan\"; steps: string[] };\n } catch {\n // Fallback to original text\n }\n }\n }\n return null;\n }, [job.messages]);\n\n if (response?.type === \"plan\" && Array.isArray(response.steps)) {\n return (\n <div className={`${styles.message} ${styles[\"role-user\"]}`}>\n <ol\n style={{\n paddingLeft: `${Math.floor(Math.log10(response.steps.length + 1)) * 0.5 + 1.5}em`,\n }}\n >\n {response.steps.map((step, index) => (\n <li key={index}>{step}</li>\n ))}\n </ol>\n </div>\n );\n }\n\n return (\n <div className={`${styles.message} ${styles[\"role-user\"]}`}>\n Something went wrong.\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FileList.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FileList.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useContext } from \"react\";\nimport classNames from \"classnames\";\nimport type { FileInfo } from \"../interfaces\";\nimport styles from \"./FileList.module.css\";\nimport { K, t } from \"../i18n\";\nimport { CanvasContext } from \"../CanvasContext\";\nimport { formatFileSize, getFileTypeAndIcon } from \"../utils/file\";\n\nexport interface FileListProps {\n files: FileInfo[];\n large?: boolean;\n}\n\nexport function FileList({ files, large }: FileListProps) {\n const { setActiveFile } = useContext(CanvasContext);\n\n return (\n <ul className={classNames(styles.files, { [styles.large]: large })}>\n {files.map((file, index) => {\n const [type, icon] = getFileTypeAndIcon(file.mimeType, file.name);\n return (\n <li key={index}>\n <a className={styles.file} onClick={() => setActiveFile(file)}>\n <img className={styles.icon} src={icon} width={26} height={32} />\n <div className={styles.content}>\n <div className={styles.name}>{file.name || t(K.UNTITLED)}</div>\n <div className={styles.metadata}>\n {`${type}${file.size ? ` · ${formatFileSize(file.size)}` : \"\"}`}\n </div>\n </div>\n </a>\n </li>\n );\n })}\n </ul>\n );\n}\n","// istanbul ignore file: experimental\nimport React, {\n Suspense,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { TextareaAutoResize } from \"@next-shared/form\";\nimport { CmdbObjectApi_getObjectRef } from \"@next-api-sdk/cmdb-sdk\";\nimport classNames from \"classnames\";\nimport moment from \"moment\";\nimport { handleHttpError } from \"@next-core/runtime\";\nimport styles from \"./NodeJob.module.css\";\nimport sharedStyles from \"../shared.module.css\";\nimport type { CmdbInstanceDetailData, FileInfo, Job } from \"../interfaces\";\nimport { K, t } from \"../i18n.js\";\nimport { AsyncWrappedCMDB } from \"../cmdb.js\";\nimport { WrappedButton, WrappedIcon } from \"../../shared/bricks\";\nimport { HumanConfirm } from \"../HumanConfirm/HumanConfirm.js\";\nimport { HumanAdjustPlan } from \"../../shared/HumanAdjustPlan/HumanAdjustPlan\";\nimport { ToolCallStatus } from \"../ToolCallStatus/ToolCallStatus.js\";\nimport { HumanAdjustPlanResult } from \"../HumanAdjustPlanResult/HumanAdjustPlanResult.js\";\nimport { Topology } from \"../Topology/Topology\";\nimport { EnhancedMarkdown } from \"../EnhancedMarkdown/EnhancedMarkdown\";\nimport { CmdbInstanceDetail } from \"../CmdbInstanceDetail/CmdbInstanceDetail\";\nimport { FileList } from \"../FileList/FileList\";\nimport { TaskContext } from \"../../shared/TaskContext\";\n\n// 当 markdown 中包含超过 4 列的表格时,对节点使用大尺寸样式\nconst RegExpLargeTableInMarkdown = /^\\s*\\|(?:\\s*:?-+:?\\s*\\|){4,}\\s*$/m;\n\nexport interface NodeJobProps {\n job: Job;\n state?: string;\n active?: boolean;\n}\n\nexport function NodeJob({ job, state, active }: NodeJobProps): JSX.Element {\n const toolTitle = job.toolCall?.annotations?.title;\n const toolName = job.toolCall?.name;\n const askUser = toolName === \"ask_human\";\n const askUserPlan = toolName === \"ask_human_confirming_plan\";\n const generalAskUser = askUser || askUserPlan;\n const knownAskUser =\n (askUser &&\n [\n \"ask_user_more\",\n \"ask_user_confirm\",\n \"ask_user_choose\",\n \"ask_user_select_from_cmdb\",\n ].includes(job.toolCall!.arguments?.command as string)) ||\n askUserPlan;\n const loading = state === \"working\" || state === \"submitted\";\n const hasGraph = !!job.componentGraph;\n\n const [\n toolMarkdownContent,\n humanAnswer,\n cmdbInstanceDetails,\n files,\n sizeLarge,\n ] = useMemo(() => {\n const contents: string[] = [];\n let humanAnswer: string | undefined;\n const instanceDetails: CmdbInstanceDetailData[] = [];\n const files: FileInfo[] = [];\n let large = toolName === \"llm_answer\";\n job.messages?.forEach((message) => {\n if (message.role === \"tool\") {\n for (const part of message.parts) {\n if (part.type === \"data\") {\n switch (part.data?.type) {\n case \"markdown\":\n contents.push(part.data.content);\n break;\n case \"cmdb_instance_detail\":\n instanceDetails.push(part.data as CmdbInstanceDetailData);\n if (!large) {\n large =\n Object.keys(\n part.data?.outputSchema?.type === \"object\"\n ? part.data.outputSchema.properties\n : part.data.detail\n ).length > 6;\n }\n break;\n }\n } else if (part.type === \"file\") {\n files.push(part.file);\n } else if (part.type === \"text\" && askUser) {\n try {\n humanAnswer = JSON.parse(part.text).human_answer as string;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to parse human answer:\", error);\n }\n }\n }\n }\n });\n\n const markdownContent = contents.join(\"\");\n\n large = large || RegExpLargeTableInMarkdown.test(markdownContent);\n\n return [\n markdownContent,\n humanAnswer,\n instanceDetails,\n files,\n large,\n ] as const;\n }, [askUser, job.messages, toolName]);\n\n return (\n <div\n className={classNames(styles[\"node-job\"], {\n [styles.error]: job.isError,\n [styles[\"ask-user\"]]: generalAskUser,\n [styles[\"fit-content\"]]: hasGraph,\n [styles.active]: active,\n [styles.large]: sizeLarge,\n })}\n >\n <div className={styles.background} />\n <div className={styles.heading}>\n {generalAskUser ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"fas\"\n // icon=\"person-circle-question\"\n icon=\"user-check\"\n />\n ) : job.toolCall ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"tool\"\n />\n ) : (\n <WrappedIcon className={styles.icon} lib=\"easyops\" icon=\"robot\" />\n )}\n <div\n className={classNames(styles.tool, {\n [sharedStyles[\"shine-text\"]]: loading,\n })}\n >\n {toolTitle || (toolName ? t(K[toolName as K]) || toolName : \"Elevo\")}\n </div>\n <div className={styles.time}>\n {job.startTime && moment(job.startTime * 1000).format(\"MM-DD HH:mm\")}\n </div>\n </div>\n <div\n className={classNames(styles.body, {\n // [styles.scrollable]: !generalAskUser && !experimental_showTables,\n })}\n >\n {knownAskUser ? (\n <>\n {(askUserPlan || !!job.toolCall!.arguments?.question) && (\n <div\n className={`${styles.message} ${sharedStyles.markdown} ${styles[\"role-assistant\"]}`}\n >\n <EnhancedMarkdown\n content={\n askUserPlan\n ? t(K.CONFIRMING_PLAN_TIPS)\n : (job.toolCall!.arguments?.question as string)\n }\n />\n </div>\n )}\n {state === \"input-required\" &&\n (job.toolCall!.arguments!.command === \"ask_user_more\" ? (\n <HumanInputComponent jobId={job.id} />\n ) : job.toolCall!.arguments!.command === \"ask_user_confirm\" ? (\n <HumanConfirm\n jobId={job.id}\n confirmText={job.toolCall!.arguments!.confirm_text as string}\n cancelText={job.toolCall!.arguments!.cancel_text as string}\n />\n ) : job.toolCall!.arguments!.command === \"ask_user_choose\" ? (\n <HumanChooseComponent\n jobId={job.id}\n options={job.toolCall!.arguments!.options as string[]}\n />\n ) : job.toolCall!.arguments!.command ===\n \"ask_user_select_from_cmdb\" ? (\n <HumanSelectFromCmdb\n jobId={job.id}\n objectId={job.toolCall!.arguments!.objectId as string}\n attrId={job.toolCall!.arguments!.attrId as string}\n />\n ) : askUserPlan ? (\n <HumanAdjustPlan\n jobId={job.id}\n steps={job.toolCall!.arguments!.steps as string[]}\n />\n ) : null)}\n </>\n ) : null}\n {!generalAskUser && job.toolCall && <ToolCallStatus job={job} />}\n {askUserPlan && state === \"completed\" ? (\n <HumanAdjustPlanResult job={job} />\n ) : (\n job.messages?.map((message, index) =>\n message.role === \"tool\" && !generalAskUser ? null : (\n <div\n key={index}\n className={classNames(styles.message, sharedStyles.markdown, {\n [styles[\"role-user\"]]:\n message.role === \"tool\" || message.role === \"user\",\n })}\n >\n {message.role === \"tool\" && askUser\n ? humanAnswer\n : message.parts?.map((part, partIndex) => (\n <React.Fragment key={partIndex}>\n {part.type === \"text\" && (\n <EnhancedMarkdown content={part.text} />\n )}\n </React.Fragment>\n ))}\n </div>\n )\n )\n )}\n {toolMarkdownContent && (\n <div\n className={classNames(styles.message, sharedStyles.markdown)}\n style={{ padding: \"0 8px\" }}\n >\n <EnhancedMarkdown content={toolMarkdownContent} />\n </div>\n )}\n {cmdbInstanceDetails.map((detail, index) => (\n <CmdbInstanceDetail key={index} {...detail} />\n ))}\n {hasGraph && !job.componentGraph!.initial && (\n <Topology\n componentGraph={job.componentGraph!}\n filter=\"minimal\"\n autoSize\n />\n )}\n {files.length > 0 && <FileList files={files} large={sizeLarge} />}\n </div>\n </div>\n );\n}\n\nfunction HumanInputComponent({ jobId }: { jobId: string }): JSX.Element {\n const containerRef = useRef<HTMLDivElement>(null);\n const { humanInput } = useContext(TaskContext);\n\n return (\n <div ref={containerRef}>\n <TextareaAutoResize\n className={styles[\"human-input\"]}\n containerRef={containerRef}\n autoResize\n minRows={2}\n borderSize={0}\n paddingSize={20}\n placeholder={t(K.TYPE_YOUR_MESSAGE_HERE)}\n submitWhen=\"enter-without-shift\"\n onSubmit={(e) => {\n const input = e.currentTarget.value;\n if (input) {\n humanInput(jobId, input);\n }\n }}\n />\n </div>\n );\n}\n\nfunction HumanChooseComponent({\n jobId,\n options,\n}: {\n jobId: string;\n options?: string[];\n}): JSX.Element {\n const { humanInput } = useContext(TaskContext);\n\n return (\n <div\n style={{\n marginTop: \"1em\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.5em\",\n }}\n >\n {options?.map((option, index) => (\n <WrappedButton\n key={index}\n themeVariant=\"elevo\"\n onClick={() => {\n humanInput(jobId, option);\n }}\n >\n {option}\n </WrappedButton>\n ))}\n </div>\n );\n}\n\nfunction HumanSelectFromCmdb({\n jobId,\n objectId,\n attrId,\n}: {\n jobId: string;\n objectId?: string;\n attrId?: string;\n}): JSX.Element {\n const { humanInput } = useContext(TaskContext);\n const [objectList, setObjectList] = useState<any[] | null>(null);\n\n useEffect(() => {\n if (!objectId) {\n return;\n }\n let ignore = false;\n (async () => {\n try {\n const objects = (\n await CmdbObjectApi_getObjectRef({ ref_object: objectId })\n ).data;\n if (!ignore) {\n setObjectList(objects);\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"Fetch object list failed:\", e);\n handleHttpError(e);\n }\n })();\n return () => {\n ignore = true;\n };\n }, [objectId]);\n\n if (!objectId) {\n return (\n <div style={{ marginTop: \"1em\" }}>\n Can not call ask_user_select_from_cmdb without objectId\n </div>\n );\n }\n // if (!objectId || !attrId) {\n // return <div style={{ marginTop: \"1em\" }}>Can not call ask_user_select_from_cmdb without {!objectId ? \"objectId\" : \"attrId\"}</div>;\n // }\n\n const fieldId =\n !attrId || (attrId === \"instanceId\" && objectId === \"HOST\") ? \"ip\" : attrId;\n\n return (\n <div style={{ marginTop: \"1em\" }}>\n <Suspense>\n <AsyncWrappedCMDB\n objectList={objectList}\n objectId={objectId}\n fieldId={fieldId}\n onChangeV2={(e) => {\n if (!e.detail.length) {\n return;\n }\n humanInput(\n jobId,\n e.detail.map((i) => i[fieldId /* ?? \"instanceId\" */]).join(\"\\n\")\n );\n }}\n />\n </Suspense>\n </div>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"./images/background.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `ai-portal\\\\.cruise-canvas{display:block;position:relative;width:100%;height:100%;overflow:hidden;background-color:rgb(205,206,207);background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});background-size:cover;background-repeat:no-repeat;background-position:center;background-attachment:fixed;color:#262626;--cruise-canvas-node-border:1px solid gray;--cruise-canvas-node-width-small:330px;--cruise-canvas-node-width-medium:453px;--cruise-canvas-node-width-large:800px;--cruise-canvas-primary-color:var(--elevo-color-brand);--cruise-canvas-input-background:rgba(255,255,255,0.8);--cruise-canvas-input-box-shadow:0px 1px 0px 0px #ffffff,inset 0px 2px 4px 0px #b3bcf9}.root--z6jdb_BU{width:100%;height:100%;position:relative}.widgets--r6lUPOu2{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;-webkit-user-select:none;user-select:none}.root--z6jdb_BU.loading--m5r507Hp .canvas--u6C26uH_,\n.root--z6jdb_BU.loading--m5r507Hp + .widgets--r6lUPOu2{visibility:hidden}.loading-icon--UkRBMlBy{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:48px;color:#fff}.widgets--r6lUPOu2 > *{pointer-events:auto;-webkit-user-select:text;user-select:text}.canvas--u6C26uH_,\n.edges--uNPQGWZg{width:100%;height:100%;position:absolute;transform-origin:0% 0%;-webkit-user-select:none;user-select:none}.node--IBGywwp4{position:absolute;-webkit-user-select:text;user-select:text;cursor:auto}.node--IBGywwp4:not(.ready--pmh440go),\n.canvas--u6C26uH_:not(.ready--pmh440go) > .edges--uNPQGWZg{visibility:hidden}svg.edges--uNPQGWZg{pointer-events:none;overflow:visible}.edge--muRUWYG1{fill:none;stroke-width:2px;stroke:rgba(255,255,255,0.6);stroke-dasharray:5,5}.go-back--myNmSpSv{position:absolute;top:20px;left:20px}.go-back--myNmSpSv::part(link){width:32px;height:32px;display:flex;justify-content:center;align-items:center;background:rgba(255,255,255,0.7);box-shadow:0px 3px 14px 0px rgba(0,0,0,0.1),0px 1px 4px 0px rgba(0,0,0,0.06);border-radius:8px;border:1px solid rgba(255,255,255,0.3);color:inherit;box-sizing:border-box}.go-back--myNmSpSv::part(link):hover{background:rgba(255,255,255,0.5)}.go-back--myNmSpSv::part(link):active{background:rgba(255,255,255,0.3)}.footer-container--sTjEGP7I{position:absolute;bottom:28px;left:50%;transform:translate(-50%,0);width:var(--cruise-canvas-node-width-large);max-width:80%}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"root\": `root--z6jdb_BU`,\n\t\"widgets\": `widgets--r6lUPOu2`,\n\t\"loading\": `loading--m5r507Hp`,\n\t\"canvas\": `canvas--u6C26uH_`,\n\t\"loading-icon\": `loading-icon--UkRBMlBy`,\n\t\"edges\": `edges--uNPQGWZg`,\n\t\"node\": `node--IBGywwp4`,\n\t\"ready\": `ready--pmh440go`,\n\t\"edge\": `edge--muRUWYG1`,\n\t\"go-back\": `go-back--myNmSpSv`,\n\t\"footer-container\": `footer-container--sTjEGP7I`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeStart.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeStart.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React from \"react\";\nimport styles from \"./NodeStart.module.css\";\n\nexport function NodeStart(): JSX.Element {\n return (\n <div className={styles[\"node-start\"]}>\n <div className={styles.icon} />\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeJob.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeJob.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./styles.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./styles.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ZoomBar.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ZoomBar.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React, { useCallback } from \"react\";\nimport type { GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport styles from \"./ZoomBar.module.css\";\nimport toolbarStyles from \"../toolbar.module.css\";\nimport { WrappedIconButton } from \"../../shared/bricks\";\nimport { K, t } from \"../i18n\";\n\nconst ICON_BACK_TO_CENTER: GeneralIconProps = {\n lib: \"easyops\",\n icon: \"back-to-center\",\n};\nconst ICON_ZOOM_OUT: GeneralIconProps = {\n lib: \"antd\",\n icon: \"minus-circle\",\n};\nconst ICON_ZOOM_IN: GeneralIconProps = {\n lib: \"antd\",\n icon: \"plus-circle\",\n};\n\nexport interface ZoomBarProps {\n scale: number;\n onScaleChange?: (scale: number) => void;\n onReCenter?: () => void;\n}\n\nexport function ZoomBar({\n scale,\n onScaleChange,\n onReCenter,\n}: ZoomBarProps): JSX.Element {\n const handleZoomIn = useCallback(() => {\n onScaleChange?.(scale + 0.1);\n }, [onScaleChange, scale]);\n\n const handleZoomOut = useCallback(() => {\n onScaleChange?.(scale - 0.1);\n }, [onScaleChange, scale]);\n\n return (\n <div className={`${toolbarStyles.toolbar} ${styles[\"zoom-bar\"]}`}>\n <WrappedIconButton\n variant=\"mini\"\n icon={ICON_BACK_TO_CENTER}\n onClick={onReCenter}\n title={t(K.BACK_TO_CENTER)}\n />\n <div className={toolbarStyles.divider}></div>\n <WrappedIconButton\n variant=\"mini\"\n icon={ICON_ZOOM_OUT}\n onClick={handleZoomOut}\n title={t(K.ZOOM_OUT)}\n />\n <WrappedIconButton\n variant=\"mini\"\n icon={ICON_ZOOM_IN}\n onClick={handleZoomIn}\n title={t(K.ZOOM_IN)}\n />\n </div>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../images/requirement@2x.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-requirement--aVjY3LFY{width:var(--cruise-canvas-node-width-medium);max-width:90vw;background-color:rgba(255,255,255,0.4);background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});background-position:center bottom;background-size:var(--cruise-canvas-node-width-medium) 128px;background-repeat:no-repeat;box-shadow:0px 4px 10px 0px rgba(54,64,80,0.18);border-radius:12px;-webkit-backdrop-filter:blur(28px);backdrop-filter:blur(28px);border:1px solid rgba(255,255,255,0.4);padding:8px;white-space:pre-wrap;position:relative}.node-requirement--aVjY3LFY.active--aEZLkOZe{border-color:#a1b5ff}.heading--F8b1aIJT{display:flex;align-items:center;margin-bottom:11px;font-size:13px}.avatar--BbtS9D46{flex:1;min-width:0}.avatar--BbtS9D46::part(avatar){border:1px solid #fff}.time--IRwoiblW{color:#8c8c8c}.body--JYv_r9n_{background:#f1f6ff;box-shadow:0px 1px 0px 0px #ffffff;border-radius:9px;padding:15px 10px;overflow-wrap:break-word}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-requirement\": `node-requirement--aVjY3LFY`,\n\t\"active\": `active--aEZLkOZe`,\n\t\"heading\": `heading--F8b1aIJT`,\n\t\"avatar\": `avatar--BbtS9D46`,\n\t\"time\": `time--IRwoiblW`,\n\t\"body\": `body--JYv_r9n_`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { useEffect, useRef, useState, type RefObject } from \"react\";\nimport type { ZoomBehavior } from \"d3-zoom\";\nimport { mergeRects } from \"@next-shared/diagram\";\nimport type { GraphNode, ZoomAction } from \"./interfaces\";\nimport { CANVAS_PADDING_BOTTOM } from \"./constants\";\n\nexport interface UseAutoCenterOptions {\n nodes: GraphNode[];\n sizeReady: boolean;\n zoomer: ZoomBehavior<HTMLDivElement, unknown>;\n rootRef: RefObject<HTMLDivElement>;\n pushZoomTransition: (action: ZoomAction) => void;\n}\n\nexport function useAutoCenter({\n nodes,\n sizeReady,\n zoomer,\n rootRef,\n pushZoomTransition,\n}: UseAutoCenterOptions) {\n const [centered, setCentered] = useState(false);\n const reCenterRef = useRef(false);\n\n // Transform to horizontal center once.\n useEffect(() => {\n const root = rootRef.current;\n if (sizeReady && root && !centered && nodes.length > 0) {\n const {\n x: left,\n y: top,\n width,\n height,\n } = mergeRects(nodes.map((node) => node.view!));\n const right = left + width;\n const bottom = top + height;\n\n const x = (root.clientWidth - (right + left)) / 2;\n let y = 30;\n if (reCenterRef.current) {\n const height = bottom - top + CANVAS_PADDING_BOTTOM;\n const diffY = height - root.clientHeight;\n if (diffY > 0) {\n y = -diffY - top;\n } else {\n y = (root.clientHeight - (bottom + top)) / 2;\n }\n }\n pushZoomTransition({\n transform: { k: 1, x, y },\n duration: reCenterRef.current ? undefined : 0,\n });\n setCentered(true);\n }\n\n reCenterRef.current = false;\n }, [centered, nodes, rootRef, sizeReady, zoomer, pushZoomTransition]);\n\n return { centered, setCentered, reCenterRef };\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeEnd.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeEnd.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React, { useContext } from \"react\";\nimport styles from \"./NodeEnd.module.css\";\nimport { K, t } from \"../i18n\";\nimport { WrappedIcon } from \"../../shared/bricks\";\nimport { TaskContext } from \"../../shared/TaskContext\";\n\nexport function NodeEnd(): JSX.Element {\n const { onShare } = useContext(TaskContext);\n\n return (\n <div className={styles[\"node-end\"]}>\n <div className={styles.content}>\n <span className={styles.icon}>\n <WrappedIcon lib=\"fa\" prefix=\"fas\" icon=\"check\" />\n </span>\n <span className={styles.text}>{t(K.TASK_COMPLETED)}</span>\n </div>\n <button className={styles.button} onClick={onShare}>\n {t(K.SHARE)}\n </button>\n </div>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.topology-node{padding:5px;font-size:24px;width:34px;height:34px}.topology-node eo-icon{display:block}.topology-node-trouble{color:var(--color-warning)}.topology-node-ok{color:var(--color-success)}.topology-node-label{position:absolute;bottom:-20px;left:50%;transform:translate(-50%,0);font-size:14px;line-height:16px;background:#fff;padding:0 2px 2px;border-radius:4px;max-width:124px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.human-confirm--pILwNVPH{display:flex;justify-content:center;align-items:center;padding:24px 12px;background:rgba(62,67,102,0.05);box-shadow:0px 1px 0px 0px rgba(255,255,255,0.5);border-radius:9px}.human-confirm--pILwNVPH:not(:first-child){margin-top:6px}.human-confirm--pILwNVPH > * + *{margin-left:8px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"human-confirm\": `human-confirm--pILwNVPH`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeLoading.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeLoading.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React from \"react\";\nimport styles from \"./NodeLoading.module.css\";\n\nexport function NodeLoading(): JSX.Element {\n return (\n <div className={styles.loading}>\n <div className={styles.inner} />\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./Nav.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./Nav.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useEffect, useMemo, useRef } from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./Nav.module.css\";\nimport type {\n GraphNavItem,\n Job,\n JobState,\n Step,\n TaskState,\n} from \"../interfaces\";\nimport { WrappedIcon } from \"../../shared/bricks\";\nimport { DONE_STATES } from \"../../shared/constants\";\n\nexport interface NavProps {\n nav: GraphNavItem[] | undefined;\n plan: Step[] | undefined;\n jobs: Job[] | undefined;\n jobLevels: Map<string, number> | undefined;\n currentNavId: string | null;\n taskState: TaskState | undefined;\n onClick: (jobId: string) => void;\n}\n\ninterface MergedNavItem extends Omit<GraphNavItem, \"state\"> {\n disabled?: boolean;\n state?: JobState;\n}\n\nexport function Nav({\n nav,\n plan,\n jobs,\n jobLevels,\n currentNavId,\n taskState,\n onClick,\n}: NavProps) {\n const mergedNav = useMemo<MergedNavItem[] | undefined>(() => {\n const unmatchedSteps = plan?.filter(\n (step) => !nav?.find((job) => job.id === step.id)\n );\n\n if (!unmatchedSteps?.length) {\n return nav;\n }\n\n // For the steps in plan that are not matched in nav,\n // We need to insert them into the nav at the correct position\n const insertsBefore = new Map<string | null, Step[]>();\n let cursor: string | null = null;\n\n for (let index = plan!.length - 1; index >= 0; index--) {\n const step = plan![index];\n if (unmatchedSteps.includes(step)) {\n let list = insertsBefore.get(cursor);\n if (!list) {\n insertsBefore.set(cursor, (list = []));\n }\n list.unshift(step);\n } else {\n cursor = step.id;\n }\n }\n\n const fixedNav = nav ?? [];\n const mergedNav: MergedNavItem[] = [...fixedNav];\n for (const [cursor, steps] of insertsBefore.entries()) {\n const cursorIndex =\n cursor === null\n ? mergedNav.length\n : mergedNav.findIndex((item) => item.id === cursor);\n\n // If the next step state is done, mark the inserted plan steps as skipped\n const nextStep = mergedNav[cursorIndex];\n const skipped = DONE_STATES.includes(nextStep?.state || \"unknown\");\n\n mergedNav.splice(\n cursorIndex,\n 0,\n ...steps.map<MergedNavItem>((step) => {\n const job = jobs?.find((job) => job.id === step.id);\n const level = jobLevels?.get(step.id);\n return {\n id: step.id,\n title: step.instruction,\n state: job?.state ?? (skipped ? \"skipped\" : undefined),\n level: level ?? 0,\n disabled: true,\n };\n })\n );\n }\n\n return mergedNav;\n }, [nav, plan, jobs, jobLevels]);\n\n const ref = useRef<HTMLUListElement>(null);\n useEffect(() => {\n const nav = ref.current;\n if (!nav || !currentNavId) {\n return;\n }\n nav.querySelector(`[data-job-id=\"${currentNavId}\"]`)?.scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n });\n }, [currentNavId]);\n\n useEffect(() => {\n const nav = ref.current;\n if (!nav || currentNavId) {\n return;\n }\n\n const lastActiveItem = mergedNav?.findLast(\n (item) =>\n DONE_STATES.includes(item.state || \"unknown\") ||\n item.state === \"working\" ||\n item.state === \"input-required\"\n );\n if (lastActiveItem) {\n nav\n .querySelector(`[data-job-id=\"${lastActiveItem.id}\"]`)\n ?.scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n });\n }\n }, [currentNavId, mergedNav]);\n\n return (\n <div className={styles.container}>\n <ul className={styles.nav} ref={ref}>\n {mergedNav?.map((item) => (\n <NavItem\n key={item.id}\n {...item}\n currentNavId={currentNavId}\n taskState={taskState}\n onClick={onClick}\n />\n ))}\n </ul>\n </div>\n );\n}\n\ninterface NavItemProps extends MergedNavItem {\n currentNavId: string | null;\n taskState: TaskState | undefined;\n onClick: (jobId: string) => void;\n}\n\nfunction NavItem({\n id,\n title,\n state,\n level,\n taskState,\n currentNavId,\n disabled,\n onClick,\n}: NavItemProps) {\n const { className, icon } = useMemo(() => {\n return getClassNameAndIconProps(state, taskState);\n }, [state, taskState]);\n\n return (\n <li\n className={classNames(styles.item, {\n [styles.active]: currentNavId === id,\n })}\n style={{ marginLeft: `${level * 20}px` }}\n >\n <a\n className={classNames(styles.link, className, {\n [styles.disabled]: disabled,\n })}\n data-job-id={id}\n title={title}\n onClick={() => {\n if (!disabled) {\n onClick(id);\n }\n }}\n >\n <WrappedIcon className={styles.icon} {...icon} />\n <span className={styles.text}>{title}</span>\n </a>\n </li>\n );\n}\n\nfunction getClassNameAndIconProps(\n state: JobState | undefined,\n taskState: TaskState | undefined\n) {\n switch (state) {\n case \"completed\":\n return {\n className: styles.completed,\n icon: {\n lib: \"fa\",\n prefix: \"fas\",\n icon: \"check\",\n },\n };\n case \"submitted\":\n case \"working\":\n if (taskState === \"paused\" || taskState === \"canceled\") {\n return {\n icon: {\n lib: \"fa\",\n prefix: \"far\",\n icon: taskState === \"paused\" ? \"circle-pause\" : \"circle-stop\",\n },\n };\n }\n return {\n className: styles.working,\n icon: {\n lib: \"antd\",\n theme: \"outlined\",\n icon: \"loading-3-quarters\",\n spinning: true,\n },\n };\n case \"input-required\":\n return {\n className: styles[\"input-required\"],\n icon: {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"circle-user\",\n },\n };\n case \"failed\":\n return {\n className: styles.failed,\n icon: {\n lib: \"fa\",\n prefix: \"fas\",\n icon: \"xmark\",\n },\n };\n case \"canceled\":\n return {\n className: styles.canceled,\n icon: {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"circle-stop\",\n },\n };\n case \"skipped\":\n return {\n icon: {\n lib: \"fa\",\n prefix: \"fas\",\n icon: \"ban\",\n },\n };\n default:\n return {\n icon: {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"clock\",\n },\n };\n }\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeInstruction.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeInstruction.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./NodeInstruction.module.css\";\nimport sharedStyles from \"../shared.module.css\";\n\nexport interface NodeInstructionProps {\n content?: string;\n loading?: boolean;\n}\n\nexport function NodeInstruction({\n content,\n loading,\n}: NodeInstructionProps): JSX.Element {\n return (\n <div className={styles[\"node-instruction\"]}>\n <div\n className={classNames(styles.text, {\n [sharedStyles[\"shine-text\"]]: loading,\n })}\n title={content}\n >\n {content}\n </div>\n </div>\n );\n}\n","import { maxBy, minBy } from \"lodash\";\nimport type { GraphNode, NodePosition, NodeRect } from \"../interfaces\";\nimport { IS_MAC } from \"../constants\";\n\nexport type KeyboardAction =\n | KeyboardActionSwitchActiveNode\n | KeyboardActionEnter\n | KeyboardActionScroll;\n\nexport interface KeyboardActionSwitchActiveNode {\n action: \"switch-active-node\";\n node: GraphNode | null;\n}\n\nexport interface KeyboardActionEnter {\n action: \"enter\";\n node: GraphNode;\n}\n\nexport interface KeyboardActionScroll {\n action: \"scroll\";\n direction: \"up\" | \"down\" | \"left\" | \"right\";\n range: \"line\" | \"page\" | \"document\";\n node?: undefined;\n}\n\n/**\n * Keyboard navigation:\n * - When no node is active, simulate browser page scrolling shortcuts:\n * - Space: scroll down (or up with shift) by page\n * - Arrow keys: scroll by line in the direction of the arrow\n * - Arrow up/down with ⌘ on Mac: scroll to top/bottom of document\n * - Home/end: scroll to top/bottom of document\n * - When a node is active:\n * - Arrow keys: switch active node in the direction of the arrow\n * - Arrow up/down with ⌘ on Mac: switch active node to the top/bottom most node\n * - Escape: clear active node\n * - Enter: Enter the detail of the active node\n */\nexport function handleKeyboardNav(\n event: KeyboardEvent,\n {\n activeNodeId,\n nodes,\n }: {\n activeNodeId: string | null;\n nodes: GraphNode[];\n }\n): KeyboardAction | undefined {\n if (event.ctrlKey || event.altKey) {\n return;\n }\n\n const activeNode = activeNodeId\n ? nodes.find((node) => node.id === activeNodeId)\n : null;\n\n const key = event.key;\n\n if (!activeNode) {\n if (key === \" \" && !event.metaKey) {\n return {\n action: \"scroll\",\n direction: event.shiftKey ? \"down\" : \"up\",\n range: \"page\",\n };\n }\n\n if (event.shiftKey || (!IS_MAC && event.metaKey)) {\n return;\n }\n\n switch (key) {\n case \"Home\":\n return {\n action: \"scroll\",\n direction: \"up\",\n range: \"document\",\n };\n case \"End\":\n return {\n action: \"scroll\",\n direction: \"down\",\n range: \"document\",\n };\n case \"ArrowUp\":\n case \"ArrowDown\": {\n const direction = key === \"ArrowUp\" ? \"up\" : \"down\";\n if (event.metaKey) {\n return {\n action: \"scroll\",\n direction,\n range: \"document\",\n };\n }\n return {\n action: \"scroll\",\n direction,\n range: \"line\",\n };\n }\n case \"ArrowLeft\":\n case \"ArrowRight\":\n if (!event.metaKey) {\n return {\n action: \"scroll\",\n direction: key === \"ArrowLeft\" ? \"left\" : \"right\",\n range: \"line\",\n };\n }\n }\n\n // Move up or down by arrow keys\n\n return;\n }\n\n if (event.shiftKey || (!IS_MAC && event.metaKey)) {\n return;\n }\n\n const moveOnAxis = (axis: \"x\" | \"y\", direction: 1 | -1) => {\n if (event.metaKey && axis === \"x\") {\n return;\n }\n const oppositeAxis = axis === \"x\" ? \"y\" : \"x\";\n const activePosition = getCenterPosition(activeNode.view!);\n const candidates = nodes.filter((node) => {\n let diff: number;\n let position: NodePosition;\n return (\n node !== activeNode &&\n node.type !== \"start\" &&\n node.type !== \"end\" &&\n node.type !== \"feedback\" &&\n node.type !== \"instruction\" &&\n ((position = getCenterPosition(node.view!)),\n (diff = (position[axis] - activePosition[axis]) * direction),\n diff > 0) &&\n diff > Math.abs(activePosition[oppositeAxis] - position[oppositeAxis])\n );\n });\n return (event.metaKey ? maxBy : minBy)(candidates, (node) => {\n const position = getCenterPosition(node.view!);\n return (\n (activePosition[oppositeAxis] - position[oppositeAxis]) ** 2 +\n (activePosition[axis] - position[axis]) ** 2\n );\n });\n };\n\n let node: GraphNode | undefined | null;\n let action: \"switch-active-node\" | \"enter\" | undefined;\n\n switch (key) {\n case \"ArrowLeft\":\n action = \"switch-active-node\";\n node = moveOnAxis(\"x\", -1);\n break;\n case \"ArrowUp\":\n action = \"switch-active-node\";\n node = moveOnAxis(\"y\", -1);\n break;\n case \"ArrowRight\":\n action = \"switch-active-node\";\n node = moveOnAxis(\"x\", 1);\n break;\n case \"ArrowDown\":\n action = \"switch-active-node\";\n node = moveOnAxis(\"y\", 1);\n break;\n case \"Escape\":\n action = \"switch-active-node\";\n node = null;\n break;\n case \"Enter\":\n action = \"enter\";\n node = activeNode;\n break;\n }\n\n if (action && node !== undefined) {\n return { action, node: node! };\n }\n}\n\nfunction getCenterPosition(view: NodeRect): NodePosition {\n return {\n x: view.x + view.width / 2,\n y: view.y + view.height / 2,\n };\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../images/job-background.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-job--soTYrcA7{width:var(--cruise-canvas-node-width-medium);max-width:90vw;background:linear-gradient(180deg,#f5f8ff 0%,#edf0f9 100%);box-shadow:0px 4px 10px 0px rgba(177,149,207,0.4),0px 2px 4px 0px rgba(0,0,0,0.06);border-radius:12px;border:1px solid rgba(255,255,255,0.5);padding:8px;position:relative}.node-job--soTYrcA7.active--WIcgH7xW{border-color:#a1b5ff}.background--CKldFV7M{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:12px;background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});background-repeat:no-repeat;background-position:top right;z-index:0;transition:opacity 0.15s;opacity:0}.node-job--soTYrcA7.active--WIcgH7xW .background--CKldFV7M,\n.node-job--soTYrcA7:hover .background--CKldFV7M{opacity:1}.background--CKldFV7M ~ *{position:relative;z-index:1}.fit-content--HuAZHd31{min-width:var(--cruise-canvas-node-width-medium);width:min-content}.node-job--soTYrcA7.large--bn_n8RL5{width:var(--cruise-canvas-node-width-large)}.ask-user--lf925zGf{background:rgba(255,255,255,0.4);box-shadow:0px 4px 10px 0px rgba(54,64,80,0.18);border-color:rgba(255,255,255,0.5);-webkit-backdrop-filter:blur(28px);backdrop-filter:blur(28px)}.error--IwtdD0T6{box-shadow:inset 0px 0px 8px 2px rgba(242,76,37,0.6);border-color:rgba(242,76,37,0.6)}.heading--GZqrhPqL{display:none;align-items:center;border-bottom:1px solid #e2e2ec;padding:0 5px 5px;font-size:13px;color:#8c8c8c}.icon--Rb_vveHN{margin-right:6px;font-size:14px}.tool--RR3S1Z1V{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;--shine-text-color:#8c8c8c;--shine-text-highlight-color:#dcdcdc}.time--eHXSEjt6{margin-left:6px}.body--V34MsV9R{padding:9px 4px 4px}.scrollable--LudR_5Pj{max-height:462px;overflow-y:auto}.message--iVQBlD6k:not(:first-child){margin-top:6px}.ask-user--lf925zGf .heading--GZqrhPqL{border-bottom:none}.role-assistant--Y8vd9Oms,\n.role-user--nAW4Hzsu{background:var(--cruise-canvas-input-background);border-radius:9px;border:1px solid #ccd1de;padding:6px 16px}.role-user--nAW4Hzsu{white-space:pre-wrap}.human-input--wFc6ovnT{margin-top:1em;display:block;width:100%;padding:10px 16px;color:inherit;background:var(--cruise-canvas-input-background);box-shadow:var(--cruise-canvas-input-box-shadow);border-radius:9px;border:none;font-size:14px;line-height:22px;height:64px}.human-input--wFc6ovnT:focus{outline:none}.human-input--wFc6ovnT::placeholder{color:#bfbfbf}.node-job--soTYrcA7 *::-webkit-scrollbar{width:5px;height:5px;background:transparent}.node-job--soTYrcA7 *::-webkit-scrollbar-thumb{background-color:#d8d8d8;border-radius:3px}.node-job--soTYrcA7 *::-webkit-scrollbar-track{background:transparent}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-job\": `node-job--soTYrcA7`,\n\t\"active\": `active--WIcgH7xW`,\n\t\"background\": `background--CKldFV7M`,\n\t\"fit-content\": `fit-content--HuAZHd31`,\n\t\"large\": `large--bn_n8RL5`,\n\t\"ask-user\": `ask-user--lf925zGf`,\n\t\"error\": `error--IwtdD0T6`,\n\t\"heading\": `heading--GZqrhPqL`,\n\t\"icon\": `icon--Rb_vveHN`,\n\t\"tool\": `tool--RR3S1Z1V`,\n\t\"time\": `time--eHXSEjt6`,\n\t\"body\": `body--V34MsV9R`,\n\t\"scrollable\": `scrollable--LudR_5Pj`,\n\t\"message\": `message--iVQBlD6k`,\n\t\"role-assistant\": `role-assistant--Y8vd9Oms`,\n\t\"role-user\": `role-user--nAW4Hzsu`,\n\t\"human-input\": `human-input--wFc6ovnT`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// istanbul ignore file: hard to test with d3-zoom\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { select } from \"d3-selection\";\nimport { zoom, type ZoomBehavior } from \"d3-zoom\";\nimport type {\n RangeTuple,\n TransformLiteral /* , ActiveTarget */,\n} from \"./interfaces\";\nimport {\n DEFAULT_SCALE_RANGE_MIN,\n DEFAULT_SCALE_RANGE_MAX,\n IS_MAC,\n} from \"./constants\";\n// import type { ActiveTarget } from \"./interfaces\";\nimport jobStyles from \"./NodeJob/NodeJob.module.css\";\n\nexport interface UseZoomOptions {\n rootRef: React.RefObject<HTMLDivElement>;\n zoomable?: boolean;\n scrollable?: boolean;\n pannable?: boolean;\n pannableWithCtrl?: boolean;\n scaleRange?: RangeTuple;\n manualScrolledUpRef: React.MutableRefObject<boolean>;\n onSwitchActiveTarget?(target: unknown | null): void;\n}\n\nexport interface UseZoomResult {\n grabbing: boolean;\n transform: TransformLiteral;\n transformRef: React.MutableRefObject<TransformLiteral>;\n scaleRange: RangeTuple;\n zoomer: ZoomBehavior<HTMLDivElement, unknown>;\n}\n\n// istanbul ignore next\nfunction wheelData(event: WheelEvent) {\n // On Windows with normal mouse, deltaY is too big when scroll with ctrlKey pressed,\n // which cause the zooming too fast.\n // While on mac OS, we need to keep default behavior of d3-zoom.\n return (\n -event.deltaY *\n (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) *\n (event.ctrlKey && IS_MAC ? 10 : 1)\n );\n}\n\nexport function useZoom({\n rootRef,\n zoomable,\n scrollable,\n pannable,\n pannableWithCtrl,\n scaleRange: _scaleRange,\n manualScrolledUpRef,\n onSwitchActiveTarget,\n}: UseZoomOptions): UseZoomResult {\n const [grabbing, setGrabbing] = useState(false);\n const [transform, setTransform] = useState<TransformLiteral>({\n k: 1,\n x: 0,\n y: 0,\n });\n const transformRef = useRef(transform);\n\n const scaleRange = useMemo(\n () =>\n _scaleRange ??\n ([DEFAULT_SCALE_RANGE_MIN, DEFAULT_SCALE_RANGE_MAX] as RangeTuple),\n [_scaleRange]\n );\n\n const zoomer = useMemo(\n () => zoom<HTMLDivElement, unknown>().wheelDelta(wheelData),\n []\n );\n\n // istanbul ignore next: d3-zoom currently hard to test\n useEffect(() => {\n let moved = false;\n zoomer\n .scaleExtent(zoomable ? scaleRange : [1, 1])\n .on(\"start\", () => {\n moved = false;\n setGrabbing(true);\n })\n .on(\"zoom\", (e: { transform: TransformLiteral }) => {\n moved = true;\n setTransform(e.transform);\n transformRef.current = e.transform;\n })\n .on(\"end\", () => {\n setGrabbing(false);\n if (!moved) {\n onSwitchActiveTarget?.(null);\n }\n })\n .filter(\n (event) =>\n // For wheel event, ignore d3 default behavior, because we control it manually.\n // Except for the trackpad pinch event on Mac OS (with ctrlKey).\n (event.type === \"wheel\"\n ? event.ctrlKey\n : pannableWithCtrl\n ? pannable || event.ctrlKey\n : !event.ctrlKey) && !event.button\n );\n }, [\n onSwitchActiveTarget,\n scaleRange,\n zoomable,\n zoomer,\n pannableWithCtrl,\n pannable,\n ]);\n\n useEffect(() => {\n if (pannableWithCtrl) {\n const onContextMenu = (e: MouseEvent) => {\n if (e.ctrlKey) {\n e.preventDefault();\n }\n };\n document.addEventListener(\"contextmenu\", onContextMenu, true);\n return () => {\n document.removeEventListener(\"contextmenu\", onContextMenu, true);\n };\n }\n }, [pannableWithCtrl]);\n\n // istanbul ignore next: d3-zoom currently hard to test\n useEffect(() => {\n const root = rootRef.current;\n if (!root) {\n return;\n }\n\n const rootSelection = select(root);\n\n const unsetZoom = () => {\n rootSelection\n .on(\".zoom\", null)\n .on(\".zoom.custom\", null)\n .on(\"wheel\", null);\n };\n\n if (!(zoomable || scrollable || pannable)) {\n unsetZoom();\n return;\n }\n\n if (zoomable || scrollable) {\n // Do not override default d3 zoom handler.\n // Only handles *panning*\n rootSelection.on(\n \"wheel.zoom.custom\",\n (e: WheelEvent & { wheelDeltaX: number; wheelDeltaY: number }) => {\n // Mac OS trackpad pinch event is emitted as a wheel.zoom and d3.event.ctrlKey set to true\n if (!e.ctrlKey && scrollable) {\n const node = (e.target as HTMLElement).closest(\n `.${jobStyles.body}`\n );\n if (node) {\n if (checkScrollableY(node, e.deltaY)) {\n return;\n }\n }\n\n if (e.cancelable) {\n if (e.deltaY < 0) {\n manualScrolledUpRef.current = true;\n }\n e.preventDefault();\n zoomer.translateBy(\n rootSelection,\n e.wheelDeltaX / 5,\n e.wheelDeltaY / 5\n );\n }\n }\n // zoomer.scaleBy(rootSelection, Math.pow(2, defaultWheelDelta(e)))\n }\n );\n }\n\n rootSelection\n .call(zoomer)\n .on(\"wheel\", (e: WheelEvent) => {\n if (scrollable || (zoomable && e.ctrlKey)) {\n e.preventDefault();\n }\n })\n .on(\"dblclick.zoom\", null);\n\n if (!pannable && !pannableWithCtrl) {\n rootSelection.on(\"mousedown.zoom\", null);\n }\n\n if (!pannable) {\n rootSelection\n .on(\"touchstart.zoom\", null)\n .on(\"touchmove.zoom\", null)\n .on(\"touchend.zoom\", null);\n }\n\n return unsetZoom;\n }, [\n pannableWithCtrl,\n pannable,\n rootRef,\n manualScrolledUpRef,\n scrollable,\n zoomable,\n zoomer,\n ]);\n\n return { grabbing, transform, transformRef, zoomer, scaleRange };\n}\n\n// 检查元素是否还能滚动\nfunction checkScrollableY(element: Element, delta: number) {\n if (!delta) {\n return false;\n }\n const isScrollingDown = delta > 0;\n // 还能向下滚动 或 还能向上滚动\n if (isScrollingDown) {\n const maxScroll = element.scrollHeight - element.clientHeight;\n return element.scrollTop <= maxScroll - 1;\n }\n return element.scrollTop >= 1;\n}\n\n// 检查元素是否还能滚动\n// function checkScrollableX(element: Element, delta: number) {\n// if (!delta) {\n// return false;\n// }\n// const isScrollingRight = delta > 0; // Updated variable name for clarity\n// // 还能向右滚动 或 还能向左滚动\n// if (isScrollingRight) {\n// const maxScroll = element.scrollWidth - element.clientWidth; // Changed to scrollWidth and clientWidth\n// return element.scrollLeft <= maxScroll - 1; // Changed to scrollLeft\n// }\n// return element.scrollLeft >= 1;\n// }\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./Topology.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./Topology.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport { asyncWrapBrick } from \"@next-core/react-runtime\";\nimport {\n EoDisplayCanvas,\n EoDisplayCanvasProps,\n} from \"@next-bricks/diagram/display-canvas\";\n\nexport const AsyncWrappedDisplayCanvas = React.lazy(async () => ({\n default: await asyncWrapBrick<EoDisplayCanvas, EoDisplayCanvasProps>(\n \"eo-display-canvas\"\n ),\n}));\n","import React, { useCallback, useMemo, useRef } from \"react\";\nimport type {\n EoDisplayCanvasProps,\n EoDisplayCanvas,\n} from \"@next-bricks/diagram/display-canvas\";\nimport type { GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport classNames from \"classnames\";\nimport sharedStyles from \"../shared.module.css\";\nimport toolbarStyles from \"../toolbar.module.css\";\nimport styles from \"./Topology.module.css\";\nimport nodeStyleText from \"./node.shadow.css\";\nimport { AsyncWrappedDisplayCanvas } from \"../diagram\";\nimport { WrappedIcon, WrappedIconButton } from \"../../shared/bricks\";\nimport type { ComponentGraph, RawComponentGraphNode } from \"../interfaces\";\n\nconst DEFAULT_NODE_SIZE: EoDisplayCanvasProps[\"defaultNodeSize\"] = [34, 34];\nconst CANVAS_PADDING: Required<EoDisplayCanvasProps>[\"layoutOptions\"][\"padding\"] =\n [12, 54, 34];\nconst extraStyleTexts = [nodeStyleText];\nconst ICON_EXPAND: GeneralIconProps = {\n lib: \"fa\",\n prefix: \"fas\",\n icon: \"expand\",\n};\n\nexport interface TopologyProps {\n componentGraph: ComponentGraph;\n filter?: \"all\" | \"related\" | \"minimal\";\n autoSize?: boolean;\n}\n\nexport function Topology({\n componentGraph,\n filter,\n autoSize: _autoSize,\n}: TopologyProps): JSX.Element {\n const cells = useMemo<EoDisplayCanvasProps[\"cells\"]>(() => {\n if (filter !== \"all\") {\n const nodesWithStatus = componentGraph.nodes.filter(\n (node) => !!node.data.status\n );\n const nodeIdsWithStatus = new Set(nodesWithStatus.map((node) => node.id));\n const relatedEdges = componentGraph.edges.filter(\n (edge) =>\n nodeIdsWithStatus.has(edge.source) &&\n (filter === \"related\" || nodeIdsWithStatus.has(edge.target))\n );\n const relatedNodeIds =\n filter === \"minimal\"\n ? nodeIdsWithStatus\n : new Set([\n ...nodeIdsWithStatus,\n ...new Set(relatedEdges.map((edge) => edge.target)),\n ]);\n return [\n ...relatedEdges,\n ...componentGraph.nodes.filter((node) => relatedNodeIds.has(node.id)),\n ];\n }\n\n return [...componentGraph.edges, ...componentGraph.nodes];\n /* return [\n {\n type: \"edge\",\n source: \"permission_service\",\n target: \"cmdb_service\",\n },\n {\n type: \"edge\",\n source: \"sys_service\",\n target: \"cmdb_service\",\n },\n {\n type: \"edge\",\n source: \"cmdb_extend\",\n target: \"cmdb_service\",\n },\n {\n type: \"edge\",\n source: \"user_service\",\n target: \"cmdb_service\",\n },\n {\n type: \"edge\",\n source: \"cmdb_service\",\n target: \"easy_core\",\n view: {\n strokeColor: \"var(--color-error)\",\n text: {\n content: \"×\",\n offset: 7,\n style: {\n color: \"var(--color-error)\",\n lineHeight: \"14px\",\n },\n },\n },\n },\n {\n type: \"edge\",\n source: \"cmdb_service\",\n target: \"ens_client\",\n },\n {\n type: \"edge\",\n source: \"user_service\",\n target: \"ens_client\",\n },\n {\n type: \"node\",\n id: \"permission_service\",\n data: {\n name: \"permission_service\",\n icon: {\n lib: \"easyops\",\n category: \"app\",\n icon: \"permission-center-app\",\n },\n },\n },\n {\n type: \"node\",\n id: \"sys_service\",\n data: {\n name: \"sys_service\",\n icon: {\n lib: \"easyops\",\n category: \"customer\",\n icon: \"system-setting\",\n },\n },\n },\n {\n type: \"node\",\n id: \"cmdb_extend\",\n data: {\n name: \"cmdb_extend\",\n icon: {\n lib: \"easyops\",\n category: \"itsc-form\",\n icon: \"extends\",\n },\n },\n },\n {\n type: \"node\",\n id: \"user_service\",\n data: {\n name: \"user_service\",\n icon: {\n lib: \"easyops\",\n category: \"model\",\n icon: \"user-group\",\n },\n },\n },\n {\n type: \"node\",\n id: \"easy_core\",\n data: {\n name: \"easy_core\",\n icon: {\n lib: \"easyops\",\n category: \"model\",\n icon: \"sql-package\",\n },\n },\n },\n {\n type: \"node\",\n id: \"ens_client\",\n data: {\n name: \"ens_client\",\n icon: {\n lib: \"fa\",\n prefix: \"fas\",\n icon: \"map-location\",\n },\n },\n },\n {\n type: \"node\",\n id: \"cmdb_service\",\n data: {\n name: \"cmdb_service\",\n icon: {\n lib: \"easyops\",\n category: \"product\",\n icon: \"easy-cmdb\",\n },\n },\n },\n ] as EoDisplayCanvasProps[\"cells\"]; */\n }, [componentGraph, filter]);\n\n const layoutOptions = useMemo<EoDisplayCanvasProps[\"layoutOptions\"]>(() => {\n return {\n padding: CANVAS_PADDING,\n nodesep: 90,\n ranksep: 70,\n };\n }, []);\n\n const defaultNodeBricks = useMemo<\n EoDisplayCanvasProps[\"defaultNodeBricks\"]\n >(() => {\n return [\n {\n component: TopologyNode,\n },\n ];\n }, []);\n\n const defaultEdgeLines = useMemo<\n EoDisplayCanvasProps[\"defaultEdgeLines\"]\n >(() => {\n return [\n {\n strokeColor: \"#8c8c8c\",\n },\n ];\n }, []);\n\n const autoSize = useMemo<EoDisplayCanvasProps[\"autoSize\"]>(\n () =>\n _autoSize\n ? {\n width: \"fit-content\",\n height: \"fit-content\",\n // 453 - 18 - 8 - 18 = 409\n minWidth: 409,\n // Todo: listen on resize\n maxWidth: window.innerWidth * 0.9,\n minHeight: 150,\n }\n : undefined,\n [_autoSize]\n );\n\n const ref = useRef<EoDisplayCanvas>(null);\n\n const onReCenter = useCallback(() => {\n ref.current?.center();\n }, []);\n\n return (\n <div\n className={classNames(sharedStyles[\"table-container\"], styles.topology, {\n [styles[\"auto-size\"]]: _autoSize,\n })}\n >\n <AsyncWrappedDisplayCanvas\n ref={ref}\n cells={cells}\n layout=\"dagre\"\n layoutOptions={layoutOptions}\n autoSize={autoSize}\n defaultNodeSize={DEFAULT_NODE_SIZE}\n defaultNodeBricks={defaultNodeBricks}\n defaultEdgeLines={defaultEdgeLines}\n hideZoomBar\n scrollable={false}\n extraStyleTexts={extraStyleTexts}\n />\n <div className={`${toolbarStyles.toolbar} ${styles.toolbar}`}>\n <WrappedIconButton\n variant=\"mini\"\n icon={ICON_EXPAND}\n onClick={onReCenter}\n />\n </div>\n </div>\n );\n}\n\ninterface TopologyNodeProps {\n node: {\n id: string;\n data: RawComponentGraphNode;\n };\n refCallback?: (element: HTMLElement | null) => void;\n}\n\nfunction TopologyNode({ node, refCallback }: TopologyNodeProps): JSX.Element {\n return (\n <div\n className={classNames(\"topology-node\", {\n \"topology-node-trouble\": node.data.status === \"trouble\",\n \"topology-node-ok\": node.data.status === \"ok\",\n })}\n ref={refCallback}\n >\n <WrappedIcon lib=\"fa\" prefix=\"fas\" icon=\"cube\" />\n <div className=\"topology-node-label\">{node.data.name}</div>\n </div>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../images/start@2x.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-start--Mrh1iP5r{width:65px;height:65px;position:relative;overflow:visible}.icon--NxC4u6Wl{width:75px;height:75px;background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});background-size:75px 75px;background-repeat:no-repeat;background-position:center;position:absolute;left:-5px;top:-1px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-start\": `node-start--Mrh1iP5r`,\n\t\"icon\": `icon--NxC4u6Wl`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// istanbul ignore file\nimport { useMemo } from \"react\";\nimport type {\n Job,\n GraphEdge,\n GraphNode,\n TaskBaseDetail,\n GraphNavItem,\n GraphGeneratedView,\n} from \"./interfaces\";\nimport { LOADING_NODE_ID, REQUIREMENT_NODE_ID } from \"./constants\";\nimport { getOrderedJobs, type GetOrderedJobsOptions } from \"./getOrderedJobs\";\nimport { DONE_STATES } from \"../shared/constants\";\n\nexport function useTaskGraph(\n task: TaskBaseDetail | null | undefined,\n jobs: Job[] | null | undefined,\n options?: GetOrderedJobsOptions\n) {\n return useMemo(() => {\n if (!task) {\n return null;\n }\n\n const fixedJobs = jobs ?? [];\n const nodes: GraphNode[] = [];\n const edges: GraphEdge[] = [];\n const nav: GraphNavItem[] = [];\n const views: GraphGeneratedView[] = [];\n\n nodes.push({\n type: \"requirement\",\n id: REQUIREMENT_NODE_ID,\n content: task.requirement,\n state: fixedJobs.length === 0 ? \"working\" : \"completed\",\n });\n\n const { list, jobMap, jobLevels, downstreamMap, originalDownstreamMap } =\n getOrderedJobs(jobs, options);\n\n const upstreamMap = new Map<string, string[]>();\n // Setup upstreamMap\n for (const [jobId, downstreams] of downstreamMap) {\n for (const target of downstreams) {\n let upstreams = upstreamMap.get(target);\n if (!upstreams) {\n upstreamMap.set(target, (upstreams = []));\n }\n upstreams.push(jobId);\n }\n }\n\n const withHiddenDownstreamJobs: string[] = [];\n if (originalDownstreamMap) {\n for (const jobId of list) {\n const job = jobMap.get(jobId)!;\n if (job.state === \"completed\") {\n const downstream = downstreamMap.get(jobId);\n if (!downstream?.length) {\n const originalDownstream = originalDownstreamMap.get(jobId);\n if (originalDownstream?.length) {\n withHiddenDownstreamJobs.push(jobId);\n }\n }\n }\n }\n }\n\n const jobNodesMap = new Map<string, string[]>([\n [REQUIREMENT_NODE_ID, [REQUIREMENT_NODE_ID]],\n ]);\n\n for (const jobId of list) {\n const job = jobMap.get(jobId)!;\n const { messages } = job;\n const hasMessages =\n (Array.isArray(messages) && messages.length > 0) || job.toolCall;\n\n const nodeIds: string[] = [];\n\n if (job.instruction) {\n const instructionNodeId = `instruction:${jobId}`;\n nodes.push({\n type: \"instruction\",\n id: instructionNodeId,\n job,\n state: job.state,\n });\n\n nodeIds.push(instructionNodeId);\n\n nav.push({\n id: job.id,\n title: job.instruction,\n state: job.state,\n level: jobLevels.get(job.id)!,\n });\n } else if (job.toolCall?.annotations?.title) {\n nav.push({\n id: job.id,\n title: job.toolCall.annotations.title,\n state: job.state,\n level: jobLevels.get(job.id)!,\n });\n }\n\n if (hasMessages || !job.instruction) {\n const jobNodeId = `job:${job.id}`;\n nodes.push({\n type: \"job\",\n id: jobNodeId,\n job,\n state: job.state,\n });\n nodeIds.push(jobNodeId);\n }\n\n if (job.generatedView) {\n // Add view node for job\n const viewNodeId = `view:${job.id}`;\n nodes.push({\n type: \"view\",\n id: viewNodeId,\n job,\n });\n nodeIds.push(viewNodeId);\n\n views.push({\n id: job.id,\n view: job.generatedView,\n });\n }\n\n jobNodesMap.set(jobId, nodeIds);\n }\n\n for (const jobId of list) {\n const nodeIds = jobNodesMap.get(jobId)!;\n\n const upstreams = upstreamMap.get(jobId);\n for (const upstream of upstreams ?? [REQUIREMENT_NODE_ID]) {\n const parentNodeIds = jobNodesMap.get(upstream)!;\n edges.push({\n source: parentNodeIds[parentNodeIds.length - 1],\n target: nodeIds[0],\n });\n }\n\n for (let i = 1; i < nodeIds.length; i++) {\n edges.push({\n source: nodeIds[i - 1],\n target: nodeIds[i],\n });\n }\n }\n\n if (nodes.length === 1 && !DONE_STATES.includes(task.state)) {\n nodes.push({\n type: \"loading\",\n id: LOADING_NODE_ID,\n });\n edges.push({\n source: REQUIREMENT_NODE_ID,\n target: LOADING_NODE_ID,\n });\n } else if (withHiddenDownstreamJobs.length > 0) {\n let counter = 0;\n for (const jobId of withHiddenDownstreamJobs) {\n const nodeIds = jobNodesMap.get(jobId)!;\n const lastNodeId = nodeIds[nodeIds.length - 1];\n if (!edges.some((edge) => edge.source === lastNodeId)) {\n const loadingId = `${LOADING_NODE_ID}:${counter++}`;\n nodes.push({\n type: \"loading\",\n id: loadingId,\n });\n edges.push({\n source: lastNodeId,\n target: loadingId,\n });\n }\n }\n }\n\n return {\n nodes,\n edges,\n nav,\n views,\n jobLevels,\n };\n }, [task, jobs]);\n}\n","import type { NodeRect, SizeTuple, TransformLiteral } from \"../interfaces\";\n\n/**\n * Get the scroll movement so that the given rectangle is visible in container.\n */\nexport function getScrollTo(\n rect: NodeRect,\n containerSize: SizeTuple,\n padding: [top: number, right: number, bottom: number, left: number],\n transform: TransformLiteral,\n block?: \"start\" | \"nearest\"\n) {\n const [containerWidth, containerHeight] = containerSize;\n const [paddingTop, paddingRight, paddingBottom, paddingLeft] = padding;\n const { x: left, y: top, width, height } = rect;\n const right = left + width;\n const bottom = top + height;\n\n const transformedTop = top * transform.k + transform.y;\n const transformedBottom = bottom * transform.k + transform.y;\n\n const diffYTop = paddingTop - transformedTop;\n const diffYBottom = containerHeight - paddingBottom - transformedBottom;\n const y =\n diffYTop > 0 || block === \"start\"\n ? diffYTop / transform.k\n : diffYBottom < 0\n ? diffYBottom / transform.k\n : 0;\n\n const transformedLeft = left * transform.k + transform.x;\n const transformedRight = right * transform.k + transform.x;\n\n const diffXLeft = paddingLeft - transformedLeft;\n const diffXRight = containerWidth - paddingRight - transformedRight;\n const x =\n diffXLeft > 0\n ? diffXLeft / transform.k\n : diffXRight < 0\n ? diffXRight / transform.k\n : 0;\n\n return { x, y };\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FilePreview.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FilePreview.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, {\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { getBasePath } from \"@next-core/runtime\";\nimport type { Drawer } from \"@next-bricks/containers/drawer\";\nimport type { GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport classNames from \"classnames\";\nimport { saveAs } from \"file-saver\";\nimport type { FileInfo } from \"../interfaces\";\nimport {\n WrappedDrawer,\n WrappedIconButton,\n WrappedIcon,\n WrappedButton,\n} from \"../../shared/bricks\";\nimport { CanvasContext } from \"../CanvasContext\";\nimport styles from \"./FilePreview.module.css\";\nimport shareStyles from \"../shared.module.css\";\nimport toolbarStyles from \"../toolbar.module.css\";\nimport { EnhancedMarkdown } from \"../EnhancedMarkdown/EnhancedMarkdown\";\nimport { K, t } from \"../i18n\";\nimport { ICON_CLOSE, ICON_LOADING } from \"../../shared/constants\";\nimport { getMimeTypeByFilename } from \"../utils/file\";\nimport imageUnpreviewable from \"../images/unpreviewable.png\";\n\nconst ICON_DOWNLOAD: GeneralIconProps = {\n lib: \"antd\",\n icon: \"download\",\n};\n\nexport interface FilePreviewProps {\n file: FileInfo;\n}\n\nfunction getDrawerWidth() {\n const { innerWidth } = window;\n return innerWidth < 800\n ? innerWidth\n : innerWidth < 1280\n ? innerWidth * 0.9\n : 1246;\n}\n\nexport function FilePreview({ file }: FilePreviewProps) {\n const ref = useRef<Drawer>(null);\n const { setActiveFile } = useContext(CanvasContext);\n const { bytes, uri, mimeType, name } = file;\n const type = mimeType || getMimeTypeByFilename(name);\n const [status, setStatus] = useState<\"loading\" | \"loaded\" | \"error\">(\n \"loading\"\n );\n\n const [content, setContent] = useState<string | undefined>();\n useEffect(() => {\n if (type === \"application/pdf\") {\n setStatus(uri || bytes ? \"loaded\" : \"error\");\n return;\n }\n\n setStatus(\"loading\");\n if (type !== \"text/markdown\") {\n setStatus(\"error\");\n return;\n }\n\n if (bytes) {\n setContent(atob(bytes));\n setStatus(\"loaded\");\n return;\n }\n\n if (uri) {\n let ignore = false;\n (async () => {\n try {\n const response = await fetch(\n new URL(uri, `${location.origin}${getBasePath()}`)\n );\n if (!response.ok) {\n throw new Error(`Failed to fetch file: ${response.statusText}`);\n }\n const text = await response.text();\n if (ignore) {\n return;\n }\n setContent(text);\n setStatus(\"loaded\");\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error fetching file:\", error);\n setStatus(\"error\");\n }\n })();\n return () => {\n ignore = true;\n };\n }\n }, [bytes, type, uri]);\n\n const handleDownload = useCallback(() => {\n const { bytes, uri, mimeType, name } = file;\n const filename = name || t(K.UNTITLED);\n if (bytes) {\n saveAs(new Blob([atob(bytes)], { type: mimeType }), filename);\n } else if (uri) {\n const link = document.createElement(\"a\");\n link.href = new URL(uri, `${location.origin}${getBasePath()}`).toString();\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n }, [file]);\n\n const handleClickClose = useCallback(() => {\n ref.current?.close();\n }, []);\n\n const handleClose = useCallback(() => {\n setTimeout(() => {\n setActiveFile(null);\n }, 300);\n }, [setActiveFile]);\n\n useEffect(() => {\n setTimeout(() => {\n ref.current?.open();\n });\n }, []);\n\n const [width, setWidth] = useState(getDrawerWidth);\n\n useEffect(() => {\n const onResize = () => {\n setWidth(getDrawerWidth);\n };\n window.addEventListener(\"resize\", onResize);\n return () => {\n window.removeEventListener(\"resize\", onResize);\n };\n }, []);\n\n return (\n <WrappedDrawer\n ref={ref}\n customTitle={file.name || t(K.UNTITLED)}\n width={width}\n closable={false}\n mask\n maskClosable\n keyboard\n onClose={handleClose}\n >\n {status === \"loading\" ? (\n <div className={styles.loading}>\n <WrappedIcon {...ICON_LOADING} />\n </div>\n ) : status === \"error\" ? (\n <div className={styles.error}>\n <img\n src={imageUnpreviewable}\n alt=\"Unpreviewable\"\n width={591}\n height={249}\n />\n <p>\n {t(K.FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX)}\n <WrappedButton\n themeVariant=\"elevo\"\n type=\"primary\"\n onClick={handleDownload}\n >\n {t(K.DOWNLOAD)}\n </WrappedButton>\n {t(K.FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX)}\n </p>\n </div>\n ) : type === \"application/pdf\" ? (\n <embed\n className={styles.embed}\n src={\n uri\n ? new URL(uri, `${location.origin}${getBasePath()}`).toString()\n : `data:application/pdf;base64,${bytes}`\n }\n type={type}\n title={name}\n width=\"100%\"\n height=\"100%\"\n />\n ) : (\n <div className={classNames(styles.content, shareStyles.markdown)}>\n <EnhancedMarkdown content={content} />\n </div>\n )}\n <div slot=\"extra\" className={styles.toolbar}>\n <WrappedIconButton icon={ICON_DOWNLOAD} onClick={handleDownload} />\n <div className={toolbarStyles.divider} />\n <WrappedIconButton icon={ICON_CLOSE} onClick={handleClickClose} />\n </div>\n </WrappedDrawer>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-instruction--Gu7k6RDs{max-width:437px;max-width:min(437px,90vw);background:rgba(255,255,255,0.2);box-shadow:0px 4px 10px 0px rgba(54,64,80,0.08);border-radius:9999px;border:1px solid rgba(255,255,255,0.284);padding:6px 16px;color:rgba(0,0,0,0.45)}.text--jsSeLl7B{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;--shine-text-color:rgba(0,0,0,0.45);--shine-text-highlight-color:#dcdcdc}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-instruction\": `node-instruction--Gu7k6RDs`,\n\t\"text\": `text--jsSeLl7B`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","export interface Rect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * Merges multiple rectangles into a single bounding rectangle.\n */\nexport function mergeRects(rects: Rect[]): Rect {\n let left = Infinity;\n let top = Infinity;\n let right = -Infinity;\n let bottom = -Infinity;\n for (const rect of rects) {\n const r = rect.x + rect.width;\n const b = rect.y + rect.height;\n if (rect.x < left) {\n left = rect.x;\n }\n if (r > right) {\n right = r;\n }\n if (rect.y < top) {\n top = rect.y;\n }\n if (b > bottom) {\n bottom = b;\n }\n }\n\n const width = right - left;\n const height = bottom - top;\n\n return { x: left, y: top, width, height };\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ToolCallDetail.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ToolCallDetail.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { Drawer } from \"@next-bricks/containers/drawer\";\nimport classNames from \"classnames\";\nimport type { DataPart, Job, Part } from \"../interfaces\";\nimport { WrappedDrawer } from \"../../shared/bricks\";\nimport styles from \"./ToolCallDetail.module.css\";\nimport sharedStyles from \"../shared.module.css\";\nimport { K, t } from \"../i18n\";\nimport { TaskContext } from \"../../shared/TaskContext\";\nimport { ToolCallStatus } from \"../ToolCallStatus/ToolCallStatus\";\nimport { ToolProgressLine } from \"../ToolProgressLine/ToolProgressLine\";\nimport { Topology } from \"../Topology/Topology\";\nimport { CodeBlock } from \"../CodeBlock/CodeBlock\";\nimport { EnhancedMarkdown } from \"../EnhancedMarkdown/EnhancedMarkdown\";\n\nexport interface ToolCallDetailProps {\n job: Job;\n}\n\nfunction getDrawerWidth() {\n const { innerWidth } = window;\n return innerWidth < 800\n ? Math.min(500, innerWidth)\n : innerWidth < 1000\n ? innerWidth * 0.8\n : 800;\n}\n\nexport function ToolCallDetail({ job }: ToolCallDetailProps): JSX.Element {\n const { setActiveToolCallJobId } = useContext(TaskContext);\n const toolCall = job.toolCall!;\n const toolTitle = toolCall.annotations?.title;\n\n const [progress, intermediateParts, responseParts] = useMemo(() => {\n const toolCallMessages = job.messages?.filter((msg) => msg.role === \"tool\");\n const intermediateParts: DataPart[] = [];\n const responseParts: Part[] = [];\n let progress: DataPart | undefined;\n for (const message of toolCallMessages ?? []) {\n for (const part of message.parts) {\n if (part.type === \"data\") {\n switch (part.data?.type) {\n case \"progress\":\n // Take the last progress part\n progress = part;\n continue;\n case \"markdown\":\n case \"cmdb_instance_detail\":\n continue;\n default:\n intermediateParts.push(part);\n continue;\n }\n } else if (part.type === \"file\") {\n continue;\n }\n responseParts.push(part);\n }\n }\n return [progress, intermediateParts, responseParts];\n }, [job.messages]);\n\n const handleClose = useCallback(() => {\n setTimeout(() => {\n setActiveToolCallJobId(null);\n }, 300);\n }, [setActiveToolCallJobId]);\n\n const ref = useRef<Drawer>(null);\n\n useEffect(() => {\n setTimeout(() => {\n ref.current?.open();\n });\n }, []);\n\n const [width, setWidth] = useState(getDrawerWidth);\n\n useEffect(() => {\n const onResize = () => {\n setWidth(getDrawerWidth);\n };\n window.addEventListener(\"resize\", onResize);\n return () => {\n window.removeEventListener(\"resize\", onResize);\n };\n }, []);\n\n const hasProcessParts = intermediateParts.length > 0 || !!progress;\n const hasResponseParts = responseParts.length > 0;\n const toolState =\n ([\"working\", \"input-required\"].includes(job.state) && hasProcessParts) ||\n hasResponseParts\n ? \"completed\"\n : job.state;\n\n const failed = job.isError || toolState === \"failed\";\n\n return (\n <WrappedDrawer\n ref={ref}\n customTitle={toolTitle || toolCall.name}\n width={width}\n closable\n mask\n maskClosable\n keyboard\n onClose={handleClose}\n >\n <ToolCallStatus job={job} variant=\"read-only\" />\n <div className={styles.detail}>\n <div className={styles.heading}>{t(K.ARGUMENTS)}:</div>\n <div className={`${styles.body} ${sharedStyles.markdown}`}>\n <PreComponent content={toolCall.originalArguments} maybeJson />\n </div>\n </div>\n {hasProcessParts && (\n <div className={styles.detail}>\n <div className={styles.heading}>{t(K.PROCESS)}:</div>\n <div className={`${styles.body} ${sharedStyles.markdown}`}>\n {intermediateParts.map((part, partIndex) =>\n part.data?.type === \"stream\" ? (\n <ProcessMessageComponent\n key={partIndex}\n content={part.data.message}\n />\n ) : part.data?.type === \"graph\" &&\n [\"component_graph\", \"component_graph_node\"].includes(\n part.data.message?.type\n ) ? (\n job.componentGraph ? (\n <Topology\n key={partIndex}\n componentGraph={job.componentGraph}\n filter={\n part.data.message.type === \"component_graph_node\"\n ? \"related\"\n : \"all\"\n }\n />\n ) : null\n ) : (\n <PreComponent key={partIndex} content={JSON.stringify(part)} />\n )\n )}\n {!!progress && (\n <div\n className={classNames(styles[\"progress-container\"], {\n [styles.fallback]: failed,\n })}\n >\n <ToolProgressLine progress={progress} failed={failed} />\n </div>\n )}\n </div>\n </div>\n )}\n {hasResponseParts && (\n <div className={styles.detail}>\n <div className={styles.heading}>{t(K.RESPONSE)}:</div>\n <div className={`${styles.body} ${sharedStyles.markdown}`}>\n {responseParts.map((part, partIndex) =>\n part.type === \"data\" && part.data?.type === \"progress\" ? null : (\n <PreComponent\n key={partIndex}\n content={\n part.type === \"text\" ? part.text : JSON.stringify(part)\n }\n maybeJson={part.type === \"text\"}\n />\n )\n )}\n </div>\n </div>\n )}\n </WrappedDrawer>\n );\n}\n\nfunction PreComponent({\n content,\n maybeJson,\n}: {\n content?: string;\n maybeJson?: boolean;\n}): JSX.Element {\n const [refinedContent, fallback] = useMemo(() => {\n if (maybeJson) {\n try {\n const json = JSON.parse(content ?? \"\");\n return [`${\"```json\\n\"}${JSON.stringify(json, null, 2)}${\"\\n```\"}`];\n } catch {\n // Fallback to original content\n }\n }\n return [content, true];\n }, [content, maybeJson]);\n\n return fallback ? (\n <CodeBlock className={classNames(\"language-plaintext\", styles.fallback)}>\n <code>{refinedContent}</code>\n </CodeBlock>\n ) : (\n <EnhancedMarkdown content={refinedContent} />\n );\n}\n\nfunction ProcessMessageComponent({\n content,\n}: {\n content: string;\n}): JSX.Element {\n return (\n <div\n className={classNames(styles[\"stream-message\"], sharedStyles.markdown)}\n >\n <EnhancedMarkdown content={content} />\n </div>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-feedback--KxFAmdwv{width:var(--cruise-canvas-node-width-medium);background:rgba(255,255,255,0.2);border-radius:12px;border:1px solid rgba(255,255,255,0.3);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:20px 28px}.heading--fXMqBnIN{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.title--quMhohQS{font-weight:500}.form-item--sTzFplB4{font-size:12px;line-height:17px;color:rgba(0,0,0,0.88)}.form-item--sTzFplB4.horizontal--JFPWd5U8{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;gap:1em}.form-item--sTzFplB4.vertical--zf53urs4{margin-top:16px}.form-item--sTzFplB4.vertical--zf53urs4 label{display:block;color:rgba(0,0,0,0.45);margin-bottom:8px}.form-item--sTzFplB4 textarea{width:100%;background:none;border-radius:8px;border:1px solid rgba(0,0,0,0.15);padding:8px;color:#262626}.form-item--sTzFplB4 textarea:focus{outline:none;border-color:rgba(0,0,0,0.25)}.options--bOVSfi90{display:flex;align-items:center}.radio--_bC0WUI1{position:relative;cursor:pointer}.radio--_bC0WUI1 input{width:0px;height:0px;position:absolute;-webkit-appearance:none;-moz-appearance:none;appearance:none}.radio--_bC0WUI1 span{display:flex;align-items:center;justify-content:center;width:64px;height:28px;border-radius:8px;background:none;border:1px solid rgba(0,0,0,0.15)}.radio--_bC0WUI1 input:checked + span{background:rgba(255,255,255,0.5);border:none}.radio--_bC0WUI1 input:not(:checked) + span:hover{background:rgba(255,255,255,0.3);border:none}.radio--_bC0WUI1 + .radio--_bC0WUI1{margin-left:8px}.submit--ljmSNT1W{display:flex;justify-content:end;margin-top:18px;gap:8px}.validate--IrC7JDzY .form-item--sTzFplB4:has(input:invalid) .label--sygKykNQ{color:#f24c25}.submitted--OT01R7oS{background:#d0e7d6;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:none;font-weight:500;color:#009929;padding:17px;text-align:center}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-feedback\": `node-feedback--KxFAmdwv`,\n\t\"heading\": `heading--fXMqBnIN`,\n\t\"title\": `title--quMhohQS`,\n\t\"form-item\": `form-item--sTzFplB4`,\n\t\"horizontal\": `horizontal--JFPWd5U8`,\n\t\"vertical\": `vertical--zf53urs4`,\n\t\"options\": `options--bOVSfi90`,\n\t\"radio\": `radio--_bC0WUI1`,\n\t\"submit\": `submit--ljmSNT1W`,\n\t\"validate\": `validate--IrC7JDzY`,\n\t\"label\": `label--sygKykNQ`,\n\t\"submitted\": `submitted--OT01R7oS`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-end--yzRaOZnC{display:flex;flex-direction:column;align-items:center}.content--iXSH199p{display:flex;align-items:center;margin-bottom:20px}.icon--IVcHjGFO{width:18px;height:18px;display:flex;align-items:center;justify-content:center;color:#fff;background:#29cc49;border-radius:18px;font-size:14px;margin-right:6px}.text--dW7Y74et{font-weight:500}.button--mkIwsPzt{width:120px;height:30px;background:rgba(0,0,0,0.04);border:none;border-radius:15px;text-align:center;cursor:pointer}.button--mkIwsPzt:hover{background:rgba(0,0,0,0.08)}.button--mkIwsPzt:active{background:rgba(0,0,0,0.15)}.button--mkIwsPzt:focus{outline:none}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-end\": `node-end--yzRaOZnC`,\n\t\"content\": `content--iXSH199p`,\n\t\"icon\": `icon--IVcHjGFO`,\n\t\"text\": `text--dW7Y74et`,\n\t\"button\": `button--mkIwsPzt`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.toolbar--ELlNUAti{position:absolute;display:flex;align-items:center;padding:3px 5px;-webkit-user-select:none;user-select:none;background:rgba(255,255,255,0.7);box-shadow:0px 3px 14px 0px rgba(0,0,0,0.1),0px 1px 4px 0px rgba(0,0,0,0.06);border-radius:8px;border:1px solid rgba(255,255,255,0.3)}.divider--JeH8feaX{background:rgba(0,0,0,0.15);width:1px;height:16px}.toolbar--ELlNUAti > :not(:last-child){margin-right:6px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"toolbar\": `toolbar--ELlNUAti`,\n\t\"divider\": `divider--JeH8feaX`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeFeedback.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeFeedback.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React, { useCallback, useContext, useRef, useState } from \"react\";\nimport styles from \"./NodeFeedback.module.css\";\nimport { K, t } from \"../i18n\";\nimport { WrappedButton, WrappedIconButton } from \"../../shared/bricks\";\nimport { ICON_CLOSE } from \"../../shared/constants\";\nimport classNames from \"classnames\";\nimport { CanvasContext } from \"../CanvasContext\";\n\nlet checks:\n | Array<{\n label: string;\n value: string;\n group: \"plan\" | \"result\";\n }>\n | undefined;\n\nfunction getChecks() {\n if (!checks) {\n checks = [\n {\n label: `1. ${t(K.IS_THE_TASK_PLAN_COMPLETE)}`,\n value: \"计划完备\",\n group: \"plan\",\n },\n {\n label: `2. ${t(K.IS_THE_TASK_PLAN_LOGICALLY_CORRECT)}`,\n value: \"逻辑正确\",\n group: \"plan\",\n },\n {\n label: `3. ${t(K.ARE_THE_TASK_PLAN_STEPS_CONCISE)}`,\n value: \"步骤精简\",\n group: \"plan\",\n },\n {\n label: `4. ${t(K.ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE)}`,\n value: \"结论准确\",\n group: \"result\",\n },\n {\n label: `5. ${t(K.IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT)}`,\n value: \"支撑证据充足\",\n group: \"result\",\n },\n ];\n }\n return checks;\n}\n\nexport function NodeFeedback(): JSX.Element {\n const {\n submittingFeedback,\n submittedFeedback,\n setShowFeedback,\n onSubmitFeedback,\n } = useContext(CanvasContext);\n const formRef = useRef<HTMLFormElement>(null);\n const checks = getChecks();\n const [triedSubmit, setTriedSubmit] = useState(false);\n\n const handleSubmit = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n setTriedSubmit(true);\n if (!formRef.current?.reportValidity()) {\n return;\n }\n const formData = new FormData(formRef.current!);\n const plan: string[] = [];\n const result: string[] = [];\n for (let i = 0; i < checks.length; i++) {\n const value = formData.get(`feedback-check-${i}`);\n if (value) {\n if (checks[i].group === \"plan\") {\n plan.push(value as string);\n } else {\n result.push(value as string);\n }\n }\n }\n onSubmitFeedback({\n plan,\n result,\n feedback: (formData.get(\"feedback\") ?? \"\") as string,\n });\n },\n [checks, onSubmitFeedback]\n );\n\n const handleReset = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n setTriedSubmit(false);\n formRef.current?.reset();\n }, []);\n\n if (submittedFeedback) {\n return (\n <div className={`${styles[\"node-feedback\"]} ${styles.submitted}`}>\n {t(K.THANKS_FOR_YOUR_FEEDBACK)}\n </div>\n );\n }\n\n return (\n <div className={styles[\"node-feedback\"]}>\n <div className={styles.heading}>\n <div className={styles.title}>{t(K.FEEDBACK_NODE_TITLE)}</div>\n <WrappedIconButton\n icon={ICON_CLOSE}\n variant=\"mini\"\n onClick={() => setShowFeedback(false)}\n />\n </div>\n <form\n className={classNames(styles.form, { [styles.validate]: triedSubmit })}\n ref={formRef}\n >\n {checks.map((check, index) => (\n <div\n key={index}\n className={`${styles[\"form-item\"]} ${styles.horizontal}`}\n >\n <div className={styles.label}>{check.label}</div>\n <div className={styles.options}>\n <label className={styles.radio}>\n <input\n type=\"radio\"\n required\n name={`feedback-check-${index}`}\n value={check.value}\n />\n <span>{t(K.YES)}</span>\n </label>\n <label className={styles.radio}>\n <input\n type=\"radio\"\n required\n name={`feedback-check-${index}`}\n value=\"\"\n />\n <span>{t(K.NO)}</span>\n </label>\n </div>\n </div>\n ))}\n <div className={`${styles[\"form-item\"]} ${styles.vertical}`}>\n <label htmlFor=\"feedback-content\">{t(K.PROBLEM_FEEDBACK)}</label>\n <textarea\n id=\"feedback-content\"\n name=\"feedback\"\n placeholder={t(K.PROBLEM_FEEDBACK_PLACEHOLDER)}\n rows={2}\n />\n </div>\n <div className={styles.submit}>\n <WrappedButton themeVariant=\"elevo\" type=\"text\" onClick={handleReset}>\n {t(K.RESET)}\n </WrappedButton>\n <WrappedButton\n themeVariant=\"elevo\"\n type=\"primary\"\n shape=\"round\"\n onClick={handleSubmit}\n disabled={submittingFeedback}\n >\n {t(K.SUBMIT)}\n </WrappedButton>\n </div>\n </form>\n </div>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.zoom-bar--MTw5VGPl{left:20px;bottom:20px}@media (max-width: 1079px){.zoom-bar--MTw5VGPl{left:auto;bottom:auto;top:20px;right:20px}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"zoom-bar\": `zoom-bar--MTw5VGPl`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// istanbul ignore file: experimental\nimport React, { useCallback, useContext, useRef, useState } from \"react\";\nimport classNames from \"classnames\";\nimport jobStyles from \"../NodeJob/NodeJob.module.css\";\nimport type { Job } from \"../interfaces\";\nimport { CanvasContext } from \"../CanvasContext\";\nimport { CreatedView } from \"../../shared/CreatedView/CreatedView\";\n\nexport interface NodeViewProps {\n job: Job;\n active?: boolean;\n}\n\nexport function NodeView({ job, active }: NodeViewProps): JSX.Element {\n const ref = useRef<HTMLDivElement>(null);\n const { setHoverOnScrollableContent } = useContext(CanvasContext);\n\n const [size, setSize] = useState<\"medium\" | \"large\">(\"medium\");\n\n const handleSizeChange = useCallback((value: \"medium\" | \"large\") => {\n setSize(value);\n }, []);\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent) => {\n let found = false;\n for (const el of e.nativeEvent.composedPath()) {\n if (el === ref.current) {\n break;\n }\n if (\n el instanceof HTMLElement &&\n el.classList.contains(\"ant-table\") &&\n el.classList.contains(\"ant-table-scroll-horizontal\")\n ) {\n found = true;\n break;\n }\n }\n setHoverOnScrollableContent(found);\n },\n [setHoverOnScrollableContent]\n );\n\n const handleMouseLeave = useCallback(() => {\n setHoverOnScrollableContent(false);\n }, [setHoverOnScrollableContent]);\n\n return (\n <div\n className={classNames(jobStyles[\"node-job\"], {\n [jobStyles.active]: active,\n [jobStyles.large]: size === \"large\",\n })}\n ref={ref}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n >\n <div className={jobStyles.background} />\n <CreatedView job={job} onSizeChange={handleSizeChange} />\n </div>\n );\n}\n","import { pipes } from \"@easyops-cn/brick-next-pipes\";\nimport fileText from \"../images/file-text@2x.png\";\nimport filePdf from \"../images/file-pdf@2x.png\";\nimport fileOther from \"../images/file-other@2x.png\";\n\nexport function formatFileSize(size: number) {\n const [value, unit] = pipes.unitFormat(size, \"bytes\", 1);\n const number = +value;\n return `${number > 100 ? Math.round(number) : number} ${unit}`;\n}\n\nexport function getFileTypeAndIcon(\n mimeType: string | undefined,\n filename: string | undefined\n): [type: string, icon: string] {\n const type = mimeType || getMimeTypeByFilename(filename);\n\n switch (type) {\n case \"text/markdown\":\n return [\"Markdown\", fileText];\n case \"application/pdf\":\n return [\"PDF\", filePdf];\n }\n\n if (type.startsWith(\"text/\")) {\n return [\"Text\", fileText];\n }\n\n return [\"File\", fileOther];\n}\n\nexport function getMimeTypeByFilename(filename: string | undefined): string {\n let ext = \"\";\n const matches = filename?.match(/\\.([^.]+)$/);\n if (matches) {\n ext = matches[1].toLowerCase();\n }\n switch (ext) {\n case \"md\":\n return \"text/markdown\";\n case \"pdf\":\n return \"application/pdf\";\n default:\n return \"unknown\";\n }\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.content--zNKsww2N{margin:0 auto;padding:16px 0;max-width:800px}.toolbar--YWbNSe1o{display:flex;align-items:center;gap:8px}.loading--yng_2TL3{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:48px;color:var(--text-color-secondary)}.error--a2Er1bw7{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);padding-bottom:20%;display:flex;flex-direction:column;align-items:center;color:#8c8c8c}.error--a2Er1bw7 eo-button{margin:0 14px}.embed--y9Wq2k7W{display:block}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"content\": `content--zNKsww2N`,\n\t\"toolbar\": `toolbar--YWbNSe1o`,\n\t\"loading\": `loading--yng_2TL3`,\n\t\"error\": `error--a2Er1bw7`,\n\t\"embed\": `embed--y9Wq2k7W`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./toolbar.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./toolbar.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.detail--JiiWugxP{margin-top:20px;color:#595959;margin-bottom:7px}.detail--JiiWugxP .body--H_Wy7M2z code[class*=\"language-\"],.detail--JiiWugxP .body--H_Wy7M2z pre[class*=\"language-\"]{background:#ffffff}.detail--JiiWugxP .body--H_Wy7M2z pre[class*=\"language-\"]{border-radius:9px;border:1px solid #ccd1de}.detail--JiiWugxP .body--H_Wy7M2z pre.fallback--mxkVhIEE{white-space:pre-wrap;background:#fef5f3}.progress-container--tFUAQo73,\n.stream-message--G0tAm9aa{border-radius:9px;border:1px solid #ccd1de;background:#ffffff}.progress-container--tFUAQo73{padding:6px 2px}.fallback--mxkVhIEE{background:#fef5f3}.stream-message--G0tAm9aa{padding:1em;margin:0.5em 0}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"detail\": `detail--JiiWugxP`,\n\t\"body\": `body--H_Wy7M2z`,\n\t\"fallback\": `fallback--mxkVhIEE`,\n\t\"progress-container\": `progress-container--tFUAQo73`,\n\t\"stream-message\": `stream-message--G0tAm9aa`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import dagre from \"@dagrejs/dagre\";\nimport { useMemo, useRef } from \"react\";\nimport type {\n NodePosition,\n NodeRect,\n GraphEdge,\n GraphNode,\n SizeTuple,\n TaskState,\n} from \"./interfaces\";\nimport {\n EDGE_SEP,\n END_NODE_ID,\n FEEDBACK_NODE_ID,\n NODE_SEP,\n RANK_SEP,\n START_NODE_ID,\n} from \"./constants\";\n\nexport interface UseLayoutOptions {\n rawNodes: GraphNode[] | undefined;\n rawEdges: GraphEdge[] | undefined;\n sizeMap: Map<string, SizeTuple> | null;\n state?: TaskState;\n showFeedback?: boolean;\n}\n\nexport function useLayout({\n rawNodes: _rawNodes,\n rawEdges: _rawEdges,\n sizeMap,\n state,\n showFeedback,\n}: UseLayoutOptions) {\n const memoizedPositionsRef = useRef<Map<string, NodePosition> | null>(null);\n const completed = state === \"completed\";\n\n const { initialNodes, initialEdges } = useMemo(() => {\n const initialNodes: GraphNode[] = [\n {\n type: \"start\",\n id: START_NODE_ID,\n },\n ];\n const initialEdges: GraphEdge[] = [];\n const finishedNodeIds: string[] = [];\n const rawNodes = _rawNodes ?? [];\n const rawEdges = _rawEdges ?? [];\n\n const hasSource = new Set<string>(rawEdges.map((edge) => edge.target));\n const hasTarget = completed\n ? new Set<string>(rawEdges.map((edge) => edge.source))\n : null;\n\n for (const node of rawNodes) {\n if (!hasSource.has(node.id)) {\n initialEdges.push({\n source: START_NODE_ID,\n target: node.id,\n });\n }\n\n if (completed && !hasTarget!.has(node.id)) {\n finishedNodeIds.push(node.id);\n }\n }\n\n initialNodes.push(...rawNodes);\n initialEdges.push(...rawEdges);\n\n if (finishedNodeIds.length > 0) {\n initialNodes.push({\n id: END_NODE_ID,\n type: \"end\",\n });\n initialEdges.push(\n ...finishedNodeIds.map((id) => ({\n source: id,\n target: END_NODE_ID,\n }))\n );\n if (showFeedback) {\n initialNodes.push({\n id: FEEDBACK_NODE_ID,\n type: \"feedback\",\n });\n initialEdges.push({\n source: END_NODE_ID,\n target: FEEDBACK_NODE_ID,\n });\n }\n }\n\n const memoizedPositions = memoizedPositionsRef.current;\n if (memoizedPositions) {\n for (const node of initialNodes) {\n const view = memoizedPositions.get(node.id);\n if (view) {\n node.view = view as NodeRect;\n }\n }\n }\n\n return { initialNodes, initialEdges };\n }, [completed, showFeedback, _rawEdges, _rawNodes]);\n\n const startNodePositionRef = useRef<NodePosition | null>(null);\n\n return useMemo(() => {\n for (const node of initialNodes) {\n if (!sizeMap?.has(node.id)) {\n return { sizeReady: false, nodes: initialNodes, edges: [] };\n }\n }\n\n const graph = new dagre.graphlib.Graph();\n graph.setGraph({\n rankdir: \"TB\",\n nodesep: NODE_SEP,\n edgesep: EDGE_SEP,\n ranksep: RANK_SEP,\n });\n // Default to assigning a new object as a label for each new edge.\n graph.setDefaultEdgeLabel(function () {\n return {};\n });\n for (const edge of initialEdges) {\n graph.setEdge(edge.source, edge.target);\n }\n for (const node of initialNodes) {\n const [width, height] = sizeMap!.get(node.id)!;\n graph.setNode(node.id, {\n id: node.id,\n width,\n height,\n });\n }\n dagre.layout(graph);\n\n // Make the start node position unchanged\n let offsets: NodePosition | null = null;\n\n const nodes = initialNodes.map<GraphNode>((node) => {\n const nodeView = graph.node(node.id);\n const x = nodeView.x - nodeView.width / 2;\n const y = nodeView.y - nodeView.height / 2;\n\n if (node.type === \"start\") {\n if (startNodePositionRef.current) {\n offsets = {\n x: startNodePositionRef.current.x - x,\n y: startNodePositionRef.current.y - y,\n };\n } else {\n startNodePositionRef.current = { x, y };\n }\n }\n\n return {\n ...node,\n view: {\n x,\n y,\n width: nodeView.width,\n height: nodeView.height,\n },\n };\n });\n\n if (offsets) {\n for (const node of nodes) {\n Object.assign(node.view!, getPositionWithOffsets(node.view!, offsets));\n }\n }\n\n const memoizedPositions = (memoizedPositionsRef.current ??= new Map());\n for (const node of nodes) {\n const { x, y } = node.view!;\n memoizedPositions.set(node.id, { x, y });\n }\n\n const edges = initialEdges.map((edge) => {\n const source = graph.node(edge.source);\n const sourcePosition = getPositionWithOffsets(source, offsets);\n const target = graph.node(edge.target);\n const targetPosition = getPositionWithOffsets(target, offsets);\n // const turnY =\n // (sourcePosition.y +\n // source.height / 2 +\n // targetPosition.y -\n // target.height / 2) /\n // 2;\n const turnY = targetPosition.y - (target.height + RANK_SEP) / 2;\n const points: NodePosition[] = [\n { x: sourcePosition.x, y: sourcePosition.y + source.height / 2 },\n { x: sourcePosition.x, y: turnY },\n { x: targetPosition.x, y: turnY },\n { x: targetPosition.x, y: targetPosition.y - target.height / 2 },\n ];\n\n return {\n ...edge,\n points,\n };\n });\n\n return {\n sizeReady: true,\n nodes,\n edges,\n };\n }, [initialEdges, initialNodes, sizeMap]);\n}\n\nfunction getPositionWithOffsets<T extends NodePosition>(\n position: T,\n offsets: NodePosition | null\n): NodePosition {\n if (!offsets) {\n return {\n x: position.x,\n y: position.y,\n };\n }\n return {\n x: position.x + offsets.x,\n y: position.y + offsets.y,\n };\n}\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","locals","K","NS","locales","en","YES","NO","PLAN_COMPLETED","TASK_COMPLETED","SHARE","TYPE_YOUR_MESSAGE_HERE","ARGUMENTS","PROCESS","RESPONSE","CONFIRMING_PLAN_TIPS","PAUSE_THE_TASK","RESUME_THE_TASK","CANCEL_THE_TASK","CONFIRM_TO_CANCEL_THE_TASK_TITLE","CONFIRM_TO_CANCEL_THE_TASK_CONTENT","BACK_TO_CENTER","ZOOM_IN","ZOOM_OUT","FULLSCREEN","REPLAYING","REPLAY_COMPLETED","SKIP_TO_RESULTS","WATCH_AGAIN","SEND_MESSAGE","UNTITLED","FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX","FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX","DOWNLOAD","SUBMIT","RESET","FEEDBACK_NODE_TITLE","PROBLEM_FEEDBACK","PROBLEM_FEEDBACK_PLACEHOLDER","IS_THE_TASK_PLAN_COMPLETE","IS_THE_TASK_PLAN_LOGICALLY_CORRECT","ARE_THE_TASK_PLAN_STEPS_CONCISE","ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE","IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT","THANKS_FOR_YOUR_FEEDBACK","zh","t","i18n","getFixedT","DEFAULT_SCALE_RANGE_MIN","DEFAULT_SCALE_RANGE_MAX","START_NODE_ID","END_NODE_ID","FEEDBACK_NODE_ID","REQUIREMENT_NODE_ID","LOADING_NODE_ID","CANVAS_PADDING_TOP","CANVAS_PADDING_RIGHT","CANVAS_PADDING_BOTTOM","CANVAS_PADDING_LEFT","RANK_SEP","NODE_SEP","EDGE_SEP","IS_MAC","test","_ref","_userAgentData$platfo","_userAgentData","navigator","userAgentData","platform","userAgent","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","undefined","WrappedEasyOpsAvatar","wrapBrick","NodeRequirement","content","startTime","active","username","useMemo","auth","getAuth","React","className","classNames","styles","heading","avatar","nameOrInstanceId","showName","size","time","moment","format","body","AsyncWrappedCMDB","async","default","asyncWrapBrick","onChangeV2","HumanConfirm","jobId","confirmText","cancelText","humanInput","useContext","TaskContext","WrappedButton","type","themeVariant","shape","onClick","style","marginLeft","HumanAdjustPlanResult","job","response","_job$messages","msg","messages","find","role","_msg$parts","text","parts","part","JSON","parse","Array","isArray","steps","message","paddingLeft","Math","floor","log10","length","map","step","index","key","FileList","files","large","setActiveFile","CanvasContext","file","icon","getFileTypeAndIcon","mimeType","name","src","width","height","metadata","formatFileSize","RegExpLargeTableInMarkdown","NodeJob","_job$toolCall","_job$toolCall2","_arguments","_arguments2","_arguments3","_job$messages2","state","toolTitle","toolCall","annotations","title","toolName","askUser","askUserPlan","generalAskUser","knownAskUser","includes","arguments","command","loading","hasGraph","componentGraph","toolMarkdownContent","humanAnswer","cmdbInstanceDetails","sizeLarge","contents","instanceDetails","forEach","_part$data","data","_part$data2","Object","keys","outputSchema","properties","detail","human_answer","error","console","markdownContent","join","isError","background","WrappedIcon","lib","prefix","theme","tool","sharedStyles","question","markdown","EnhancedMarkdown","HumanInputComponent","confirm_text","cancel_text","HumanChooseComponent","HumanSelectFromCmdb","objectId","attrId","HumanAdjustPlan","ToolCallStatus","_message$parts","partIndex","padding","CmdbInstanceDetail","_extends","initial","Topology","filter","autoSize","_ref2","containerRef","useRef","ref","TextareaAutoResize","autoResize","minRows","borderSize","paddingSize","placeholder","submitWhen","onSubmit","e","input","currentTarget","value","_ref3","marginTop","display","flexDirection","gap","option","_ref4","objectList","setObjectList","useState","useEffect","ignore","objects","CmdbObjectApi_getObjectRef","ref_object","handleHttpError","fieldId","Suspense","i","___CSS_LOADER_URL_IMPORT_0___","URL","___CSS_LOADER_URL_REPLACEMENT_0___","NodeStart","ICON_BACK_TO_CENTER","ICON_ZOOM_OUT","ICON_ZOOM_IN","ZoomBar","scale","onScaleChange","onReCenter","handleZoomIn","useCallback","handleZoomOut","toolbarStyles","toolbar","WrappedIconButton","variant","divider","useAutoCenter","nodes","sizeReady","zoomer","rootRef","pushZoomTransition","centered","setCentered","reCenterRef","root","current","x","left","y","top","mergeRects","node","view","right","bottom","clientWidth","diffY","clientHeight","transform","k","duration","NodeEnd","onShare","button","toString","NodeLoading","inner","Nav","nav","plan","jobs","jobLevels","currentNavId","taskState","mergedNav","unmatchedSteps","insertsBefore","Map","cursor","list","get","set","unshift","entries","cursorIndex","findIndex","item","nextStep","skipped","DONE_STATES","splice","_job$state","level","instruction","disabled","_nav$querySelector","querySelector","scrollIntoView","behavior","block","lastActiveItem","findLast","_nav$querySelector2","container","NavItem","completed","working","spinning","failed","canceled","getClassNameAndIconProps","link","NodeInstruction","handleKeyboardNav","event","activeNodeId","ctrlKey","altKey","activeNode","metaKey","action","direction","shiftKey","range","moveOnAxis","axis","oppositeAxis","activePosition","getCenterPosition","candidates","diff","position","abs","maxBy","minBy","wheelData","deltaY","deltaMode","useZoom","zoomable","scrollable","pannable","pannableWithCtrl","scaleRange","_scaleRange","manualScrolledUpRef","onSwitchActiveTarget","grabbing","setGrabbing","setTransform","transformRef","zoom","wheelDelta","moved","scaleExtent","on","onContextMenu","preventDefault","document","addEventListener","removeEventListener","rootSelection","select","unsetZoom","target","closest","jobStyles","element","delta","maxScroll","scrollHeight","scrollTop","checkScrollableY","cancelable","translateBy","wheelDeltaX","wheelDeltaY","call","AsyncWrappedDisplayCanvas","DEFAULT_NODE_SIZE","CANVAS_PADDING","extraStyleTexts","nodeStyleText","ICON_EXPAND","_autoSize","cells","nodesWithStatus","status","nodeIdsWithStatus","Set","relatedEdges","edges","edge","has","source","relatedNodeIds","layoutOptions","nodesep","ranksep","defaultNodeBricks","component","TopologyNode","defaultEdgeLines","strokeColor","minWidth","maxWidth","window","innerWidth","minHeight","_ref$current","center","topology","layout","defaultNodeSize","hideZoomBar","refCallback","useTaskGraph","task","fixedJobs","views","requirement","jobMap","downstreamMap","originalDownstreamMap","getOrderedJobs","upstreamMap","downstreams","upstreams","withHiddenDownstreamJobs","downstream","originalDownstream","jobNodesMap","hasMessages","nodeIds","instructionNodeId","jobNodeId","generatedView","viewNodeId","upstream","parentNodeIds","counter","lastNodeId","some","loadingId","getScrollTo","rect","containerSize","containerWidth","containerHeight","paddingTop","paddingRight","paddingBottom","diffYTop","diffYBottom","diffXLeft","diffXRight","ICON_DOWNLOAD","getDrawerWidth","FilePreview","bytes","uri","getMimeTypeByFilename","setStatus","setContent","atob","fetch","location","origin","getBasePath","ok","Error","statusText","handleDownload","filename","saveAs","Blob","createElement","href","download","appendChild","click","removeChild","handleClickClose","close","handleClose","setTimeout","_ref$current2","open","setWidth","onResize","WrappedDrawer","customTitle","closable","mask","maskClosable","keyboard","onClose","ICON_LOADING","imageUnpreviewable","alt","embed","shareStyles","slot","ICON_CLOSE","rects","Infinity","r","b","min","ToolCallDetail","_toolCall$annotations","setActiveToolCallJobId","progress","intermediateParts","responseParts","toolCallMessages","hasProcessParts","hasResponseParts","toolState","PreComponent","originalArguments","maybeJson","_part$data3","_part$data$message","ProcessMessageComponent","stringify","fallback","ToolProgressLine","_part$data4","refinedContent","json","CodeBlock","checks","getChecks","label","group","NodeFeedback","submittingFeedback","submittedFeedback","setShowFeedback","onSubmitFeedback","formRef","triedSubmit","setTriedSubmit","handleSubmit","_formRef$current","_formData$get","reportValidity","formData","FormData","result","feedback","handleReset","_formRef$current2","reset","submitted","form","validate","check","horizontal","radio","required","vertical","htmlFor","rows","submit","NodeView","setHoverOnScrollableContent","setSize","handleSizeChange","handleMouseMove","found","el","nativeEvent","composedPath","HTMLElement","classList","contains","handleMouseLeave","onMouseMove","onMouseLeave","CreatedView","onSizeChange","unit","pipes","unitFormat","number","round","fileText","filePdf","startsWith","fileOther","ext","matches","match","toLowerCase","useLayout","rawNodes","_rawNodes","rawEdges","_rawEdges","sizeMap","showFeedback","memoizedPositionsRef","initialNodes","initialEdges","finishedNodeIds","hasSource","hasTarget","memoizedPositions","startNodePositionRef","_memoizedPositionsRef","graph","dagre","Graph","setGraph","rankdir","edgesep","setDefaultEdgeLabel","setEdge","setNode","offsets","nodeView","assign","getPositionWithOffsets","sourcePosition","targetPosition","turnY","points"],"sourceRoot":""}